基于jfinal-mail插件进行一次邮件发送的实践

一、环境:

jfinal 4.9.05

jfinal-mail-plugin 3.0

maven坐标:

<!-- JFianl Email插件-->
<dependency>
    <groupId>cn.fsdev</groupId>
    <artifactId>jfinal-mail-plugin</artifactId>
    <version>3.0</version>
</dependency>
<!-- JFianl Email插件-->

二、配置

  1. jfinal-mail-plugin的配置文件

    参考文件名:mail.properties

    必填项:

        host (邮箱服务器的地址,QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587;163邮箱:SMTP服务器是smtp.163.com,端口是465;Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587;

阿里云 

#aliyun邮箱 POP3      pop3.aliyun.com        995
#           SMTP      smtp.aliyun.com        465
#           MAP       imap.aliyun.com        993

        port端口号

        protocol协议名称,推荐smtp

        username 邮箱地址

        password客户端授权码(需要手动开启,不同的邮箱服务器开启方法不同。QQ邮箱->设置->账户->IMAP/SMTP服务开启。阿里云授权码为账号的登录密码)

    mail.smtp.auth 权限认证

    mail.smtp.timeout 超时时间

    mail.smtp.ssl.enable 是否是SSL加密

#邮箱HOST
host=smtp.qq.com
# 协议
protocol=smtp
# 端口
port=465
# 发送邮箱
username=**********@qq.com(替换成自己的邮箱)
#IMAP/SMAP 授权码:
password=***********(这块替换成实际的授权码)
mail.smtp.auth=true

# 超时时间
mail.smtp.timeout=5000
# 是否是ssl
mail.smtp.ssl.enable=true

2.配置undertow

# mail
undertow.hotSwapClassPrefix=com.jfplugin.mail.

3.配置插件

public void configPlugin(Plugins plugins) {
  //Email
    Prop prop1=PropKit.use("mail.properties");
    plugins.add(new MailPlugin("m1",prop1.getProperties()));
}

以上插件的配置完成

三、使用

1.发送内容固定邮件

普通邮件:MailKit.send(“收件人”,Arrays.asList(“抄送1″,”抄送2”), “邮件标题”, “邮件内容”); 附件邮件:MailKit.send(“收件人”,Arrays.asList(“抄送1″,”抄送2”), “邮件标题”, “邮件内容”,Arrays.asList(new File(“附件1”),new File(“附件2”)));

2、发送模板类邮件

插件除了支持内容固定的邮件外,还支撑模板邮件,模板默认使用为Jfinal的IMainRenderFactory的模板

普通邮件: Map<String,Object> dataMap = new HashMap<String,Object>(); dataMap.put(“var1”, “变量1”); dataMap.put(“var2”, “变量2”); MailKit.send(“收件人”,Arrays.asList(“抄送1″,”抄送2”), “邮件标题”, “模板路径”,dataMap);

附件邮件: MailKit.send(“收件人”,Arrays.asList(“抄送1″,”抄送2”), “邮件标题”, “模板路径”,dataMap,Arrays.asList(new File(“附件1”),new File(“附件2”)));

3、多个邮件源支持

插件不仅仅支持一个邮件发送源,还可以极速的支持多个邮件发送源

(1)启动插件是指定发送源名称:me.add(new MailPlugin(“mail2”,PropKit.use(“mail2.properties”).getProperties())); (2)发送邮件时指定发送源:MailKit.use(“mail2”).send(…);

   四、自己写的控制层(可供参考):

public class SendEmailToolsController extends Controller {

    /**
     * 无附件
     */
    public void sendEmailNoAttachment(){
        MailKit.use("m1").send("xxx@qq.com", Collections.EMPTY_LIST,"重要消息提醒","你中了1百万,激动不激动,假的");
        renderText("999");
    }
    /**
     * 包含附件
     */
    public void sendEmailAttachment(){
        List<UploadFile> files = getFiles();
        List<File> file_list=new ArrayList<>();
        DateTimeFormatter dtm = DateTimeFormatter.ofPattern("yyyyMMddhhmmss");
        String time_format = LocalDateTime.now(ZoneOffset.of("+8")).format(dtm);
        for(UploadFile file:files){
            String originalFileName = file.getOriginalFileName();
            String fileNewName = originalFileName.substring(originalFileName.lastIndexOf("."));
            int random=(int)Math.random() *1000;
            File file_old=file.getFile();
            File file_new=new File(PathKit.getWebRootPath()+"/upload/"+time_format+random+fileNewName);
            file_old.renameTo(file_new);
            file_list.add(file_new);
        }
        MailKit.use("m1").send("xxx@163.com", Arrays.asList("xxx@qq.com"),"请查收","恭喜发财",file_list);
        renderText("555");
    }
}


评论区

JFinal

2020-12-15 15:32

jfinal-mail-plugin 做得很简洁,是 jfinal 俱乐部大神的作品

端口号走的 465 极其重要,因为现在几乎所有的云服务都禁用了 25 号端口

谢谢分享

steven_lhcb_9527

2020-12-15 15:45

发送模板类邮件的模板配置该怎么配呢,模板文件格式是xml的吗?

canca

2020-12-18 00:06

QQ邮箱发的多有限制,还是用阿里云吧!

steven_lhcb_9527

2020-12-18 15:01

阿里云?

steven_lhcb_9527

2021-01-07 16:40

邮件的附件大小都有限制