1

我正在寻找相当于 mail.smtp.sendpartial 属性的 C#

http://javamail.kenai.com/nonav/javadocs/com/sun/mail/smtp/package-summary.html

如果设置为 true,并且消息具有一些有效地址和一些无效地址,则仍然发送消息,并使用 SendFailedException 报告部分失败。如果设置为 false(默认值),则如果存在无效(服务器上不存在邮箱)收件人地址,则不会将邮件发送给任何收件人。

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;  
    }
}

这是我正在使用的 C# 代码,但即使只有一个电子邮件地址无效,它也无法发送电子邮件。

谷歌没有帮助,任何指针表示赞赏。

4

2 回答 2

2

由于 .NET 不提供 MailAddress.TryParse 并且使用不正确的邮件格式创建 MailAddress 类的新实例引发异常,我建议您使用:

http://cobisi.com/email-validation/.net-component

另一个更丑陋的选择是尝试捕获无效邮件地址的创建/分配。我们在企业邮件程序集中采用这种方式,因为我们不想使用第三方程序集,而且它工作正常。

可以提供帮助的类似问题:

检查电子邮件地址是否对 System.Net.Mail.MailAddress 有效

于 2012-12-03T20:47:31.923 回答
1

这里的答案实际上取决于您所说的无效。

从上面的示例中,invalid1@aaa.com实际上是一个有效的电子邮件地址。

目前在 C# 中确保您要用于发送电子邮件的电子邮件地址格式有效的唯一方法是尝试通过将字符串地址传递给 MailAddress 实例并捕获FormatException,如下所示:

string email = "invalid1@aaa.com";
System.Net.Mail.MailAddress address = null;
try
{
    address = new MailAddress(email);
}
catch (FormatException fex)
{
    // do something about it here
}

我怀疑您想知道的是电子邮件收件箱是否确实存在invalid1@aaa.com,例如某人在服务器上拥有该地址的帐户,该帐户将能够登录并查看该消息。

简短的回答是您无法验证这一点,如果这确实是它告诉您的内容,我会高度质疑 java 类给您的响应的完整性。如果邮件服务器这样做,对于垃圾邮件发送者来说,攻击服务器以寻找随机、有效的电子邮件地址就太简单了。

如果您想变得更漂亮,您可以验证域“aaa.com”是否存在,但这是您可以确定的范围。

于 2012-12-03T22:01:41.780 回答