我想我需要一些大师灯!
public void SendEndingMail(string fileName)
{
SmtpClient client;
client = new SmtpClient("smtp.myserver.com", 25);
//client = new SmtpClient();
if (!string.IsNullOrEmpty(""))
{
System.Net.NetworkCredential credential = new NetworkCredential("", "");
client.Credentials = credential;
}
client.UseDefaultCredentials = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
//client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
MailAddress fromAddress = new MailAddress("mailing@mydom.com", "Elec");
MailAddress toAdrress = new MailAddress("mailing@mydom.com");
using (System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(fromAddress, toAdrress))
{
mailMessage.Attachments.Add(new System.Net.Mail.Attachment(fileName));
mailMessage.IsBodyHtml = false;
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
try
{
client.Send(mailMessage);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
这是真的吗: 当我设置 client.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 无论我使用哪种smtp服务器都无关紧要
client = new SmtpClient("smtp.myserver.com", 25);
//client = new SmtpClient();
这两行是相同的,因为它将使用LOCAL IIS?!!!
这是真的,以这种方式构建API是不正常的!?这很令人困惑......
由于 乔纳森
答案 0 :(得分:3)
IIRC,当SmtpClient发送电子邮件时,它会查看.DeliveryMethod值。如果值为Network,则通过网络发送。如果它是PickupDirectoryFromIis,则它忽略任何指定的SMTP服务器(因为它只是写入并将电子邮件发送到文件系统),并将其写入分拣目录。没有网络通信。
答案 1 :(得分:1)
这是Send例程中的一个错误 - 它创建了一个smtp服务器对象,即使未指定一个,当稍后(在Send之后)尝试处理它时,它会抛出异常。
表示邮件成功放入取件目录后会发生这种情况。解决方法:
将localhost指定为SMTP服务器。它不会被使用,但会阻止例外。
围绕Send方法盲目尝试/捕获(BAD解决方案)。