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