博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用JavaMail技术发送邮件
阅读量:5974 次
发布时间:2019-06-19

本文共 3612 字,大约阅读时间需要 12 分钟。

hot3.png

1. 下载JavaMail API包 
2. 导入所需的jar包
3. 发送一封简单邮件的基本步骤
3.1 创建Session
3.1.1 创建Session所需的基本配置
Properties prop = new Properties();// 配置邮件的传送协议为smtp。prop.setProperty("mail.transport.protocol", "smtp");// 配置邮件主机,如新浪的SMTP服务器:smtp.sina.comprop.setProperty("mail.host", "smtp.sina.com");// 配置开启邮件传送身份验证prop.setProperty("mail.smtp.auth", "true");
3.1.2 创建Authenticator
Authenticator authenticator = new Authenticator() {    @Override    protected PasswordAuthentication getPasswordAuthentication() {        // 配置好发送人的用户名和密码。        // 如:belinwu@sina.com,则用户名为belinwu。        return new PasswordAuthentication("belinwu", "********");    }};
3.1.3 创建Session对象
Session session = Session.getInstance(prop, authenticator);session.setDebug(true); // 开启输出控制台Debug信息
3.2 创建邮件信息
Message message = new MimeMessage(session);// 设置邮件的主题message.setSubject("使用JavaMail技术发送邮件的主题!");// 设置邮件的发送人message.setFrom(new InternetAddress("belinwu@sina.com"));// 设置邮件的收件人message.setRecipient(RecipientType.TO, new InternetAddress("belinwu@qq.com"));/** RecipientType有如下类型:* RecipientType.TO:收件人* RecipientType.CC:抄送* RecipientType.BCC:秘密抄送*/// 设置邮件的正文内容message.setText("使用JavaMail技术发送邮件的正文内容!");
3.3 发送邮件
Transport.send(message);
4. 发送HTML文件邮件
message.setContent("

使用JavaMail技术发送邮件的正文内容!

", "text/html;charset=utf-8");
5. 设置发件人和收件人的名称
5.1 使用MimeUtility类防止中文乱码
MimeUtility.encodeText("吴下阿吉")
5.2 设置名称
// 设置邮件的发送人message.setFrom(new InternetAddress(MimeUtility.encodeText("吴下阿吉") + "
"));// 设置邮件的收件人message.setRecipient(RecipientType.TO, new InternetAddress(MimeUtility.encodeText("吴下阿林") + "
"));
6. 发送一封复杂邮件(以 带附件和正文内容内联图片为例)
6.1 使用Multipart作为Message的Content,即:
void javax.mail.Part.setContent(Multipart arg0) throws MessagingException
Multipart由若干个BodyPart组成,其中 BodyPart可以是一个Multipart,也可以由若干个BodyPart组成。如下图所示:
6.2 代码实现
Multipart messageMultipart = new MimeMultipart(); Multipart contentMultipart = new MimeMultipart();// 附件一BodyPartMimeBodyPart oneBodyPart = new MimeBodyPart();oneBodyPart.setDataHandler(new DataHandler(new FileDataSource("d:/mis.sql")));oneBodyPart.setFileName(MimeUtility.encodeText("信息管理系统.sql")); // 处理乱码// 附件二BodyPartMimeBodyPart twoBodyPart = new MimeBodyPart();twoBodyPart.setDataHandler(new DataHandler(new FileDataSource("d:/movie.txt")));twoBodyPart.setFileName("movie.txt");// 正文BodyPartMimeBodyPart contentBodyPart = new MimeBodyPart();// 正文中的图片BodyPartMimeBodyPart imageBodyPart = new MimeBodyPart();imageBodyPart.setDataHandler(new DataHandler(new FileDataSource("d:/pic.gif")));// 设置CID,可以在真正的正文内容中引用该图片。imageBodyPart.setContentID("image");// 正文内容BodyPartMimeBodyPart messageBodyPart = new MimeBodyPart();messageBodyPart.setContent("

这是一封带附件的邮件!

", "text/html;charset=utf-8");// 绑定从属关系contentMultipart.addBodyPart(imageBodyPart);contentMultipart.addBodyPart(messageBodyPart);contentBodyPart.setContent(contentMultipart);messageMultipart.addBodyPart(oneBodyPart);messageMultipart.addBodyPart(twoBodyPart);messageMultipart.addBodyPart(contentBodyPart);message.setContent(messageMultipart);
6.3 邮件效果图
7. 测试代码所需要的类
import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;
其中需要JAF中的activation.jar包,在JDK 1.4以前需要手动导入到项目中。

转载于:https://my.oschina.net/belinwu/blog/109603

你可能感兴趣的文章
POJ 2115 C Looooops扩展欧几里得
查看>>
zabbix企业应用之分布式监控proxy
查看>>
lqc_软件仓库部署及应用
查看>>
成长篇第七期:群里小伙伴们的分享(七)
查看>>
Linux写时拷贝技术(copy-on-write)
查看>>
sudo cd和sudo ll命令报错问题
查看>>
进程基本概念理解
查看>>
网络的高可用性
查看>>
[搬运老博客]我的第一个python脚本——hello,python
查看>>
Rest Framework:一,认识RESTful
查看>>
我的友情链接
查看>>
通过TortoiseGIT怎么把本地项目上传到GitHub
查看>>
从USB驱动器运行Windows 10
查看>>
GlusterFS基础知识
查看>>
EF中调整字段的顺序
查看>>
我的友情链接
查看>>
iOS 详细解释@property和@synthesize关键字
查看>>
zabbix value map导致报警失效问题一例
查看>>
文件的权限和访问控制列表(ACL)
查看>>
PXE + Kickstart搭建局域网环境
查看>>