郵件發送失敗?WireShark幫你找原因

1.發現問題階段 

使用以前的發送郵件的java類,今天發送失敗。報錯如下:
(因爲properties屬性mail.debug設成了true,所以看到詳情)


於是修改程序,增加了藍色部分一句。



再次運行,發現修改有作用。但仍報錯。控制檯報錯如下:


發送代碼部分如下,爲啥上面的日誌中MAIL FROM 這裏這麼奇怪換行了???是不是這裏的問題???
2.使用wireshark確定問題 
於是 祭出wireshark神器,安裝foxmail,對比程序發送數據和foxmail發送數據。

程序發送時wireshark數據截取截圖:

faxmail發送時wireshark數據截取截圖:


3.解決問題 
於是開始重點檢查setFrom參數的設置,發現還有一個setFrom(InternetAddress  internetAddress)方法。於是果斷改成
mailMessage.setFrom("[email protected]‍");
修改爲:
mailMessage.setFrom(new InternetAddress("[email protected]‍")); 


一切OK了.



雖然還不清楚mailMessage.setFrom("[email protected]‍");的問題所在,但問題解決了。爽!!!

附郵件發送代碼:
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

//import org.springframework.mail.SimpleMailMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
//import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.util.StringUtils;


public class SendMail {
	public static void  main(String args[]) throws MessagingException{   
        
        //創建郵件發送類 JavaMailSender   
        //用於發送基本的文本郵件信息(不能包括附件,及圖片)   
		JavaMailSenderImpl sender = new JavaMailSenderImpl();    
           
		//java InstallCert smtp.office365.com:465
		//java InstallCert outlook.office365.com:995
        //設置郵件服務主機   
        ((JavaMailSenderImpl)sender).setHost("smtp.mxhichina.com");   
		//((JavaMailSenderImpl)sender).setHost("outlook.office365.com");
        //發送者郵箱的用戶名   
        ((JavaMailSenderImpl)sender).setUsername("[email protected]");   
        //發送者郵箱的密碼   
        ((JavaMailSenderImpl)sender).setPassword("****");   
           
        //配置文件,用於實例化java.mail.session   
        Properties pro = System.getProperties();   
           
        //登錄SMTP服務器,需要獲得授權,網易163郵箱新近註冊的郵箱均不能授權。   
        //測試 sohu 的郵箱可以獲得授權   
        //pro.put("mail.smtp.starttls.enable", "true");
        pro.setProperty("mail.debug", "true");  
        pro.put("mail.smtp.auth", "true");   
        //pro.put("mail.smtp.socketFactory.port", "995");   
        pro.put("mail.smtp.socketFactory.port", "25");
        //pro.put("mail.smtp.socketFactory.fallback", "false");   
           
        //通過文件獲取信息   
        ((JavaMailSenderImpl)sender).setJavaMailProperties(pro);   
           
     
        //創建基本郵件信息   
        SimpleMailMessage mailMessage = new SimpleMailMessage();   
           
        //發送者地址,必須填寫正確的郵件格式,否者會發送失敗   
        mailMessage.setFrom("[email protected]‍");   
 
        //郵件主題   


		//建立郵件訊息
		MimeMessage mimeMessage = sender.createMimeMessage();
		MimeMessageHelper messageHelper=null;
		messageHelper = new MimeMessageHelper( mimeMessage, true, "utf-8");
		messageHelper.setFrom("[email protected]‍");//使用這種方式是,使用wireshark檢查末尾多了\r>\r\n  ,程序提示500 Error: bad syntax,無效地址
		//messageHelper.setFrom(new InternetAddress("[email protected]"));  
		//設定收件人、寄件人、主題與內文
        //郵件主題   
        if (args.length>=3){
	        //郵件接收者的郵箱地址   
        	messageHelper.setTo(args[0]);        	
        	messageHelper.setSubject(args[1]);   
	        //郵件內容,簡單的郵件信息只能添加文本信息   
        	messageHelper.setText(args[2]);   
        }else{
	        //郵件接收者的郵箱地址   
        	messageHelper.setTo("[email protected]‍"); //使用這種方式是,使用wireshark檢查末尾多了\r>\r\n  ,程序提示500 Error: bad syntax,無效地址
        	//messageHelper.setTo(new InternetAddress("[email protected]"));
	        messageHelper.setSubject("test22");   
	        //郵件內容,簡單的郵件信息只能添加文本信息   
	        messageHelper.setText("test。"); 
	        
        }
        
//        //編碼發件人
//        try {
//			messageHelper.setFrom( msg.getFrom(), PERSONAL_CN);
//		} catch (UnsupportedEncodingException e) {
//			messageHelper.setFrom( PERSONAL_EN + msg.getFrom());
//		}
       
		
//		/* 添加附件 */
//        String[] filePath=null;
//        File[] attachments=null;
//        if (args.length>=4){
//        	filePath=args[3].split(",");
//        	attachments=new File[filePath.length];
//        	for (int i = 0; i < filePath.length; i++) {
//        		attachments[i]=new File(filePath[i]);
//        	}
//        }else{
//        	attachments=new File[1];
//        	attachments[0]=new File("c:/as.txt");
//        }
//		sun.misc.BASE64Encoder base64 = new sun.misc.BASE64Encoder();
//        String attName = null;
//		for (int i = 0; i < attachments.length; i++) {
////			if (attachmentNames == null) {
////				attName = attachments[i].getName();
////			} else {
////				attName = attachmentNames[i];
////			}
//			attName = attachments[i].getName();
//			attName = "=?GBK?B?" + base64.encode( attName.getBytes()) + "?=";
//			
//			messageHelper.addAttachment( attName, new FileSystemResource(attachments[i]));
//		}
        
		
		sender.send( mimeMessage);
           
    }  	
	public static void  main33(String args[]){   
        
        //創建郵件發送類 JavaMailSender   
        //用於發送基本的文本郵件信息(不能包括附件,及圖片)   
        MailSender sender = new JavaMailSenderImpl();    
           
           
        //設置郵件服務主機   
        ((JavaMailSenderImpl)sender).setHost("smtp.mxhichina.com");   
        //發送者郵箱的用戶名   
        ((JavaMailSenderImpl)sender).setUsername("liguocai");   
        //發送者郵箱的密碼   
        ((JavaMailSenderImpl)sender).setPassword("Amindao2");   
           
        //配置文件,用於實例化java.mail.session   
        Properties pro = System.getProperties();   
           
        //登錄SMTP服務器,需要獲得授權,網易163郵箱新近註冊的郵箱均不能授權。   
        //測試 sohu 的郵箱可以獲得授權   
        pro.put("mail.smtp.auth", "true");   
        pro.put("mail.smtp.socketFactory.port", "25");   
        pro.put("mail.smtp.socketFactory.fallback", "false");   
           
        //通過文件獲取信息   
        ((JavaMailSenderImpl)sender).setJavaMailProperties(pro);   
           
     
        //創建基本郵件信息   
        SimpleMailMessage mailMessage = new SimpleMailMessage();   
           
        //發送者地址,必須填寫正確的郵件格式,否者會發送失敗   
        mailMessage.setFrom("[email protected]‍");   
        //郵件主題   
        if (args.length==3){
	        //郵件接收者的郵箱地址   
	        mailMessage.setTo(args[0]);        	
        	mailMessage.setSubject(args[1]);   
	        //郵件內容,簡單的郵件信息只能添加文本信息   
	        mailMessage.setText(args[2]);   
        }else{
	        //郵件接收者的郵箱地址   
	        mailMessage.setTo("[email protected]");        	
        	mailMessage.setSubject("測試郵件");   
	        //郵件內容,簡單的郵件信息只能添加文本信息   
	        mailMessage.setText("測試"); 
	        
        }
           
   
        //發送郵件,參數可以是數組   
        //sender.send(SimpleMailMessage[])  

        sender.send(mailMessage);
         
        //MessagingException t;
        //sender.send(mailMessage);
       //sender.send((SimpleMailMessage)mailMessage);   
           
    }  
}

依賴包:
<classpathentry kind="lib" path="lib/activation-1.0.jar"/>
<classpathentry kind="lib" path="lib/commons-logging.jar"/>
<classpathentry kind="lib" path="lib/spring-1.0.jar"/>
<classpathentry kind="lib" path="lib/mail-1.0.jar"/>

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