我正在尝试向多个收件人发送电子邮件,并且当所有收件人都有有效的电子邮件地址时,它可以正常工作。
但是,如果其中一位收件人的电子邮件地址无效,则电子邮件甚至不会发送给其电子邮件地址有效的其他收件人,我将收到例外情况:
服务器拒绝了一个或多个收件人地址。服务器 回复是: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#做同样的事情吗?
答案 0 :(得分:3)
除非所有收件人确实彼此认识(并且他们不介意其他人知道他们正在接收您的电子邮件),否则您应该发送单独的电子邮件。
这也会解决您的问题,即如果一个发送操作失败,它将不会破坏其他操作。请注意,在您的情况下,初始中继似乎失败,因为地址来自与SMTP服务器相同的主机。
将电子邮件路由到多个主机后,成功/失败不再相互依赖。例如,gmail.com服务器可能不知道/关心yahoo.com服务器拒绝收件人。
如果需要考虑性能,您可以send the messages asynchronously获得更好的吞吐量。请注意,在异步发送时仍可以处理异常。
与往常一样,如果您要发送任意数量的电子邮件,建议您使用第三方服务。
答案 1 :(得分:1)
我真的没有办法实现这一目标。使用SmtpMail.Send()
发送电子邮件几乎是一个原子功能,您需要正确的数据才能正常工作。
我在这里看到的唯一选择是向每个收件人发送单独的电子邮件。