更改了MailMessage属性,现在它已挂在客户端上。发送

时间:2009-12-15 16:04:22

标签: c# winforms mailmessage

我正在使用System.Net.Mail.MailMessage从我的C#Windows应用程序发送电子邮件。

我最初有这个:

MailMessage mail = new MailMessage("from@address.com", "to@address.com");

等工作正常 - 但后来我需要添加mulitple To地址,所以我把它改成了这个:

MailMessage mail = new MailMessage();

mail.From = new MailAddress("from@address.com");
foreach (string to in to_add)
{
    if (to.Trim() != "")
    {
        mail.To.Add(to.Trim());
    }
}

mail.Body = message;
mail.Subject = "Subject Text";

SmtpClient client = new SmtpClient("0.0.0.0");
client.UseDefaultCredentials = true;

client.Send(mail);

这段代码可以循环几次,字符串数组中最多会有3个To地址 - 第一次运行时,它很好 - 但是第二次循环,它会挂起

client.Send(mail);

我在这里遗漏了什么吗?这是我第一次使用MailMessage,所以很可能我错过了一些重要的东西。

干杯

莱迪

P.S。我没有使用IP地址“0.0.0.0”,出于安全原因,我刚刚删除了正确的地址。

3 个答案:

答案 0 :(得分:1)

你必须有一个To地址。

您发布的代码可能最终在MailMessage中没有To地址。

另外,SMTP服务器“0.0.0.0”将不存在。这不是服务器的有效IP地址 - 它保留为“未知”。

答案 1 :(得分:0)

假设to_add是一个地址数组,您不需要循环添加它们。这应该有效:

mail.To.Add( string.Join( ",", to_add ) );

由于您显然没有例外,这只会缩短您的代码。

默认timeout为100秒。你在等待足够长的时间吗?

另一种选择是使用SendAsync,因此不会阻止。

如果您尚未阅读文档,请参阅SmtpClient.Send on MSDN

的链接

答案 2 :(得分:0)

MailMessage类实现了IDiposable,所以也许是因为你没有处理它?<​​/ p>

此外,在.NET 4.0之前,System.Net.Mail.SmtpClient不是一次性的,但在4.0中它实现了IDisposable,因此您希望将其包装在using语句中同样。代码看起来像:

using (MailMessage mail = new MailMessage())
{
    mail.From = new MailAddress("from@address.com");
    mail.To.Add(string.Join(",", to_add ));
    mail.Body = message;
    mail.Subject = "Subject Text";

    using (SmtpClient client = new SmtpClient("0.0.0.0"))
    {
        client.UseDefaultCredentials = true;
        client.Send(mail);
    }
}