一、准备工作
smtp:用户发送邮件到服务器
pop3:用户从邮箱接收邮件
流程图
1.搭建环境,导入jar包或者maven依赖
<!--mail-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
2.从qq邮箱获取对应权限
开启POP3/SMTP服务 获取授权码
二、简易邮件的发送(没有有附件和图片)
以QQ邮箱为例
1、设置属性
Properties prop = new Properties();
prop.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器
prop.setProperty("mail.transport.protocol","smtp");//设置邮件发送协议
prop.setProperty("mail.smtp.auth","true");//需要验证用户名密码
关于QQ邮箱,还需设置SSL加密(其他邮箱不需要)
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","false");
prop.put("mail.smtp.ssl.socketFactory",sf);
2、创建定义整个应用程序所需的环境信息的Session对象
//QQ才需要
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//发件人邮件用户名,授权码
return new PasswordAuthentication("...@qq.com", "授权码");
}
});
//开启Session的Debug模式,可以看到程序发送邮件的运行状态(可开可不开)
session.setDebug(true);
3、通过session得到transport对象
Transport ts = session.getTransport();
4、使用邮箱的用户名和授权码连上邮箱服务器
ts.connect("smtp.qq.com","...@qq.com","授权码");
5、创建邮箱
MimeMessage message = new MimeMessage(session);
//指明邮件的发起人
message.setFrom(new InternetAddress("...@qq.com"));
//指明邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("...@qq.com"));
//邮件的标题
message.setSubject("只包含文本的简单邮件");
//邮件的文本内容(也可写为HTML语句)
message.setContent("你好啊!","text/html;charset=UTF-8");
//message.setContent("html语句");
6、发送邮件
ts.sendMessage(message,message.getAllRecipients());
7、关闭连接
ts.cloase();
三、复杂邮件的发送(有附件和图片)
相对于二,只有第5点创建邮件发生变化
如下(带图片):
MimeMessage message = new MimeMessage(session);
//指明邮件的发起人
message.setFrom(new InternetAddress("...@qq.com"));
//指明邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("...@qq.com"));
//邮件的标题
message.setSubject("带图片的邮件");
//准备图片数据
MimeBodyPart image = new MimeBodyPart();
//图片需要经过 数据处理DataHandler
DataHandler dh = new DataHandler(new FileDataSource(""));
image.setDataHandler(dh);//放入处理过的图片数据
image.setContentID("bz.jpg");//给图片设置一个id,之后可以使用
//准备正文数据
MimeBodyPart text = new MimeBodyPart();
text.setContent("这是一封邮件正文带图片<img src:'cid:bz.jpg'>的邮箱","text/html;charset=UTF-8");
//描述数据关系
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(image);
mm.addBodyPart(text);
mm.setSubType("related");
//设置到消息中,保存修改
message.setContent(mm);//把最后编辑好的邮件放到消息中
message.saveChanges();
带附件:
//附件
MimeBodyPart fj = new MimeBodyPart();
fj.setDataHandler(new DataHandler(new FileDataSource("附件存在路径")));
fj.setFileName("设置附件名字");
//然后进行拼接
MimeMultipart body = new MimeMultipart();
body.addBodyPart(text);
body.addBodyPart(fj);
body.setSubType("related");
//设置到消息中,保存修改
message.setContent(body);
message.saveChanges();