使用System.Net.Mail保存并发送邮件

时间:2012-08-28 07:54:30

标签: c# .net email smtp

我正在尝试使用C#代码发送和保存发送电子邮件。但我不能完成这件事。我可以保存邮件,也可以发送邮件。但我不能完成这两件事。

这就是我所拥有的:

public ActionResult Index()
{
    MailMessage message = new MailMessage();

    message.From = new MailAddress("test@mail.com");
    message.To.Add(new MailAddress("mymail@gmail.com"));
    message.Subject = "Test Subject";
    message.Body = "This is a test message";
    message.IsBodyHtml = true;

    // Setup SMTP settings
    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
    smtp.EnableSsl = true;
    NetworkCredential basicCredential = new NetworkCredential("mymail@gmail.com", "******");

    smtp.UseDefaultCredentials = false;
    smtp.Credentials = basicCredential;
    smtp.Send(message);

    // save
    smtp.EnableSsl = false;
    smtp.PickupDirectoryLocation = @"C:\Temp";
    smtp.Send(message); 

    return View();
}

首先我尝试发送电子邮件。这样可行。然后我试图将电子邮件保存到我的硬盘。但它永远不会得救。当我不发送电子邮件并尝试立即将其保存到我的硬盘时,它确实有效。但我需要做到这两点。

任何人都知道如何完成这项工作?我只需要记录发送消息。

2 个答案:

答案 0 :(得分:3)

拾取目录中的邮件消息由本地SMTP服务器(如果存在)自动发送,例如IIS。 (SmtpClient.PickupDirectoryLocation

如果要保存到文件系统,则需要将DeliveryMethod设置为SmtpDeliveryMethod.SpecifiedPickupDirectory

client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
client.PickupDirectoryLocation = @"C:\Temp"; 
client.Send(message); 

请参阅How to save MailMessage object to disk as *.eml or *.msg file

答案 1 :(得分:1)

您必须将属性DeliveryMethod更改为SmtpDeliveryMethod.SpecifiedPickupDirectorynot才能发送电子邮件。

仅更改PickupDirectoryLocation将无效,因为DeliveryMethod设置为Network时(默认值为默认值)时未使用该属性。

请参阅MSDN