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

Salesforce.com如何验证电子邮件字段?,salesforce,email-validation,Salesforce,Email Validation,我正在尝试在Salesforce.com中存储来自另一个允许指定无效电子邮件地址的服务的电子邮件地址。如果其中一个错误的无效电子邮件地址通过其Web服务API发送到Salesforce.com,Salesforce.com将阻止记录保存并显示错误代码 我找不到任何关于如何禁用电子邮件字段验证的文档,所以看起来我需要在我的集成中对它们进行验证,并取出那些失败的有人知道Salesforce.com用于确定电子邮件地址是否有效的验证过程吗?我现在只有一个正则表达式,但我希望它与Salesforce.c

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

我找不到任何关于如何禁用电子邮件字段验证的文档,所以看起来我需要在我的集成中对它们进行验证,并取出那些失败的有人知道Salesforce.com用于确定电子邮件地址是否有效的验证过程吗?我现在只有一个正则表达式,但我希望它与Salesforce.com的过程相匹配

编辑:以下是我的正则表达式(我使用的是C#/.NET)供参考:


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

我不知道salesforce.com是如何验证电子邮件地址的,但是既然你正在使用.NET,我建议你考虑一个像我们这样的电子邮件验证组件,它符合当前IETF标准(RFC 1123、RFC 2821、RFC 2822、RFC 3490、RFC 3696、RFC 4291、RFC 5321、RFC 5322和RFC 5336)的100%,并且不受影响:如果需要的话,它甚至检查被测试的电子邮件域的DNS记录,它的SMTP可用性,验证相关邮箱,甚至可以判断目标邮件交换器是一个全面的还是一个一次性/免费电子邮件地址提供程序。

我以前查看过,无法找到确切的答案,即SFDC将哪些规则应用于本机“电子邮件”字段类型。我建议的最快成功之路是:

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

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

  • 如果这是一个正在进行的集成,则最好尝试通过WS-API一次插入新行,如果引发电子邮件验证异常,则捕获该异常,然后插入没有电子邮件地址的记录,将坏电子邮件存储在其他字段(如称为“不符合要求的电子邮件地址”的自定义字段)中,或者完全跳过该行(如果坏电子邮件==坏记录)


希望有帮助。

Apex有基于java的本机模式和Matcher类

您可以在Apex代码中验证电子邮件地址,使用
RegEx表达式作为字符串

String emailPattern = {your regex expression);
Boolean validEmail = pattern.match(emailPattern, emailAddress);

小结:我们正在使用以下.NET正则表达式:

const string SFEmailRegExPattern = @"^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";
如果你能相信的话:

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

abcdefg.hijklmnopqrstuvwxyz!#$%&'*/=?^_+-`{|}~0123456789
注意:支持字符点
;前提是它不是本地部分的第一个或最后一个字符

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

0-9 and A-Z and a-z and dash -
许多人将其编码为Java正则表达式:

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

虽然在我看来,这似乎无法拒绝以“.”开头的电子邮件,但这并不完美。

由于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]*(?是的,正如我在问题中所说的,我有一个正则表达式。我确信它将捕获99.9%的案例。我正在尝试找出任何我能找到的关于潜在异常值的信息。也许在答案中包括你的正则表达式,以便人们可以仔细查看。不幸的是,这个正则表达式适用于某些案例,而不是大多数。一些示例:两个..点..是。。forbidden@example.com, me@is..thisadomain.com,hello@my.museum,me@-.99等等。只要问一下,我会继续列举。:)您的正则表达式存在一些问题,因为大多数表达式都是针对电子邮件验证的;一些示例:me@not.a.domain.x,双..点..是。。forbidden@example.com,这是“有效的”。address@example.com-请参阅我的答案,了解基于.NET的备选方案。:)与其尝试以同样的方式验证它们,为什么你不能等到从服务器获取错误后再处理它。这是另一种处理方法,@superfell,但从性能角度来看,这不太可取。“我们正在使用…”我不得不问。你在Salesforce.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