3

我正在尝试向多个收件人发送电子邮件,并且当所有收件人都有有效的电子邮件地址时它工作正常。

但是,当其中一个收件人的电子邮件地址无效时,即使电子邮件地址有效的其他收件人也不会发送电子邮件,并且我遇到了异常:

服务器拒绝了一个或多个收件人地址。服务器响应为:550 #5.1.0 地址被拒绝。

即使其中一个电子邮件地址无效,有什么方法可以将电子邮件发送给其他有效的收件人?

public static void sendMails(string ptxtSubject, string ptxtBody)
{
    string txtTo = "valid1@aaa.com,valid2@aaa.com,invalid1@aaa.com";
    string txtFrom = "valid@aaa.com";
    string txtSubject = ptxtSubject;
    string txtBody = ptxtBody;

    MailMessage mail = new MailMessage();
    mail.To = txtTo;
    mail.From = txtFrom;
    mail.Subject = txtSubject;
    mail.Body = txtBody;

    try
    {
        SmtpMail.SmtpServer ="smtp.aaa.com";
        SmtpMail.Send(mail);
    }
    catch (Exception ex)
    {
       //log the exception
       throw;  
    }
}

我可以向他们每个人发送单独的邮件,但用户(收件人)将不知道电子邮件分发列表中还有谁。我的要求是每个人都应该能够知道还有谁在接收电子邮件。

Outlook 将电子邮件发送给所有有效用户,并通知我们无效用户。无论如何我们可以使用 C# 做同样的事情吗?

4

2 回答 2

3

除非所有收件人都明确认识彼此(并且他们不介意其他人知道他们正在接收您的电子邮件),否则您无论如何都应该发送单独的电子邮件。

这也可以解决您的问题,即如果一个发送操作失败,它不会中断其他操作。请注意,在您的情况下,初始中继似乎失败,因为地址来自与SMTP服务器相同的主机。

一旦电子邮件被路由到多个主机,成功/失败就不再相互依赖。例如,gmail.com 服务器可能不知道/不在乎 yahoo.com 服务器拒绝了收件人。

如果性能是一个问题,您可以异步发送消息以获得更好的吞吐量。请注意,您仍然可以在异步发送时处理异常。

与往常一样,如果您要发送任何数量的电子邮件,建议使用 3rd 方服务。

于 2012-12-03T16:31:59.720 回答
1

我真的看不出有什么办法可以做到这一点。发送电子邮件SmtpMail.Send()几乎是一个原子功能,您需要正确的数据才能正常工作。

我在这里看到的唯一选择是向每个收件人发送单独的电子邮件。

于 2012-12-03T16:32:35.217 回答