背景html
最近项目中涉及到发送邮件功能,也参照了不少学习资料,现将Demo例子分享一下,看成记录,也使更多人能更快使用.java
本篇不涉及原理内容,若是有须要,后续补充讨论.服务器
所需jar包session
mail-1.4.jar学习
学习内容测试
发送邮件(带附件)spa
进入正题.net
实现Java发送邮件的过程大致有如下几步:debug
1. 准备一个properties文件,该文件用于存放SMTP服务器地址等参数。code
2. 利用properties建立一个Session对象
3. 利用Session建立Message对象,而后设置邮件主题,收件人及正文等信息
4. 利用Transport对象发送邮件
SHOW YOU MY CODE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
public static void main(String[] args) throws Exception{
// 邮件主题
String subject = "邮件Demo";
// 文件存放路径
String filePath ="e:\\test.txt";
//1. 用于存放 SMTP 服务器地址等参数
Properties properties = new Properties();
// 主机地址
properties.setProperty("mail.smtp.host", "主机地址");
// 邮件协议
properties.setProperty("mail.transport.protocol", "smtp");
// 认证
properties.setProperty("mail.smtp.auth", "true");
// 端口
properties.setProperty("mail.smtp.port", "25");
// 使用JavaMail发送邮件的5个步骤
// 2. 建立session
Session session = Session.getDefaultInstance(properties, new MyAuthenticator("发件人帐号", "发件人密码"));
// 开启Session的debug模式,这样就能够查看到程序发送Email的运行状态
session.setDebug(true);
// 3. 建立邮件
// 建立邮件对象
MimeMessage message = new MimeMessage(session);
// 邮件的标题
message.setSubject(subject);
// 邮件发送日期
message.setSentDate(new Date());
// 指明邮件的发件人
message.setFrom(new InternetAddress("指明邮件发件人邮箱"));
// 指明邮件的收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件人邮箱", "别名"));
// 指明邮件的抄送人
message.setRecipient(Message.RecipientType.CC, new InternetAddress("收件人邮箱", "别名"));
// 向multipart对象中添加邮件的各个部份内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 添加邮件正文
BodyPart contentBodyPart = new MimeBodyPart();
// 邮件内容
String result = "Hello World!";
contentBodyPart.setContent(result, "text/html;charset=UTF-8");
multipart.addBodyPart(contentBodyPart);
// 添加附件
if (filePath != null && !"".equals(filePath)) {
BodyPart attachmentBodyPart = new MimeBodyPart();
// 根据附件路径获取文件,
FileDataSource dataSource = new FileDataSource(filePath);
attachmentBodyPart.setDataHandler(new DataHandler(dataSource));
//MimeUtility.encodeWord能够避免文件名乱码
attachmentBodyPart.setFileName(MimeUtility.encodeWord(dataSource.getFile().getName()));
multipart.addBodyPart(attachmentBodyPart);
}
// 邮件的文本内容
message.setContent(multipart);
// 4. 发送邮件,Transport每次发送成功程序帮忙关闭
Transport.send(message, message.getAllRecipients());
}
|
最后查看效果图:
示例中,须要在E盘下建立一个test.txt文本,测试的同窗请将邮箱地址配置成本身的邮箱,
后续补充内容
1.采用Freemarker 将邮件正文模板化
2.支持批量发送