JavaMail是用于发送和接收电子邮件的Java API。它提供了一组类和方法,使开发人员能够在Java应用程序中创建、发送和接收电子邮件。JavaMail可以用于不同的邮件协议,包括SMTP、POP3和IMAP。以下,我将通过SMTP协议来具体表述邮件的收发过程。
一、SMTP协议
SMTP(Simple Mail Transfer Protocol)是一种用于在计算机网络上传输电子邮件的协议。它是一种客户端-服务器协议,常用于跨网络或通过Internet发送电子邮件。
SMTP协议的主要功能是传输邮件。当用户通过邮件客户端发送一封邮件时,客户端将邮件发送给配置好的SMTP服务器。SMTP服务器负责将邮件转发给接收方的SMTP服务器,直到邮件最终被送达到接收方的邮件服务器。
SMTP协议使用TCP(Transmission Control Protocol)作为传输协议,通常使用25号端口进行通信。SMTP协议还支持身份验证和加密机制,以提高邮件传输的安全性。需要注意的是,SMTP协议只负责邮件的传输,不涉及邮件的查看和存储。
二、SMTP协议进行邮件发送的具体实现过程
1.创建Session会话
为了确保客户端和服务器之间建立有效的通信连接,首先要创建Session会话。(由于每次通过SMTP协议进行邮件传输时都需要创建会话,因此可以对该部分的代码进行封装,方便对该段代码进行复用。)
// SMTP服务器连接信息
// 创建一个Properties对象(Properties内是一个个键值对)
Properties props = new Properties();
// SMTP主机名(根据自己使用的邮箱写)
props.put("mail.smtp.host", "smtp.163.com");
// 主机端口号(网易邮箱中:@126端口号是25)
props.put("mail.smtp.port", "25");
// 是否需要用户认证
props.put("mail.smtp.auth", "true");
// 启用TLS加密
props.put("mail.smtp.starttls.enable", "true");
// 创建会话,参数包括SMTP服务器连接参数和账号和密码的授权认证对象
Session session = Session.getInstance(props, new Authenticator() {
// 发送邮件的邮箱账号
String userName = "****@163.com";
String password = "************";
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,password);
}
});
2.创建邮件并写明邮件的信息
为了确保邮件可以成功发送到目标邮箱,我们在创建被发送的邮件对象时需要写明邮件的信息,如邮件的标题、发件人信息、收件方式以及收件人信息等。
// 2.创建邮件对象
MimeMessage message = new MimeMessage(session);
// 邮件标题
message.setSubject("*****");
// 发件人
message.setFrom(new InternetAddress("****@163.com"));
// 收件方式及收件人(TO发送 CC抄送 BCC密件抄送)
message.setRecipient(RecipientType.TO, new InternetAddress("****@qq.com"));
3.邮件内容编辑
邮件的内容包括邮件的正文、附件等,在传输过程中,将邮件的内容分为不同的部分分别写,最后合并进行发送
// 邮件正文+附件
// 正文
BodyPart textPart = new MimeBodyPart();
// 正文的内容,以及使用的编码
textPart.setContent("正文内容","text/html;charset = utf-8");
// 附件
BodyPart filePart = new MimeBodyPart();
filePart.setFileName("附件名");
//上传附件文件内容
filePart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(Files.readAllBytes(Paths.get("F:\\Table\\picture\\cute.jpg")),
"application/octet-stream")));
//将正文+附件组装成Multipart对象
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);
//将Multipart对象放入邮件
message.setContent(multipart);
4.邮件的发送
Transport.send(message);