Salesforce.com如何验证电子邮件字段?

时间:2012-03-24 13:27:31

标签: salesforce email-validation

我正在尝试从另一项允许指定无效电子邮件地址的服务中存储Salesforce.com中的电子邮件地址。如果其中一个错误的无效电子邮件地址通过其Web服务API发送到Salesforce.com,Salesforce.com将阻止使用INVALID_EMAIL_ADDRESS错误代码保存该记录。

我找不到任何关于如何禁用电子邮件字段验证的文档,因此看起来我需要在集成中验证它们并提取失败的那些。 有没有人知道Salesforce.com用来确定电子邮件地址是否有效的验证过程?我现在所拥有的只是一个Regex,但我希望它与Salesforce.com的流程相匹配。

编辑:作为参考,这是我的正则表达式(我正在使用C#/ .NET):

^(\w|[!#$%'*+-/=?^_`\{\}~.&])+@\w+([-.]\w+)*\.\w+([-.]\w+)*([,;]\s*\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*$

6 个答案:

答案 0 :(得分:7)

摘要:我们正在使用以下.NET RegEx:

const string SFEmailRegExPattern = @"^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";

如果你能相信SF's own documentation那么:

  

对于电子邮件地址的本地部分,我们接受以下字符。本地部分是@符号之前的任何内容。

abcdefg.hijklmnopqrstuvwxyz!#$%&'*/=?^_+-`{|}~0123456789
     

注意:支持字符点.;只要它不是本地部分的第一个或最后一个字符

     

对于我们接受的电子邮件地址的域名部分。域名部分是电子邮件地址中@之后的任何内容:

0-9 and A-Z and a-z and dash -

couplepeople已将其编码为Java正则表达式:

String pat = '[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\*\\/\\=\\?\\^\\_\\+\\-\\`\\{\\|\\}\\~\'._%+-]+@[a-zA-Z0-9\\-.-]+\\.[a-zA-Z]+';

虽然对我而言,这似乎无法拒绝以“。”开头的电子邮件。所以并不完美。

答案 1 :(得分:1)

我不知道salesforce.com如何验证电子邮件地址,但由于您使用的是.NET,我建议您考虑使用我们EmailVerify.NET之类的电子邮件验证组件,该组件100%符合当前的IETF标准(RFC 1123,RFC 2821,RFC 2822,RFC 3490,RFC 3696,RFC 4291,RFC 5321,RFC 5322和RFC 5336)并且不受ReDoS的影响:如果需要,它甚至会检查DNS被测电子邮件域的记录,其SMTP可用性,验证相关邮箱,甚至可以判断目标邮件交换器是否是一个包罗万象或者是否是一次性/免费电子邮件地址提供商。

答案 2 :(得分:0)

我不知道salesforce.com使用了什么(我认为没有任何方法可以让你找到),但是来自here\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b是一个通用的,应该适用于大多数情况。

答案 3 :(得分:0)

我之前看过,并且无法确切地找到关于SFDC应用于本机“电子邮件”字段类型的确切规则的明确答案。我建议最快的成功之路是:

  • 在您从外部应用程序进行的初始数据集成中,将您描述的电子邮件字段映射到SFDC中的新(非电子邮件,仅文本255)自定义字段。

  • 如果这是一次性dataload,请运行一个单独的进程,对于已填充此自定义字段的SFDC中的每一行,尝试将此自定义字段的内容复制到本机电子邮件字段。如果任何行因电子邮件验证错误而失败,您只需跳过它。然后,您可以决定如何处理不合规的地址。

  • 如果这是一个持续集成,那么最好通过WS API尝试一次一个地插入新行,如果抛出了电子邮件验证异常,你就会抓住它并且插入没有电子邮件地址的记录,将错误的电子邮件存储在不同的字段中(如称为“不合规的电子邮件地址”的自定义字段),或者完全跳过该行(如果收到错误的电子邮件==错误记录)。

希望有所帮助。

答案 4 :(得分:0)

Apex有基于java的原生Pattern和Matcher类。

您可以使用RegEx expression作为字符串

在Apex代码中验证您的电子邮件地址
String emailPattern = {your regex expression);
Boolean validEmail = pattern.match(emailPattern, emailAddress);

答案 5 :(得分:0)

由于他们自己的要求不一致,因此您绝对不能为salesforce电子邮件创建通用正则表达式。

一个规则即将为将IP地址放在本地部分之后提供可能性。示例-> email@123.123.123.123

第二个是关于不允许顶级域中的数字。 例如:test@test.com1

因此,它们相互排斥。

但是据我了解,与顶级域中的数字相比,本地部分之后的具有IP的电子邮件地址更为重要并且通常被使用。

以下是一些用于Salesforce的电子邮件的有效/无效示例。

有效:

a@ua.fm
email@domain.com
firstname.lastname@domain.com
email@subdomain.domain.com
firstname+lastname@domain.com
email@123.123.123.123
1234567890@domain.com
email@domain-one.com
_______@domain.com
email@domain.name
email@buyacar.co.uk
ail@github.dennis.co.uk
email@news.i.ua
firstname-lastname@domain.com
Alexka1!+1123klsn&*^%$%$#^^^@a3432.4s.c4p.uk
frw...??//||/wt'f`fe@wfwfg-----wfwef.mm
a..@test.jp
abcdefg.hijklmnopqrstuvwxyz!#$%&'*/=?^_+-`{|}~0123456789@acme-inc.com

无效:

aasd@sdfжжж.rf
plainaddress
#@%^%#$@#$@#.com
@domain.com
email.domain.com
email@domain@domain.com
.email@domain.com
あいうえお@domain.com
email@domain.com (Joe Smith)
email@domain
email@domain..com
email@domain.com.e
email@domain.com.33

基于上述结果,最终的正则表达式为:
/^(?!\.)(([^<>()\[\]\\a-zA-Z0-9.,;:\s@"]*(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))[a-zA-Z0-9.!#$%&'‘*+\/=?^_ {|}〜-] + @ [\ w .-?] +。[A-Za-z] *(?