邮件发送失败?WireShark帮你找原因

1.发现问题阶段  

使用以前的发送邮件的java类,今天发送失败。报错如下:
(因为properties属性 mail.debug 设成了true,所以看到详情)


于是修改程序,增加了蓝色部分一句。



再次运行,发现修改有作用。但仍报错。控制台报错如下:


发送代码部分如下,为啥上面的日志中MAIL FROM 这里这么奇怪换行了???是不是这里的问题???
2.使用wireshark确定问题 
于是 祭出wireshark神器,安装foxmail,对比程序发送数据和foxmail发送数据。

程序发 送时wireshark数据截取截图:

faxmail发送时wireshark数据截取截图:


3.解决问题  
于是开始重点检查setFrom参数的设置,发现还有一个setFrom( InternetAddress  i nternetAddress )方法。于是果断改成
mailMessage.setFrom(" liguocai@amindao.com‍");
修改为:
mailMessage.setFrom(new InternetAddress(" liguocai@amindao.com‍")); 


一切OK了.



虽然还不清楚mailMessage.setFrom(" liguocai@amindao.com‍");的问题所在,但问题解决了。爽!!!

附邮件发送代码:
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("liguocai@amindao.com");   
        //发送者邮箱的密码   
        ((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("liguocai@amindao.com‍");   
 
        //邮件主题   


		//建立邮件讯息
		MimeMessage mimeMessage = sender.createMimeMessage();
		MimeMessageHelper messageHelper=null;
		messageHelper = new MimeMessageHelper( mimeMessage, true, "utf-8");
		messageHelper.setFrom("liguocai@amindao.com‍");//使用这种方式是,使用wireshark检查末尾多了\r>\r\n  ,程序提示500 Error: bad syntax,无效地址
		//messageHelper.setFrom(new InternetAddress("liguocai@amindao.com"));  
		//设定收件人、寄件人、主题与内文
        //邮件主题   
        if (args.length>=3){
	        //邮件接收者的邮箱地址   
        	messageHelper.setTo(args[0]);        	
        	messageHelper.setSubject(args[1]);   
	        //邮件内容,简单的邮件信息只能添加文本信息   
        	messageHelper.setText(args[2]);   
        }else{
	        //邮件接收者的邮箱地址   
        	messageHelper.setTo("liguocai@amindao.com‍"); //使用这种方式是,使用wireshark检查末尾多了\r>\r\n  ,程序提示500 Error: bad syntax,无效地址
        	//messageHelper.setTo(new InternetAddress("liguocai@amindao.com"));
	        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("liguocai@amindao.com‍");   
        //邮件主题   
        if (args.length==3){
	        //邮件接收者的邮箱地址   
	        mailMessage.setTo(args[0]);        	
        	mailMessage.setSubject(args[1]);   
	        //邮件内容,简单的邮件信息只能添加文本信息   
	        mailMessage.setText(args[2]);   
        }else{
	        //邮件接收者的邮箱地址   
	        mailMessage.setTo("153277817@qq.com");        	
        	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"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值