繁体   English   中英

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

[英]how to send email in C# even when one of the recipient is invalid?

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM