我正在使用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”,出于安全原因,我刚刚删除了正确的地址。
答案 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);
}
}