2009-12-15 30 views
1

我使用System.Net.Mail.MailMessage从我的C#Windows应用程序发送电子邮件。已更改MailMessage属性,现在挂在客户端上。发送

我本来这样的:

MailMessage mail = new MailMessage("[email protected]", "[email protected]"); 

等,这工作得很好 - 但是我需要多张添加到地址,所以我改成了这样:

MailMessage mail = new MailMessage(); 

mail.From = new MailAddress("[email protected]"); 
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,所以很可能我错过了一些重要的东西。

干杯

莱迪

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

+0

我刚刚提出了一堆选项。哪一个帮助了? –

回答

0

假设to_add是一个地址数组,你不需要通过循环来添加它们。这应该工作:

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

因为你显然没有例外,这只会缩短你的代码。

默认timeout是100秒。你等了很久吗?

另一种选择是使用SendAsync所以它不会阻止。

如果您还没有阅读文档,请点击这里链接到SmtpClient.Send on MSDN

1

你必须有一个地址。

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

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

+0

嗨,谢谢你的回复。我会加入一些检查,但总是应该至少有一个地址(并且它挂起的地方,肯定有一个To地址)。另外我应该说,这不是我使用的IP地址,而是我在互联网论坛上发布的IP地址;) – leddy

0

MailMessage类实现IDiposable,所以也许是因为你没有处理它?

而且,之前.NET 4.0中,System.Net.Mail.SmtpClient不是一次性的,但是在4.0它实现IDisposable,所以你会希望它包装在一个using声明为好。该代码将如下所示:

using (MailMessage mail = new MailMessage()) 
{ 
    mail.From = new MailAddress("fro[email protected]"); 
    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); 
    } 
} 
相关问题