【开发心得】Spring Mail发送邮件
常见的Java-Spring 发送邮件的方式
1.官方标准JavaMail
Sun(Oracle)官方标准,功能强大,用起来比较繁琐。
官方资料:http://www.oracle.com/technetwork/java/javamail/index.html
2.第三方实现
2.1Apache Commons-Email
通过封装JavaMail,提供了常见的功能。
官方资料:http://commons.apache.org/proper/commons-email/
2.2Spring Mail
与Spring很好的集成,可以在使用Velocity 模版语言。
官方资料:http://static.springsource.org/spring/docs/3.0.x/reference/mail.html
2.3Jodd Mail
与Apache Commons-Email类似,都是对JavaMail的进一步封装。
官方资料:http://jodd.org/doc/email.html
3.自定义
3.1自己进一步封装
对Apache Commons-Email进一步封装。(可能有必要,也可能没有)
3.2完全重新实现
掌握SMTP等协议,实现协议。(高端用户可能有这个需求)
核心实现代码(stmp,默认端口25):
(1) 构造JavaMailSender
private JavaMailSender buildJavaMailSender(EmailSMTPServerConfig config) {
if (config == null) {
return null;
}
JavaMailSenderImpl impl = new JavaMailSenderImpl();
impl.setHost(config.getHost());
impl.setPort(config.getPort() == null ? 25 : config.getPort());
impl.setUsername(config.getUsername());
impl.setPassword(config.getPassword());
// 兼容qq邮箱 ssl协议
if (StringUtils.endsWith(config.getHost(), "qq.com")) {
Properties p = new Properties();
p.setProperty("mail.smtp.ssl.enable", "true");
impl.setJavaMailProperties(p);
}
return impl;
}
(2) 发送代码
public void send(String target, String subject, String msg) throws Exception {
if (StringUtils.isNotEmpty(msg)) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(this.emailFrom == null ? "admin@xxx.com" : this.emailFrom);
message.setTo(target);
message.setSubject(subject);
message.setText(msg);
javaMailSender.send(message);
}
}
QQ 单独实现:
(1)如果是配置方式,可以在properties字段中直接指定(端口465方式)
spring:
jackson:
time-zone: GMT+8
mail:
username: xxx@qq.com
password: yyyyyyyyy
host: smtp.qq.com
properties:
mail:
stmp:
ssl:
enable: true
(2) 如果是代码配置方式
// 兼容qq邮箱 ssl协议
if (StringUtils.endsWith(config.getHost(), "qq.com")) {
Properties p = new Properties();
p.setProperty("mail.smtp.ssl.enable", "true");
impl.setJavaMailProperties(p);
}
附录:
常见邮箱客户端授权码获取方式:
登录QQ邮箱,设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 等设置
4. 新浪邮箱 首页-客户端POP3/SMTP/IMAP |