java velocity 邮件_邮件集成java mail + 读取邮件模板

项目做异地登录提醒功能,通过java mail发送邮件。读取邮件模板sendMail.vm文件。

1.邮件发送

import java.io.StringWriter;

import java.util.Properties;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMessage.RecipientType;

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.app.VelocityEngine;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.scheduling.annotation.Async;

public class SendMailSenderServiceImpl implements IMailSenderService {

private static final Logger LOG = LoggerFactory.getLogger(SendMailSenderServiceImpl.class);

private String mailTitle;

private String mailContent;

private String smptHost;

private String mailServicePwd;

private String mailServiceUser;

private String sendMail;

private String transProtocol;

private String port;

private String auth;

@Async

public void sendMail(String address, String username, String date, String place) {

if(address.isEmpty()) {

LOG.debug("{} not bind email.",username);

return;

}

Properties props = new Properties();

props.setProperty("mail.smtp.host", smptHost);

props.setProperty("mail.transport.protocol", transProtocol);

props.setProperty("mail.smtp.auth", auth);

props.setProperty("mail.smtp.port", port);

Session session = Session.getInstance(props);

Message message = new MimeMessage(session);

try {

message.setFrom(new InternetAddress(sendMail));

message.setRecipient(RecipientType.TO, new InternetAddress(address));

message.setSubject(mailTitle);

message.setContent(getMailContent(mailContent, username, date, place), "text/html;charset=utf-8");

Transport transport = session.getTransport();

transport.connect(smptHost, mailServiceUser, mailServicePwd);

transport.sendMessage(message, message.getAllRecipients());

} catch (Exception e) {

LOG.error("Send mail failed.{}", e);

}

}

使用@Async做异步的调用,避免调用发送邮件的功能时阻塞服务的运行。

mail.smtp.host授权的邮件平台:smtp.163.com

mail.transport.protocol 邮件传输协议:smtp

mail.smtp.auth 当前值默认为false,为false时可以不使用发件邮箱和密码,设置为null。设置为true则必须校验用户名和密码。

mail.smtp.port 邮件服务端口

mailtitle和mailcontent模板通过xml注入到bean中,记得写set方法,直接使用的properties中的内容。

这里因为引用的sendMail.vm文件的模板内容,所以需要去将模板内容读取出来。

模板内容很简单,需要使用html语法来操作换行和样式:

尊敬的用户:

${name},您好!

您的用户帐号${name}于${date},在${place}进行登录,存在异地登录行为。请确保是本人操作。

系统邮件自动发送,请勿回复!

读取模板内容通过调用方法:

public String getMailContent(String mailContent, String name, String date, String place) {

StringWriter stringWriter = new StringWriter(); // velocity引擎

VelocityEngine velocityEngine = new VelocityEngine(); // 设置文件路径属性

Properties properties = new Properties();

String dir = SendMailSenderServiceImpl.class.getResource("/").getPath();

properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, dir); // 引擎初始化属性配置

try {

velocityEngine.init(properties); // 加载指定模版

Template template = velocityEngine.getTemplate(mailContent, "utf-8"); // 填充模板内容

VelocityContext velocityContext = new VelocityContext();

velocityContext.put("name", name);

velocityContext.put("date", date);

velocityContext.put("place", place);

template.merge(velocityContext, stringWriter);

return stringWriter.toString();

} catch (Exception e) {

LOG.error("Get Mail Content failed.{}", e);

return "fail";

}

}

这里需要注意的就是文件路径。代码中的mailContent就是模板文件名sendMail.vm。再就是模板存放的位置,我的存放在classes下面。如果读取不到,就要debug看一下是不是模板放错位置了。

这只是简单的发送简单的格式的邮件的简单代码实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java分隔符算法_《Java数据结构和算法》栈 分隔符分配

分隔符包括“{“、"["、”(”、“] “、“)“、“}”,每个左分隔符需要右分隔符匹配。同时,在字符串中后出现左分隔符应该比早出现的先匹配。程序从字符串中不断读取字符,每次读取一个字符。若发现是左分隔符…

Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解

这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Iterator接口概述在程序开发中,经常需要遍历集合中的所有元素。针对这种需求&#x…

mysql1846错误_远程连接MySQL报错ERROR 2003解决办法

转自https://blog.csdn.net/hjwang1/article/details/51669223问题代码代码ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.0.19 (111)ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.0.19 (111) 这个 原因就是Mysql数据库的默认配置文件my.cnf(…

java webview 对象_Android – 将JSON对象从webview javascript传递给java

我在java端有一个带有webview和javascript接口的Activity.我想用Java编写一个可以接受来自webview的json参数的方法.JavascriptInterfacepublic String test(Object data) {Log.d("TEST", "data " data);}在我的webview javascript上我打电话&#xff1a…

php商城的购物车功能,php实现购物车功能(以大苹果购物网为例)

首先是几个简单的登录页面登录用户名:密 码:登录页面写好之后,需要进入处理页面,从数据库中调出用户名和密码:session_start(); //开启session 必须要写到第一行header("Content-type:text/html;charsetutf-8&quo…

php的功能和特点,php的特点有哪些

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快:PHP是一种强大的CGI脚本语言,语法混合了C、Java、Perl和PHP式的新语法,执行网页比CGI、Perl和ASP更快,这是它的第一个突出的特点。 (推荐学习:PHP视频教程…

php写入文本乱码,如何解决PHP用fwrite写入文件中文乱码的问题

如何解决PHP用fwrite写入文件中文乱码的问题发布时间:2020-07-15 13:52:07来源:亿速云阅读:220作者:Leah这期内容当中小编将会给大家带来有关如何解决PHP用fwrite写入文件中文乱码的问题,文章内容丰富且以专业的角度为…

php判断有没有登录,请问thinkphp 怎么在每个方法里面判断是否登录?

[tp版本3.2.3]我在Controller里面写了一个公共类CommonController.class.php,写了一个构造方法来判断是否登录,没登录就重定向到登陆页:namespace Admin\Controller;use Think\Controller;class CommonController extends Controller{public …

php小程序码生成并保存,小程序中如何生成小程序码

导语:小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用&…

php写不了php,php写入内存不足怎么办

php写入内存不足的解决办法:1、修改【php.ini】;2、在程序里面添加相关语句,代码为【ini_set(memory_limit, 12M)】;3、在根目录建立【.htaccess】文件。本教程操作环境:windows7系统、PHP5.6版,DELL G3电脑…

server.mappath php,Server.MapPath( ) 方法的主要功能是获取文件的绝对路径。

9、“别有忧愁暗恨生”中的“忧”应写作“幽”。( )尺寸标注的组成中包含单位,尺寸线,尺寸文字,尺寸箭头目前常见的光纤通常为单模光纤,因为直径细,通信容量大。“给予,提供”的日语假名是( )。1010.( )在FX系列PLC功能指令中有符号P表示脉冲执行。20世纪70年代,设计出了()系统…

java 终态类,javaoo,继承,抽象类,终态类,访问修饰符!

java的继承!Java的继承使用extends关键字!为什么要使用继承呢?我们先来举例说明一下!比如说!烟是类!而叶子烟,和纸烟,烟这个类包含了,叶子烟和纸烟这两个类,如…

php cdr,win10彻底禁止cdr联网

1、打开Win10电脑,然后按winPauseBreak,来到“系统”属性窗口,点击控制面板,如图所示:2、打开来到控制面板页面,鼠标单击“系统和安全”,如图:3、打开在“系统和安全”对话框中&…

php授权验证系统 c,OAuth 2.0 授权码认证

参考文章组成成分用户应用1应用2流程用户在应用1浏览、使用的过程中,涉及到要使用应用2功能的时候,就产生了 oauth 认证!A. 登录授权应用1携带如下查询字符串:response_typeclient_idredirect_uriscopestate跳转到应用2的登录授权…

微信 语音转文字 java,在微信——怎么将语音转化为文字,你需要学习了

有时候和好友在聊天,这时好友在微信上发来语音信息,可是你这个时候不方便听语音,那怎么办呢?这个是我们就可以运用微信的语音转文字的功能,那么如何使用这个功能呢?跟着小编看看吧!操作方法01小…

java 上传 进度,关于 javaweb的文件上传实时显示进度

方法:使用单例保存实时信息。具体的实现方法就是,当用户点击了处理按钮时,在后台开启一个线程进行处理,并且每进行到一步,就向单例中写入当前状态信息。然后编写一个servlet,用于返回单例中的信息&#xff…

java 解压到内存,Java GZip 基于内存实现压缩和解压的方法

欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!GZip是常用的无损压缩算法实现,在Linux中较为常见,像我们在Linux安装软件时,基本都是.tar.gz格式。.tar.gz格式文件需要先对…

php开发添加表情功能,WordPress网站评论区如何实现添加表情包功能?

做网站过程中,可以给自己的网站添加评论框,供用户评论。默认情况下,Wordpress网站评论框是没有添加表情功能的,那么WordPress网站评论区如何实现添加表情包功能?今天我们介绍一下如何给自己的Wordpress网站评论框添加表…

php htmlspecialchars 不管用,php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总_php技巧...

从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到。可能老外认为网页普遍应该是…

matlab 微秒 符号,matlab处理csi

使用python调用matlab API接口进行数据分析找到matlab安装目录下自带的setup.py的路径我的路径如下D:\MATLAB\R2018a\extern\engines\python打开cmd进入到刚才找到的路径管理员权限执行!!! pyhton setup.py install具体代码1.将csiTool中的ma…