【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

接口作用

自定义一些邮件服务器配置。由于内置的邮件服务器不能满足所有的需求,所以需要给用户自己扩展邮件服务器配置。

接口内容

EmailProcessor
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);
}

默认实现

DefaultEmailProcessor
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>
  • No labels