1、EKP群发邮件时,若某个邮箱地址不存在或无法接收邮件时会导致发送失败,只是因为EKP在某项配置上采用的是"全发"或"全不发"的策略。
2、解决方案:修改KmssMailSenderImpl并覆盖原jar包内该类
路径下com.landray.kmss.sys.notify.service.spring 建java类KmssMailSenderImpl
把原jar包内该类代码反编译后复制到新建类,并再init方法中增加以下代码:
javaMailProperties.setProperty("mail.smtp.sendpartial", "true");
修改后的init方法:
private void init(Map<String, String> setting) throws Exception {
if (setting == null) {
setting = new SysNotifyMailSetting().getDataMap();
}
String host = setting.get("kmss.notify.mailHost");
String port = null;
if (StringUtil.isNotNull(host)) {
if (host.contains(":")) {
String[] newhost = host.split(":");
this.setHost(newhost[0]);
this.setPort(Integer.parseInt(newhost[1]));
port = newhost[1];
} else {
this.setHost(host);
}
}
String username = setting.get("kmss.notify.mailUsername");
if (StringUtil.isNotNull(username)) {
this.setUsername(username);
}
String password = setting.get("kmss.notify.mailPassword");
if (StringUtil.isNotNull(password)) {
this.setPassword(password);
}
String defaultEncoding = setting
.get("kmss.notify.mailDefaultEncoding");
if (StringUtil.isNotNull(defaultEncoding)) {
this.setDefaultEncoding(defaultEncoding);
}
String mailSmtpAuth = setting.get("kmss.notify.mailSmtpAuth");
Properties javaMailProperties = new Properties();
if (StringUtil.isNotNull(mailSmtpAuth)) {
javaMailProperties.setProperty("mail.smtp.auth", mailSmtpAuth);
}
String defaultTimeout = setting.get("kmss.notify.mailTimeout");
if (StringUtil.isNotNull(defaultTimeout)) {
javaMailProperties.setProperty("mail.smtp.timeout", defaultTimeout);
} else {
javaMailProperties.setProperty("mail.smtp.timeout", "30000");
}
String agreement = setting.get("kmss.notify.mailHost.agreement");
if (StringUtil.isNotNull(agreement)) {
// 忽略无效邮箱
javaMailProperties.setProperty("mail.smtp.sendpartial", "true");
javaMailProperties.setProperty("mail.smtp.socketFactory.port", port);
}
this.setJavaMailProperties(javaMailProperties);
isInited = true;
}