首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >验证电子邮件地址

验证电子邮件地址
EN

Stack Overflow用户
提问于 2009-06-16 02:49:42
回答 13查看 88.5K关注 0票数 29

我试图使用以下代码使用c#发送电子邮件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MailMessage mail = new MailMessage();
mail.From = new MailAddress(fromAddress, friendlyName);
mail.To.Add(toAddress);
mail.CC.Add(ccAddress);

//set the content
mail.Subject = emailSubject;
mail.Body = emailHeader + "\n" + emailBody;

//send the message
SmtpClient smtp = new SmtpClient(ServerAddress);
smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
mail.IsBodyHtml = true;
smtp.Send(mail);

现在,我的函数接收到的"toAddress“字符串可能包含一个地址,或者它可能有许多逗号分隔的地址。

现在的问题是,如果多个逗号分隔地址,其中一个或两个可能是错误的电子邮件地址格式。

因此,当我试图使用这段代码发送电子邮件时,我会得到一个例外:

“指定的字符串不是电子邮件地址所需的形式。”

是否有任何方法验证逗号分隔的电子邮件地址?我在某个地方读到,验证电子邮件地址的唯一方法是向它发送一封电子邮件,因为用于验证电子邮件附件的正则表达式可能非常庞大。

而且,我无法控制设计,也无法控制地址字符串是如何到达我的功能的,我无法在UI中添加电子邮件验证,所以我在那里很无助…

我的问题是,电子邮件不会被传递给所有--逗号分隔字符串中的地址--即使只有地址的某些格式错误。

是否有任何方法正确地验证.NET中的电子邮件地址?有没有办法清除坏的电子邮件地址,并把邮件只发送给好的?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-06-16 02:55:02

您只需拆分逗号上的电子邮件字符串,并使用简单(或庞大)的电子邮件regex验证每个电子邮件地址。或者,尝试创建一个MailAddress对象;它也支持对地址的一些基本验证。

票数 24
EN

Stack Overflow用户

发布于 2009-06-16 03:13:17

这是我们在生产中的代码(甚至为您添加了一个逗号)。通常,您不应该使用try/catch进行验证,但是它在这里工作得很好。我相信这比试图重新确认验证器要好得多。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string[] allToAddresses = to.Split(";,".ToCharArray(),
                                 StringSplitOptions.RemoveEmptyEntries)
foreach (string toAddress in allToAddresses)
{
    try
    {
        message.To.Add(toAddress);
    }
    catch (FormatException)
    {
        //do nothing, ill-formed address. 
    }
}
票数 31
EN

Stack Overflow用户

发布于 2009-06-16 03:00:09

目前,我们正在使用以下功能,并且它对我们非常有用:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static bool IsValidEmail(string email)
{
    // source: http://thedailywtf.com/Articles/Validating_Email_Addresses.aspx
    Regex rx = new Regex(
    @"^[-!#$%&'*+/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z{|}~])*@[a-zA-Z](-?[a-zA-Z0-9])*(\.[a-zA-Z](-?[a-zA-Z0-9])*)+$");
    return rx.IsMatch(email);
}

请用这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1000747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文