如果其中一个收件人无效,如何在C#中发送电子邮件?

时间:2012-12-03 16:26:25

标签: c# .net

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

但是,如果其中一位收件人的电子邮件地址无效,则电子邮件甚至不会发送给其电子邮件地址有效的其他收件人,我将收到例外情况:

  

服务器拒绝了一个或多个收件人地址。服务器   回复是: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#做同样的事情吗?

2 个答案:

答案 0 :(得分:3)

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

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

将电子邮件路由到多个主机后,成功/失败不再相互依赖。例如,gmail.com服务器可能不知道/关心yahoo.com服务器拒绝收件人。

如果需要考虑性能,您可以send the messages asynchronously获得更好的吞吐量。请注意,在异步发送时仍可以处理异常。

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

答案 1 :(得分:1)

我真的没有办法实现这一目标。使用SmtpMail.Send()发送电子邮件几乎是一个原子功能,您需要正确的数据才能正常工作。

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