发送邮件使用到的协议:SMTP协议(应用层)
发送邮件前的准备工作:
- 导入javax-mail.jar包
- 在所使用的的邮箱软件中开启POP3/SMTP服务
- 新增授权密码(用于应用程序与服务器连接时的授权认证)
发送邮件的三大步骤:
1、创建Session会话对象
由于Session对象的创建内容稍有繁琐且为了提高代码的复用性,进行单独的封装JavaMailUtills类
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import java.util.Properties;
//工具类
public class JavaMailUtils {
//私有构造方法,不允许创建该类对象
private JavaMailUtils(){}
public static Session createSession(String userName,String passWord){
//Properties存储SMTP服务连接信息
Properties prop=new Properties();
prop.put("mail.smtp.host","smtp.163.com");//SMTP主机名
prop.put("mail.smtp.port",465);//SMTP主机端口号
prop.put("mail.smtp.auth","true");//是否需要用户认证
prop.put("mail.smtp.starttls.enable","true");//启用TLS加密
/**创建Session会话对象
* 参数1:smtp服务连接参数信息
* 参数2:账号和密码的授权认证对象
*/
Session session=Session.getInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,passWord);
}
});
//启用开发者模式
session.setDebug(true);
return session;
}
}
2、创建MimeMessage邮件对象
MimeMessage message=new MimeMessage(session);
3、通过Transport发送邮件
Transport.send(message);
一、发送邮件
public class Demo01 {
public static void main(String[] args) {
String userName="Rice_y2002@163.com";//用户名
String passWord="WXYLPQGUWSUEFTNV";//口令
try {
//1、创建Session会话
Session session=JavaMailUtils.createSession(userName,passWord);
//2、创建邮件对象
MimeMessage message=new MimeMessage(session);
message.setSubject("本封邮件的标题");
message.setText("邮件的正文内容");
message.setFrom(new InternetAddress("Rice_y2002@163.com"));//发件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("3213141830@qq.com"));
//3、发送邮件
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
二、发送抄送多人的邮件
public class Demo02 {
public static void main(String[] args) {
String userName="Rice_y2002@163.com";//用户名
String passWord="WXYLPQGUWSUEFTNV";//授权密码
try {
//1、创建Session对象
Session session=JavaMailUtils.createSession(userName,passWord);
//2、创建邮件对象MimeMessage
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress("Rice_y2002@163.com"));
/**指定收件人
* 参数1:Message.RecipientType.TO:单个发送
* 参数2:收件人地址
*/
message.setRecipient(Message.RecipientType.TO,new InternetAddress("2443431327@qq.com"));
/**指定抄送收件的多人:
* 参数1:Message.RecipientType.CC:抄送
* 参数2:InternetAddress类型数组,用于存储要抄送的地址
*/
message.setRecipients(Message.RecipientType.CC,new InternetAddress[]{new InternetAddress("2443431327@qq.com"),
new InternetAddress("1917683250@qq.com"),new InternetAddress("13992731394@163.com")}
);
message.setSubject("邮箱标题");
//邮箱中发送带有HTML标签的内容时,添加编码和文本类型参数
message.setText("邮箱<b>正文内容</b>","utf-8","html");
//3、发送邮件
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
三、发送带有附件的邮件
public class Demo03 {
public static void main(String[] args) {
String userName="Rice_y2002@163.com";
String passWord="WXYLPQGUWSUEFTNV";
try {
//1、创建Session会话
Session session=JavaMailUtils.createSession(userName,passWord);
//2、创建MineMessage邮件对象
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress("Rice_y2002@163.com"));//发件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("2443431327@qq.com"));//收件人
message.setRecipients(Message.RecipientType.CC,new InternetAddress[]{
new InternetAddress("m15319800930@163.com"),
new InternetAddress("13992731394@163.com")
});//抄送多人
message.setSubject("给你发了一张图片");//邮件标题
//正文部分
BodyPart textPart=new MimeBodyPart();
textPart.setText("你瞅瞅啊");
//附件部分
BodyPart filePart=new MimeBodyPart();
filePart.setFileName("photo.jpg");//设置邮件中显示的附件名称
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(Files.readAllBytes(
Paths.get("D:\\桌面\\head.jpg")
),"application/octet-stream")
)
);
//将正文+附加组装为一个Multipart对象
Multipart multipart=new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);
//将Multipart对象装入邮件
message.setContent(multipart);
//3、发送邮件
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、发送内嵌图片的HTML邮件
public class Demo04 {
public static void main(String[] args) {
String userName="Rice_y2002@163.com";
String passWord="WXYLPQGUWSUEFTNV";
try {
//1、创建Session会话对象
Session session=JavaMailUtils.createSession(userName,passWord);
//2、创建邮件对象
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress("Rice_y2002@163.com"));//发送方
message.setRecipient(Message.RecipientType.TO,new InternetAddress("2443431327@qq.com"));//接收方
message.setSubject("打开看图片");//邮件标题
//创建正文部分
BodyPart textPart=new MimeBodyPart();
//StringBuilder进行内容拼接
StringBuilder content=new StringBuilder();
content.append("<b>This is a photo!</b>");
//<img>的src为(cid:+附件的content-ID)
content.append("<img src=\"cid:headPhoto\"/>");
//将StringBuilder的内容设置到正文部分
textPart.setContent(content.toString(),"text/html;charset=utf-8");
//创建附件部分
BodyPart filePart=new MimeBodyPart();
//设置附件部分的数据处理器
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
Files.readAllBytes(Paths.get("D:\\桌面\\head.jpg")
),"application/octet-stream"
)
)
);
//设置附件的Content-ID(用于嵌入图片的img标签使用)
filePart.setHeader("Content-ID","headPhoto");
//创建Multipart对象(将正文和附件组合)
Multipart multipart=new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);
message.setContent(multipart);
//3、发送邮件
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}