1 SMTP协议和 Pop3 协议
发邮件协议
SMTP协议 – Simple Mail(Message) TransferProtocol 发邮件协议。
一个协议就是一台主机。
收邮件协议
Pop3 – Post Office Protocol 3
使用SMTP交互式的协议发邮件
Ehlo 后面是一个任意的字符,说明我是
Auth login – 请求登录
Mail from:[email protected]
Rcpt to : 发送给某个
Data :以下是正文
以下就是一个操作smtp服务发邮件过程:
Xshell:\> telnet smtp.126.com 25
Looking up host 'smtp.126.com'...
Host 'smtp.126.com' resolved to123.125.50.111.
Connecting to 123.125.50.111:25...
Connection established.
To escape to local shell, press'Ctrl+Alt+]'.
220 126.com Anti-spam GT for CoremailSystem (126com[20121016])
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrU5G9qUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
334 dXNlcm5hbWU6
334 UGFzc3dvcmQ6
235 Authentication successful
250 Mail OK
250 Mail OK
354 End data with<CR><LF>.<CR><LF>
to:<[email protected]>
subject:hello 主题
空行
where are you? 正文
. 一个点
250 Mail OK queued assmtp5,jtKowEBJwVw6wJRRaQeiAw--.496S2 1368703114
quit221 Bye
Connectionclosed by foreign host.
Type `help' tolearn how to use Xshell prompt.
使用pop3收邮件:
User 请求登录– 不要求base64编码
Pass 输入密码
List – 显示所有邮件信息
Stat – 查看邮件状态
Retr # - 查看某个邮件
telnetpop3.163.com 110
userchenzibiao5
密码
List
Retr1
2、用Java代码来发送邮件
第一步:导入jar包
第二步:核心类
javax.mail.Session– 确定与邮件服务器连接。会话。
Javax.mail.Message – 消息体。
子类:MimeMessage – 可以指定邮件的类型 。
TransPort– 静态的方法-sendMessage – 用于发送邮件。
Authenticator |
The class Authenticator represents an object that knows how to obtain authentication(认证) for a network connection. Usually, it will do this by prompting the user for information. Applications use this class by creating a subclass, and registering an instance of that subclass with the session when it is created. When authentication is required, the system will invoke a method on the subclass (like getPasswordAuthentication). The subclass's method can query about the authentication being requested with a number of inherited methods (getRequestingXXX()), and form an appropriate message for the user.
Called when password authentication is needed. Subclasses should override the default implementation, which returns null.
|
|||||||||||
PasswordAuthentication |
The class PasswordAuthentication is a data holder that is used by Authenticator. It is simply a repository for a user name and a password
|
|||||||||||
Session |
The Session class represents a mail session and is not subclassed. It collects together properties and defaults used by the mail API's. A single default session can be shared by multiple applications on the desktop. Unshared sessions can also be created. The Session class provides access to the protocol providers that implement the
|
|||||||||||
MimeMessage |
public MimeMessage(Session session) Default constructor. An empty message object is created. The
|
|
|
第三步: 发一个文本邮件:
@Test
public void send1()throws Exception{
//声明资源
Properties p = new Properties();
//设置连接的服务器名称
p.setProperty("mail.host","smtp.126.com");
//声明使用用户名和密码
p.setProperty("mail.smtp.auth","true");
//声明认证的类
Authenticator auth = new Authenticator() {
/**
* 此方法用于返回用户名和密码的
*/
public PasswordAuthentication getPasswordAuthentication() {
//直接就声明这个类
PasswordAuthentication pwd =
new PasswordAuthentication("wj_leaf12345", "1qaz2wsx");
return pwd;
}
};
Session s = Session.getDefaultInstance(p,auth);
//设置为调试
s.setDebug(true);
System.err.println("连接是否成功:"+s);
//声明一个消息
Message msg =new MimeMessage(s);
//设置发件人
msg.setFrom(new InternetAddress("[email protected]"));
//设置收件人
msg.setRecipient(RecipientType.TO,new InternetAddress("[email protected]"));
//设置主题
msg.setSubject("这是一个学生发的邮件2");
//设置内容
msg.setContent("大家好,大家是A班2","text/plain;charset=UTF-8");
//发送
Transport.send(msg);
}
第四步:发一个html的邮件:
//设置内容
msg.setContent("你好我是交通学院<a href='http://www.sdjtu.edu.cn'>JJEDU</a>","text/html;charset=UTF-8");
其余内容同第三步第五步;发带有附件的邮件
@Test
public void send2() throws Exception{
//声明资源
Properties p = new Properties();
//设置连接的服务器名称
p.setProperty("mail.host","smtp.126.com");
//声明使用用户名和密码
p.setProperty("mail.smtp.auth","true");
//声明认证的类
Authenticator auth = new Authenticator() {
/**
* 此方法用于返回用户名和密码的
*/
public PasswordAuthentication getPasswordAuthentication() {
//直接就声明这个类
PasswordAuthentication pwd =
new PasswordAuthentication("wj_leaf12345", "1qaz2wsx");
return pwd;
}
};
Session s = Session.getDefaultInstance(p,auth);
//设置为调试
s.setDebug(true);
System.err.println("连接是否成功:"+s);
//声明一个消息
Message msg =new MimeMessage(s);
//设置发件人
msg.setFrom(new InternetAddress("[email protected]"));
//设置收件人
msg.setRecipient(RecipientType.TO,new InternetAddress("[email protected]"));
//设置主题
msg.setSubject("这是交通学院DDD");
//声明第一个body
MimeBodyPart body1 = new MimeBodyPart();
DataSource ds = new FileDataSource("./lib/34.jpg");
DataHandler dh = new DataHandler(ds);
body1.setDataHandler(dh);
body1.setFileName(MimeUtility.encodeText("大顺.jpg"));
//声明第二个body
MimeBodyPart body2 = new MimeBodyPart();
DataSource ds2 = new FileDataSource("./lib/mail.jar");
DataHandler dh2 = new DataHandler(ds2);
body2.setDataHandler(dh2);
body2.setFileName(MimeUtility.encodeText("aa.jar"));
MimeMultipart mmp = new MimeMultipart();
mmp.addBodyPart(body1);
mmp.addBodyPart(body2);
msg.setContent(mmp);
Transport.send(msg);
}