我一直在使用SMTP服务器127.0.0.1 .The错误,我得到:无法获取IIS拾取目录
System.Net.Mail.SmtpException: Cannot get IIS pickup directory.at System.Net.Mail.IisPickupDirectory.GetPickupDirectory().
此错误发生,当电子邮件从ASP网页page.But邮件发送从发送ASP.NET页面,没有发生错误。 Plz的帮助。
我一直在使用SMTP服务器127.0.0.1 .The错误,我得到:无法获取IIS拾取目录
System.Net.Mail.SmtpException: Cannot get IIS pickup directory.at System.Net.Mail.IisPickupDirectory.GetPickupDirectory().
此错误发生,当电子邮件从ASP网页page.But邮件发送从发送ASP.NET页面,没有发生错误。 Plz的帮助。
不幸的是,当尝试确定IIS/SMTP拾取目录的位置时,出现任何类型的问题时会引发此异常。常见的原因是缺少IIS SMTP服务。
如果您正在使用System.Net.Mail.SmtpClient发送邮件,尝试手动设置拾取目录:
// C#
var client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = ...;
client.Send(...);
或者在ASP.NET的Web.config设置此相反:
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory
pickupDirectoryLocation="..." />
<network defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
</configuration>
或者,也可以使用SmtpDeliveryMethod.Network
方法,并将Host
和Port
属性发送到您的SMTP服务器。
分拣目录存储在II6元数据库,因此,如果你的web应用程序运行的帐户没有访问所需的节点,这个错误可以被抛出(有这我)。元数据库的权限是从文件权限单独的,所以你与数据库资源管理器探索它:
http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&displaylang=en(IIS资源工具包中的一部分)
这些节点需要有阅读权限给您的web应用程序的用户: \ LM \ SmtpSvc \ LM \ SmtpSvc \ 1
我在Windows 7上遇到了同样的错误,代码在XP上运行良好。经过多次试验和错误。我将IIS设置为将邮件存储在拾取目录中。但我仍然有错误。
在我的代码注释行:
client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
删除这行代码工作,不知道为什么。希望它也适合你,因为这个问题是一个真正的时间浪费,以troubleblush。
我没有必要更改目录上的任何权限。 我没有修改元数据库。 我没有修改web.config(我真的不想这样做,因为我只想在我的本地机器上进行开发时将电子邮件放入目录中,而不是在生产中 - 我没有想要两个不同的web.config文件来维护)。
只是想说这是我的工作。我正在更新一个VS2004项目到VS2010,并且电子邮件发送拒绝工作,直到删除该行。 – spamguy 2012-04-13 15:00:22
您还可以指定它为您的单元测试项目:
public enum TestContextKeys { EmailPickupDirectory, ... };
[TestClass]
public class AssemblyInitializer
{
[AssemblyInitialize]
public static void Init(TestContext testContext)
{
string configPath = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
XDocument xmlConfig = XDocument.Load(configPath);
var emailPickupDirectory = xmlConfig.Element("configuration")
.Element("system.net")
.Element("mailSettings")
.Element("smtp")
.Element("specifiedPickupDirectory")
.Attribute("pickupDirectoryLocation")
.Value;
testContext.Properties[TestContextKeys.EmailPickupDirectory.ToString()] = emailPickupDirectory;
}
而且你的测试代码:
[TestMethod]
public void TestEmailRegistration()
{
MyApp app = new MyApp();
app.RegisterUser("Johny Cash",...);
string emailPickupDirectory = (string)_testContext.Properties[TestContextKeys.EmailPickupDirectory.ToString()];
string[] allEmails = Directory.GetFiles(emailPickupDirectory);
string[] recentEmails = allEmails.Where(e => new FileInfo(e).CreationTime.AddMinutes(1) > DateTime.Now).ToArray();
//check that the registration email was sent
foreach (var email in recentEmails)
{
string content = File.ReadAllText(email);
if (content.Contains("Johny Cash") && content.Contains("successful") && content.Contains("registration"))
{
File.Delete(email);
return;//OK found
}
}
Assert.Fail("Registratoin email has not been sent to Johny Cash");
}
[TestMethod]
public void TestEmailPickupDirectoryConfiguration()
{
string emailPickupDirectory = (string)_testContext.Properties[TestContextKeys.EmailPickupDirectory.ToString()];
MailAddress mailFrom = new MailAddress("[email protected]", "Tester");
MailAddress mailTo = new MailAddress("[email protected]", "Tester2");
string subject = "Test Message TestEmailPickupDirectory";
using (SmtpClient sc = new SmtpClient())
{
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
mail.To.Add(mailTo);
mail.Subject = subject;
mail.From = mailFrom;
mail.IsBodyHtml = true;
mail.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-9");
mail.Body = "<html><body>";
mail.Body += "TestEmailPickupDirectory";
mail.Body += "</body></html>";
sc.Send(mail);
}
string[] allEmails = Directory.GetFiles(emailPickupDirectory);
string[] recentEmails = allEmails.Where(e => new FileInfo(e).CreationTime.AddMinutes(1) > DateTime.Now).ToArray();
foreach (var email in recentEmails)
{
string content = File.ReadAllText(email);
if (content.Contains(mailFrom.Address) && content.Contains(mailTo.Address) && content.Contains(subject))
{
File.Delete(email);
return;//OK found
}
}
Assert.Fail("EmailPickupDirectory configuration may be wrong.");
}
在单元测试项目中创建app.config文件如果不存在,或合并这些线与现有的app.config。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="d:\temp\Emails\" />
</smtp>
</mailSettings>
</system.net>
</configuration>
您能否在PickupDirectoryLocation上说明更多内容?我们必须给PickupDirectoryLocation使用什么值? – ManirajSS 2014-09-26 09:47:33
PickupDirectoryLocation应设置为由IIS SMTP服务(或兼容的第三方服务)用作拾取目录的目录的路径 - 保存到它的所有电子邮件都将被发送。例如,它可能是“C:\ Inetpub \ mailroot \ Pickup”。 – 2014-11-16 19:59:57