【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.

发送结果:

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

 

posted @ 2020-09-22 11:14  emdzz  阅读(321)  评论(0)    收藏  举报