有时候代码执行完之后,需要邮件进行通知,所以通过工作中的项目和网上的资料,特地去学习了如何使用Java发送邮件。Demo使用的是QQ邮箱进行邮件发送,可以先了解一下基础文档协议RFC882、MIME、SMTP等。
文档协议说明
看了孤傲苍狼的文章,关于邮件协议,他解释的很好,这边进行记录了一下
RFC882文档(发送简单文字邮件)
RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。
邮件头包含的内容有:
- from字段 –用于指明发件人
- to字段 –用于指明收件人
- subject字段 –用于说明邮件主题
- cc字段 – 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁
- bcc字段 – 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁
MIME文档(可以发送HTML邮件)
在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。
MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。通常我们把MIME协议描述的邮件称之为MIME邮件。MIME协议描述的数据称之为MIME消息。
对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。
SMTP协议
要使用QQ邮箱发送邮件,就要遵守SMTP协议。SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
需要在QQ邮箱中打开SMTP服务和生成授权码
Demo的时序图
代码实现
demo使用的是Velocity模板引擎进行html渲染,其它渲染方式类似,最后都是生成context内容。
基础依赖
java mail/spring-context-support/velocity
邮件基础Bean
|
|
模板引擎渲染工具
|
|
发送邮件的服务
我们使用spring进行依赖注入,帮我们托管mailSender
面向接口编程
demo.vm(模板文件)
|
|
发送邮件
最后通过调用MailService进行邮件发送
当然,你可以制作更加好看的html邮件~