【JavaMail】01 快速入门
邮件协议:
POP3
SMTP
IMAP
SMTP协议介绍
SMTP(Simple Mail Transfer Protocal)称为简单邮件传输协议,目标是向用户提供高效、可靠的邮件传输。
SMTP的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。
工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。 SMTP是个请求/响应协议,它监听25号端口,用于接收用户的邮件请求,并与远端邮件服务器建立SMTP连接。
3.SMTP工作机制
SMTP通常有两种工作模式:发送SMTP和接收SMTP。
具体工作方式为:发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,
否则向DNS查询远端邮件服务器的MX纪录,并建立与远端接收SMTP之间的一个双向传送通道,
此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。
一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。
如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。
如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。
当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。
4.POP协议简介
POP的全称是 Post Office Protocol ,即邮局协议,用于电子邮件的接收,它使用TCP的110端口,现在常用的是第三版,所以简称为 POP3。
POP3采用Client/Server工作模式。
当客户机需要服务时,客户端的软件(Outlook Express或FoxMail)将与POP3服务器建立TCP连接,
此后要经过POP3协议的三种工作状态,首先是认证过程,确认客户机提供的用户名和密码,在认证通过后便转入处理状态,
在此状态下用户可收取自己的邮件或做邮件的删除,在完成响应的操作后客户机便发出quit命令,此后便进入更新状态,
将做删除标记的邮件从服务器端删除掉。到此为止整个POP过程完成。
5.IMAP协议简介
IMAP是Internet Message Access Protocol的缩写,顾名思义,主要提供的是通过Internet获取信息的一种协议。
IMAP像POP那样提供了方便的邮件下载服务,让用户能进行离线阅读,但IMAP能完成的却远远不只这些。
IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。
在各种邮箱中的设置里面可以找到这些协议:

开启协议支持需要根据厂商要求完成相关设置
然后会提供对应的协议授权码:
pop3:frcgbdjqjzptbegg imap:nkjwgpfpwtazdjgj
入门案例:
导入接口依赖:
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
测试类:
package cn.zeal4j;
import org.junit.Test;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
/**
* @author Administrator
* @file IntelliJ IDEA Spring-Mail
* @create 2020 09 22 10:39
*/
public class JavaMail {
@Test
public void sendNormalTextEmail() throws Exception{
// 邮件地址配置
Properties properties = new Properties();
// IP设置
properties.setProperty("mail.smtp.host", "smtp.qq.com");
// 端口设置
properties.setProperty("mail.smtp.port", "587"); // 465或者587 // javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1
// 身份认证设置
properties.setProperty("mail.smtp.auth", "true");
// 得到邮件会话实例
Session emailSession = Session.getInstance(properties);
// 开启调试模式
emailSession.setDebug(true);
// 获取传输对象
Transport transport = emailSession.getTransport();
// 由传输对象进行连接:
transport.connect(properties.getProperty("mail.smtp.host"), "zeal4j", "frcgbdjqjzptbegg");
// 邮件对象
MimeMessage mimeMessage = new MimeMessage(emailSession);
// 发送人设置
mimeMessage.setFrom("zeal4j@qq.com");
// 发送类型: Message.RecipientType
// TO 发送 CC 抄送 BCC 加密抄送
// 这里设置的是发件人和收件人为同一个人
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("zeal4j@qq.com"));
// 主题文本内容设置
mimeMessage.setSubject("JavaMail邮件发送测试!!!");
// 发送日期设置
mimeMessage.setSentDate(new Date());
// 内容设置
mimeMessage.setText("演示文本。。。。 测试用");
// 发送邮件
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
// 资源释放
transport.close();
}
}
调试日志输出:
DEBUG: setDebug: JavaMail version 1.6.2 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.qq.com", port 587, isSSL false 220 newxmesmtplogicsvrsza7.qq.com XMail Esmtp QQ Mail Server. DEBUG SMTP: connected to host "smtp.qq.com", port: 587 EHLO DESKTOP-HQK64L1 250-newxmesmtplogicsvrsza7.qq.com 250-PIPELINING 250-SIZE 73400320 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN 250-MAILCOMPRESS 250 8BITMIME DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "SIZE", arg "73400320" DEBUG SMTP: Found extension "STARTTLS", arg "" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN" DEBUG SMTP: Found extension "AUTH=LOGIN", arg "" DEBUG SMTP: Found extension "MAILCOMPRESS", arg "" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: protocolConnect login, host=smtp.qq.com, user=zeal4j, password=<non-null> DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEBUG SMTP: Using mechanism LOGIN DEBUG SMTP: AUTH LOGIN command trace suppressed DEBUG SMTP: AUTH LOGIN succeeded DEBUG SMTP: use8bit false MAIL FROM:<zeal4j@qq.com> 250 OK. RCPT TO:<zeal4j@qq.com> 250 OK DEBUG SMTP: Verified Addresses DEBUG SMTP: zeal4j@qq.com DATA 354 End data with <CR><LF>.<CR><LF>. Date: Tue, 22 Sep 2020 11:08:19 +0800 (CST) From: zeal4j@qq.com To: zeal4j@qq.com Message-ID: <232824863.0.1600744103843@DESKTOP-HQK64L1> Subject: =?UTF-8?B?SmF2YU1haWzpgq7ku7blj5HpgIHmtYvor5XvvIHvvIHvvIE=?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 5ryU56S65paH5pys44CC44CC44CC44CCIOa1i+ivleeUqA== . 250 OK: queued as. DEBUG SMTP: message successfully delivered to mail server QUIT 221 Bye.
发送结果:

打开邮箱可以看到都为同一人发送接收


浙公网安备 33010602011771号