JavaMail之SMTP协议的邮件传输过程

        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);

        

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值