目录
2.2、抄送多个邮箱地址 邮件内容包含HTML标签,要设置编码格式
使用:BodyPart 的 子类 MimeBodyPart()
一、准备一个JavaMailUtils工具类
根据java的基础库中的定规则:
设置:该类为用final关键字修饰,表明该类不可被继承
1.1、定义私有构造方法,表明该类不能有对象
1.2、定义静态的createSession()方法 返回一个session会话对象
1.2.1、 定义Properties对象,将SMTP服务器的连接信息进行存储
SMTP主机名
主机端口号
是否需要用户认证
是否启用TLS加密
注意:Properties存储的是键值对;
一定要保证键和值的正确性,否则空制台会报553的错误。
1.2.1、 创建Session会话
参数1:SMTP服务器连接参数
参数2:账号和密码的授权认证对象
1.2.3、将session设置为开发者模式,便于观察
整理所有代码:
public final class JavaMailUtils {
private JavaMailUtils() {
}
public static Session createSession() {
String username = "邮箱名称(网易163或者162邮箱)";
String password = "相对应的密码";
// STMP服务器连接信息
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.163.com");
props.put("mail.smtp.port", "25");// 端口号 163: 465 || 126:25
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.emable", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true);
return session;
}
}
二、发送邮件类型
基本步骤:
1.创建Session会话 :session
2.创建邮件对象:MineMessage(session)邮件标题: setSubject()
邮件正文: setText()
发件人: setFrom()
抄送人 : setRecipent()
3.发送: Transport.send(message)
2.1、发送普通文本内容的邮件
public static void main(String[] args) {
try {
Session session = JavaMailUtils.createSession();
MimeMessage message = new MimeMessage(session);
message.setSubject("这是一封测试邮件,别害怕!"); // 设置邮件标题
message.setText("爱你孤身走暗巷,爱你走得很安详!"); // 设置邮件正文
message.setFrom(new InternetAddress("billgogoogooo@126.com")); // 发件人
message.setRecipient(RecipientType.TO, new InternetAddress("55094839@qq.com"));
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
2.2、抄送多个邮箱地址
邮件内容包含HTML标签,要设置编码格式
message.setText("<b>太阳</b>"utf-8","html");
public static void main(String[] args) {
try {
Session session = JavaMailUtils.createSession();
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("163邮箱"));
message.setRecipient(RecipientType.TO, new InternetAddress("QQ邮箱"));
message.setRecipients(RecipientType.CC,
new InternetAddress[] {new InternetAddress("QQ邮箱"),
new InternetAddress("QQ邮箱")});
message.setSubject("测试邮件");
message.setText("<Strong>内容</Strong>","utf-8","html");
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
2.3、发送带有"附件"的邮件
大体框架不变:只在基本步骤中的邮件正文部分有所改变
邮件仅包含正文:setText("----内容------")
邮件中既包含正文,又包含附件
使用:BodyPart 的 子类 MimeBodyPart()
2.3.1、定义正文 textPart
textPart.setContent("------内容----------- ")
2.3.2、定义附件 filePart
filePart.setFileName("附件文件显示名称");
上传附件文件:
设置:数据处理器------->创建数据处理器对象------->创建数据源对象【编码格式】
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
Files.readAllBytes(Paths.get("C:\\Users027.jpg")),
"application/octet-stream")));
2.3.3、将正文+附件组装成Multipart对象
定义Mutlipart对象 :multipart
调用multipart.addBodyPart() 将正文和附件组装起来
2.3.4、将Multipart对象放入邮件
message调用setContent("multipart")
整理所有代码
public static void main(String[] args) {
try {
Session session = JavaMailUtils.createSession();
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("163邮箱"));
message.setRecipient(RecipientType.TO, new InternetAddress("QQ邮箱"));
message.setRecipients(RecipientType.CC,
new InternetAddress[] {new InternetAddress("QQ邮箱"),
new InternetAddress("QQ邮箱")});
message.setSubject("测试邮件");
BodyPart textPart = new MimeBodyPart();
textPart.setContent("<b>脑子</b>", "text/html;charset=utf-8");
BodyPart filePart = new MimeBodyPart();
filePart.setFileName("李云龙阁下");
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
Files.readAllBytes(Paths.get("C:\\Users027.jpg")),
"application/octet-stream")));
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);
message.setContent(multipart);
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2.4、邮件正文嵌套图片
2.4.1、邮件正文:
可以创建一个StringBuilder对象,
调用 append() :追加正文内容
2.4.2、邮件附件:
(和2.3中的附件类似)
设置:数据处理器------->创建数据处理器对象------->创建数据源对象【编码格式】
调用setHeader()-----设置图片的内容ID
整理所有代码:
public static void main(String[] args) {
try {
Session session = JavaMailUtils.createSession();
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("163邮箱"));
message.setRecipient(RecipientType.TO, new InternetAddress("QQ邮箱"));
message.setRecipients(RecipientType.CC,
new InternetAddress[] {new InternetAddress("QQ邮箱"),
new InternetAddress("QQ邮箱")});
message.setSubject("触不可及");
BodyPart textPart = new MimeBodyPart();
StringBuilder contentText = new StringBuilder();
contentText.append("<h3>触不可及</h3>");
contentText.append("<p>一个残疾富豪和他的黑人伙计之间的故事</p>");
contentText.append("<img src=\"cid:cbkj\"/>");
textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
BodyPart imagePart = new MimeBodyPart();
imagePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
Files.readAllBytes(Paths.get("C:\\Pictures\\触不可及.webp")),
"application/octet-stream")));
imagePart.setHeader("Content-ID", "cbkj");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(imagePart);
message.setContent(multipart);
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}