C#相当于java的mail.smtp.sendpartial属性?

时间:2012-12-03 20:43:14

标签: c# .net

我正在寻找C#等效的mail.smtp.sendpartial属性

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#代码,但即使只有一个电子邮件地址无效,也无法发送电子邮件。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

Check that email address is valid for System.Net.Mail.MailAddress

答案 1 :(得分:1)

这里的答案实际上取决于你的意思是无效的。

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

目前在C#中唯一可以确保您要用来发送电子邮件的电子邮件地址是有效格式的方法是尝试通过传递字符串地址来创建MailAddress实例,并捕获{{ 1}},像这样:

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 } 是否确实存在电子邮件收件箱,因为某人在服务器上拥有该地址的帐户,该帐户将能够登录并查看该邮件。

简短的回答是你无法验证,如果确实是它告诉你的话,我会高度质疑java类给你的响应的完整性。如果邮件服务器这样做,那么垃圾邮件发送者就会寻找随机有效的电子邮件地址,这对于服务器来说是微不足道的。

如果你想获得更高级的,你可以验证域名'aaa.com'是否存在,但这就是你可以肯定的。