SMTP:Simle Message Transfer Protocal 簡單消息傳輸協議。發送郵件時使用的協議。描述了數據該如何表示。默認使用的端口:25
POP:Post Office Protocal郵局協議。接收郵件時使用的協議。默認使用的端口:110
二、手工發送郵件和接收郵件(熟練SMTP等協議的)
[email protected] usst1
[email protected] usst2
服務器地址 SMTP:smtp.163.com POP3:pop.163.com
Base64編碼:
用戶名:usst1 dXNzdDE=
密碼:usst1 dXNzdDE=
1、手工發送郵件的過程:telnet
telnet smtp.163.com 25
------------------------------------------------------------以下屬於SMTP協議的內容
ehlo xjp //向服務器打招呼
auth login //請求認證
//提示輸入用戶名和密碼(Base64編碼後的)
dXNzdDE=
dXNzdDE=
mail from:<[email protected]>
rcpt to:<[email protected]>
data //說明郵件的開始
//郵件內容是要遵循一定格式的:RFC822規範
from:[email protected]
to:[email protected]
subject:這是一封手工發送的郵件
aaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
.cccccccccccccccccccc
------------------------------------------------------------
quit
2、手工收取郵件(POP協議)
telnet pop.163.com 110
----------------------------------以下屬於POP協議的東東
user usst2
pass usst2
stat //返回郵箱的統計信息
list 郵件編號 //返回某一封的郵件統計信息
retr 郵件編號 //取出某一封郵件的內容
----------------------------------
quit
三、JavaMail的核心API簡介
導入jar包:mail.jar (注意:Javamail的API依賴jaf(Java Activation Framework)框架,還需要導入jaf的jar包。如果使用的是JDK6及以上版本,就不需要了)
Session:代表郵件的環境
Message:代表郵件
BodyPart:代表複雜郵件中的每一部分
Multipart:描述由多個BodyPart組成的郵件的關係
四、發送一個既有文本,文本中還內嵌圖片的郵件,還有附件的郵件的示例
public class sendMailDemo {
public static void main(String[] args) throws Exception {
Properties props = new Properties();//環境變量設置。發送郵件時才需要
props.setProperty("mail.transport.protocol", "smtp");//發送使用的協議
props.setProperty("mail.host", "smtp.163.com");//發送服務器的主機地址
props.setProperty("mail.smtp.auth", "true");//請求身份驗證
props.setProperty("mail.debug", "true");//調試模式
// Session session = Session.getDefaultInstance(props);
Session session = Session.getDefaultInstance(props,new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("usst1","usst1");
}
});
MimeMessage message = new MimeMessage(session);//代表一封郵件
message.setFrom(new InternetAddress("[email protected]"));//設置發件人
message.setRecipients(Message.RecipientType.TO, "[email protected]");//設置收件人
message.setSubject("這是一封文本中內嵌圖片的郵件");//設置主題
//文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent("圖片 begin<img src='cid:tp'/>end", "text/html;charset=UTF-8");
//內嵌圖片部分
MimeBodyPart imagePart = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("D:/1.jpg"));
imagePart.setDataHandler(dh);
imagePart.setContentID("tp");
//文本和內嵌圖片合體
MimeMultipart mpart1 = new MimeMultipart();
mpart1.addBodyPart(textPart);
mpart1.addBodyPart(imagePart);
mpart1.setSubType("related");
MimeBodyPart textImagePart = new MimeBodyPart();
textImagePart.setContent(mpart1);
//附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
dh = new DataHandler(new FileDataSource("D:/附件.rar"));
String filename = dh.getName();//獲取文件名
System.out.println(filename);
attachmentPart.setDataHandler(dh);
attachmentPart.setFileName(MimeUtility.encodeText(filename));//手工設置文件名.中文文件名要注意編碼
//全部合體
MimeMultipart mpart2 = new MimeMultipart();
mpart2.addBodyPart(textImagePart);//文本加內嵌圖片
mpart2.addBodyPart(attachmentPart);//附件
mpart2.setSubType("mixed");//複雜關係
message.setContent(mpart2);
message.saveChanges();
// message.writeTo(new FileOutputStream("D:/1.eml")); //寫入本地保存
//發送郵件
Transport ts = session.getTransport();//創建發送郵件
ts.connect("usst1","usst1");//連接
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
}