SMTP命令
HELO
向服务器标识用户身份
EHLO
向服务器标识用户身份
MAIL FROM
发件人地址
RCPT TO
标识单个的邮件接收人
DATA
表示所有的邮件接收人已标识,并初始化数据传输
HELP
查询服务器支持什么命令
NOOP
要求接收SMTP仅做OK应答
VRFY
验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令
EXPN
验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用
REST
退出/复位当前的邮件传输
QUIT
要求接收SMTP返回一个OK应答并关闭传输
SMTP案例
package com.levelcoder;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Demo1 {
public static void main(String[] args) throws MessagingException {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");//发送邮件是否需要认证 true 需要认证 false 不需要认证
props.setProperty("mail.transport.protocol", "smtp");//配置邮件协议
Session session = Session.getInstance(props);
session.setDebug(true);//是否开启 调试信息 true 开启 false 不开启 开启的时候 会把和smtp交互过程打印出来
Message message = new MimeMessage(session) ;
message.setFrom(new InternetAddress("发件人邮箱"));//设置发件人
message.setSubject("测试文本");//设置邮件标题
message.setText("测试文本");//设置发件文本信息
Transport transport = session.getTransport();
transport.connect("smtp服务器", 25,"用户名","密码");//String host, int port, String user,String password
transport.sendMessage(message,new Address[]{new InternetAddress("收件人地址")});
transport.close();
}
}
执行结果分析
DEBUG: setDebug: JavaMail version 1.4.4 //标记当前JavaMail版本
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.126.com", port 25, isSSL false
220 126.com Anti-spam GT for Coremail System (126com[20140526])
DEBUG SMTP: connected to host "smtp.126.com", port: 25
EHLO N12KCKCM2UO42M8 //向服务器标识用户身份
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFG1q1wUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "coremail", arg "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFG1q1wUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
AUTH LOGIN //认证模式
334 dXNlcm5hbWU6
SmF2YVpoYW5nWW9uZ0AxMjYuY29t //base64格式编码:用户名
334 UGFzc3dvcmQ6
enkxOTkyMTIwNS4= //base64格式编码:密码
235 Authentication successful
DEBUG SMTP: use8bit false
MAIL FROM: //发件人
250 Mail OK
RCPT TO: //收件人
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP: LevelCoder@126.com
DATA
354 End data with . //.标记当前邮件结束
From: JavaZhangYong@126.com
Message-ID: <772777427.0.1496972256323.JavaMail.Administrator@N12KCKCM2UO42M8>
Subject: =?UTF-8?B?5rWL6K+V5paH5pys?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8 //发送邮件类型
Content-Transfer-Encoding: base64 //发送邮件编码格式
5rWL6K+V5paH5pys //发送邮件正文
.
250 Mail OK queued as smtp1,C8mowACnPCXg+zlZqM5gAA--.23809S2 1496972258
QUIT //退出
221 Bye
结果
POP3命令
命令
描述
USER [username]
处理用户名
PASS [password]
处理用户密码
APOP [Name,Digest]
认可Digest是MD5消息摘要
STAT
处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL [Msg#]
处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST [Msg#]
处理返回邮件数量和每个邮件的大小
RETR [Msg#]
处理返回由参数标识的邮件的全部文本
DELE [Msg#]
处理服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET
处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg# n]
处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP
处理服务器返回一个肯定的响应
QUIT
终止会话