赞
踩
项目上线后定时发送邮件出现问题,后台代码无报错。经检查发现有一个收件人邮箱地址错误导致所有人都收不到邮件,记录如下:
错误邮箱地址如下: 'test@1653.com test@163.com'
邮箱地址没有用, 分隔开导致解析收件人出现问题。需要修改程序对收件人进行过滤,避免再次出现邮件发不出去
常用的正则表达式元字符:
邮箱格式
在验证邮箱格式时,最重要的是了解邮箱的格式规范。一般来说,一个标准的电子邮箱地址由以下四个部分组成:
综合起来,一个典型的电子邮箱地址可以表示为:
username@domain.name.suffix
验证邮箱格式的目标是匹配用户名、域名和后缀这三部分的规范要求。
示例
/^[A-Za-z0-9]+([-._][A-Za-z0-9]+)*$/
解释:该正则表达式中,由A-Za-z0-9
表示可以包含大小写字母和数字,由+
表示可以出现一次或多次,由([-._][A-Za-z0-9]+)*
表示可以包含连字符、点号或下划线,且不能以它们开始或结束,连续不能出现两个或以上。/^([A-Za-z0-9]+(-[A-Za-z0-9]+)*\.)+[A-Za-z]{2,}$/
解释:该正则表达式中表示一个或多个由大小写字母、数字和连字符组成的字段,其中第一个必须为字母或数字,最后一个字段必须为两个或以上字母,且长度在2到63之间。
验证后缀:
/^([A-Za-z]{2,6}|[A-Za-z]{2,4}\.[A-Za-z]{2,3})$/
解释:该正则表达式中,使用管道符号|
表示或的关系,即后缀可以为两到六位字母或两个字母加一个点号加两到三个字母。
综合以上三个正则表达式,可以得出验证完整邮箱地址的表达式:
/^[A-Za-z0-9]+([-._][A-Za-z0-9]+)*@[A-Za-z0-9]+(-[A-Za-z0-9]+)*(\.[A-Za-z]{2,6}|[A-Za-z]{2,4}\.[A-Za-z]{2,3})$/
过滤代码如下:
- // 邮箱正则
- private static final String EMAIL_REGEX = "^[A-Za-z0-9]+([-._][A-Za-z0-9]+)*@[A-Za-z0-9]+(-[A-Za-z0-9]+)*(\\.[A-Za-z]{2,6}|[A-Za-z]{2,4}\\.[A-Za-z]{2,3})$";
-
- /**
- * 收集邮箱地址,过滤问题邮箱和重复邮箱,打印错误邮箱收件人工号
- * @param emailList
- * @return
- */
- public String getCollectEmail(List<Record> emailList) {
- return emailList.stream().filter(emailRecord -> {
- String email = emailRecord.getStr("EMAIL");
- String empno = emailRecord.getStr("EMPNO");
- if (!(isValidEmail(email))) {
- LogKit.warn(empno + "邮箱格式有问题,请排查");
- return false;
- }
- return true;
- }).map(emailRecord -> emailRecord.getStr("EMAIL").toLowerCase())
- .distinct()
- .collect(Collectors.joining(","));
- }
-
- /**
- * 判断邮箱是否有效
- * @param email
- * @return
- */
- public static boolean isValidEmail(String email) {
- if (StrKit.isBlank(email)) {
- return false;
- }
- Pattern pattern = Pattern.compile(EMAIL_REGEX);
- Matcher matcher = pattern.matcher(email);
- return matcher.matches();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。