接口作用
自定义一些邮件服务器配置。由于内置的邮件服务器不能满足所有的需求,所以需要给用户自己扩展邮件服务器配置。
接口内容
package com.fr.stable.fun;
import java.util.Map;
/**
* @author : richie
* @since : 8.0
* 邮件配置属性接口,开放给第三方可以做配置
*/
public interface EmailProcessor extends Level {
String XML_TAG = "EmailProcessor";
int CURRENT_LEVEL = 1;
/**
* 覆盖或者重新设置新的配置属性
*
* @param mailHost 邮件服务器主机
* @param encryption 加密方法
* @param port 端口
* @param fromEmailAddress 邮件发送地址
* @param password 邮件发送者密码
* @return 属性集合
*/
Map<String, Object> loadMailProperties(String mailHost, String encryption, String port, String fromEmailAddress, String password);
/**
* 自定义邮件的主体, 附件文件名, 正文的编码格式. 默认报表用的是javax.mail根据系统字符集自动编码,
* 若不能满足需求, 则可通过插件自定义UTF-8/GBK等, 并指定编码方式可以为Base64/QP等
*
* @param text 需要编码的文本
* @return 编码后的文本
*/
String encodeEmailText(String text);
}
默认实现
public class DefaultEmailProcessor extends AbstractEmailProcessor {
private static DefaultEmailProcessor instance = null;
public synchronized static DefaultEmailProcessor getInstance() {
if (instance == null) {
instance = new DefaultEmailProcessor();
}
return instance;
}
/**
* 覆盖或者重新设置新的配置属性
*
* @param mailHost 邮件服务器主机
* @param encryption 加密方法
* @param port 端口
* @param fromEmailAddress 邮件发送地址
* @param password 邮件发送者密码
* @return 属性集合
*/
public Map<String, Object> loadMailProperties(String mailHost, String encryption, String port, String fromEmailAddress, String password) {
Map<String, Object> map = new HashMap<String, Object>();
/**
* 在这mail.smtp.host 是邮件服务器的地址,比喻smtp.163.com 是163的接收邮件的服务器一般
* 用smtp.163.com 就可以了但是,在我的AIX操作系统中不能解析这个地址,所以用220.181.12.16,
* 你也可以通过在dos底下用ping smtp.163.com 来得到一个IP地址
*/
map.put("mail.smtp.host", mailHost);
// 设置发送邮件的加密方式
if ("TLS".equalsIgnoreCase(encryption)) {
map.put("mail.smtp.starttls.enable", "true");
} else if ("SSL".equalsIgnoreCase(encryption)) {
map.put("mail.smtp.socketFactory.port", port);
map.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
map.put("mail.smtp.port", port);
}
// mail.user 为用户邮箱登陆名;
map.put("mail.user", fromEmailAddress);
// mail.password 邮箱登陆密码;
map.put("mail.password", password);
map.put("mail.smtp.port", port);
map.put("mail.transport.protocol", "smtp");
map.put("mail.smtp.auth", "true");
/**
* javamail在提取本地 hostname的时候会获取ip, 然后以ip发送邮件.
* centos5.1下无法解析本机 hostname为ip, postfix收到此类邮件将拒绝投递,
* 而产生 501 错误. 要么这边处理下, 要么手动改服务器host文件
*/
map.put("mail.smtp.localhost", "127.0.0.1");
return map;
}
}
注册方式
<extra-core>
<EmailProcessor class="com.fr.plugin.xxx.youclassname"/>
</extra-core>