一、环境:
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插件-->
二、配置
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"); } }
端口号走的 465 极其重要,因为现在几乎所有的云服务都禁用了 25 号端口
谢谢分享