郵件發送JavaMail的開發

一、郵件開發用到的協議:SMTP、POP、RFC822、MIME
    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();
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章