java mail pom_集成JavaMail
我们在发送Email和接收Email中已经介绍了如何通过JavaMail来收发电子邮件。在Spring中,同样可以集成JavaMail。
因为在服务器端,主要以发送邮件为主,例如在注册成功、登录时、购物付款后通知用户,基本上不会遇到接收用户邮件的情况,所以本节我们只讨论如何在Spring中发送邮件。
在Spring中,发送邮件最终也是需要JavaMail,Spring只对JavaMail做了一点简单的封装,目的是简化代码。为了在Spring中集成JavaMail,我们在pom.xml中添加以下依赖:
org.springframework:spring-context-support:5.2.0.RELEASE
javax.mail:javax.mail-api:1.6.2
com.sun.mail:javax.mail:1.6.2
以及其他Web相关依赖。
我们希望用户在注册成功后能收到注册邮件,为此,我们先定义一个JavaMailSender的Bean:
@Bean
JavaMailSender createJavaMailSender(
// smtp.properties:
@Value("${smtp.host}") String host,
@Value("${smtp.port}") int port,
@Value("${smtp.auth}") String auth,
@Value("${smtp.username}") String username,
@Value("${smtp.password}") String password,
@Value("${smtp.debug:true}") String debug)
{
var mailSender = new JavaMailSenderImpl();
mailSender.setHost(host);
mailSender.setPort(port);
mailSender.setUsername(username);
mailSender.setPassword(password);
Properties props = mailSender.getJavaMailProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", auth);
if (port == 587) {
props.put("mail.smtp.starttls.enable", "true");
}
if (port == 465) {
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
}
props.put("mail.debug", debug);
return mailSender;
}
这个JavaMailSender接口的实现类是JavaMailSenderImpl,初始化时,传入的参数与JavaMail是完全一致的。
另外注意到需要注入的属性是从smtp.properties中读取的,因此,AppConfig导入的就不止一个.properties文件,可以导入多个:
@Configuration
@ComponentScan
@EnableWebMvc
@EnableTransactionManagement
@PropertySource({ "classpath:/jdbc.properties", "classpath:/smtp.properties" })
public class AppConfig {
...
}
下一步是封装一个MailService,并定义sendRegistrationMail()方法:
@Component
public class MailService {
@Value("${smtp.from}")
String from;
@Autowired
JavaMailSender mailSender;
public void sendRegistrationMail(User user) {
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, "utf-8");
helper.setFrom(from);
helper.setTo(user.getEmail());
helper.setSubject("Welcome to Java course!");
String html = String.format("
Hi, %s,
Welcome to Java course!
Sent at %s
", user.getName(), LocalDateTime.now());
helper.setText(html, true);
mailSender.send(mimeMessage);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
观察上述代码,MimeMessage是JavaMail的邮件对象,而MimeMessageHelper是Spring提供的用于简化设置MimeMessage的类,比如我们设置HTML邮件就可以直接调用setText(String text, boolean html)方法,而不必再调用比较繁琐的JavaMail接口方法。
最后一步是调用JavaMailSender.send()方法把邮件发送出去。
在MVC的某个Controller方法中,当用户注册成功后,我们就启动一个新线程来异步发送邮件:
User user = userService.register(email, password, name);
logger.info("user registered: {}", user.getEmail());
// send registration mail:
new Thread(() -> {
mailService.sendRegistrationMail(user);
}).start();
因为发送邮件是一种耗时的任务,从几秒到几分钟不等,因此,异步发送是保证页面能快速显示的必要措施。这里我们直接启动了一个新的线程,但实际上还有更优化的方法,我们在下一节讨论。
练习
小结
Spring可以集成JavaMail,通过简单的封装,能简化邮件发送代码。其核心是定义一个JavaMailSender的Bean,然后调用其send()方法。
java mail pom_集成JavaMail相关推荐
- java mail smtps,使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会
使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会 Java 通常情况下都不会对smtp发邮件加密,但是gmail做了加密. 首先需要引用 Javamail ...
- java mail 抄送多用户,JavaMail 发送邮件,收件人为多人,抄送多人。其中包含收件人邮箱错误时的处理...
1.给客户做一个发邮件的功能.收件人和抄送人可能为单个人,也可能为多个人.但是当收件人或抄送人中某一个邮箱的格式错误时,整个邮件发送就会出错停止发送.但我还需要给那些其余的人发邮件,该怎么办? 2.解 ...
- java mail outlook_无法使用JavaMail读取Outlook邮件,而使用Gmail工作
基本上,我编写了一个可从收件箱中读取电子邮件的应用程序.我一直使用Gmail发送的电子邮件测试应用程序.但是现在,当我试图阅读从Outlook发送的电子邮件时,我没有收到任何内容.无法使用JavaMa ...
- mail java_基于JavaMail的Java邮件发送:简单邮件发送
http://blog.csdn.net/xietansheng/article/details/51673073 http://www.cnblogs.com/codeplus/archive/20 ...
- java velocity 邮件_邮件集成java mail + 读取邮件模板
项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...
- 邮件集成java mail + 读取邮件模板
项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...
- java邮件支持_使用Spring的JAVA Mail支持简化邮件发送功能
闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...
- java mail 学习笔记
JAVA MAIL 学习 笔记 电子邮件协议的简介 SMTP 简单邮件传输 SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议.该协议定义了邮件客户端软件和 ...
- java邮件接收代码,JavaMail入门第四篇 接收邮件(示例代码)
上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...
- Java Mail 邮件发送(一):入门Demo
本文首发于简书,Java Mail 邮件发送(一):Demo 上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以 ...
最新文章
- 【正一专栏】巴萨艰难收获一场平局
- python中使用for循环,while循环,一条命令打印99乘法表
- 133. Clone Graph 克隆图
- java drawimage()方法
- win10关闭“Windows安全中心”功能的两种方法
- java-图像的几何变换
- 在公司具备这三个条件,就准备好跳槽吧
- [PHP]Yii rules常用规则
- 导入图片后截取_如何截取视频片段?这几个方法比专业剪辑软件还好用!
- 2022年6月TIOBE编程语言排名:Python、C、Java
- python信息安全书籍_2018年信息安全从业者书单推荐
- 简述JVM垃圾回收机制
- 下载谷歌瓦片地图并拼接为高清大图
- Windows版bitcoin客户端编译
- 触觉智能分享-RK3568 Android11修改默认输入法
- 黑客入侵微软邮件服务器部署勒索软件、惠普更新打印机漏洞|12月2日全球网络安全热点
- 为什么我们需要关注基于 EIP-3664 标准的可拆分,可组合的NFT?
- Linux Debian 系统的单网卡绑定多个IP地址的操作步骤
- 井号法(#)创建二叉树(利用前序遍历来建树)C++实现
- 现代IT项目中的需求管理如何做?