1

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

我最初有这个:

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

等工作正常 - 但后来我需要添加多个地址,所以我将其更改为:

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,所以我很可能遗漏了一些重要的东西。

干杯

雷迪

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

4

3 回答 3

1

您必须有一个收件人地址。

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

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

于 2009-12-15T16:06:32.823 回答
0

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

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

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

默认超时为 100 秒。你等得够久吗?

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

如果您尚未阅读文档,这里是MSDN 上 SmtpClient.Send的链接。

于 2009-12-15T16:38:19.123 回答
0

该类MailMessageimplements IDiposable,所以也许是因为您没有处理它?

此外,在 .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);
    }
}
于 2012-02-03T17:19:01.353 回答