`

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

 
阅读更多
1.发现问题阶段

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


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




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





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

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




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




3.解决问题
于是开始重点检查setFrom参数的设置,发现还有一个setFrom(InternetAddress  internetAddress)方法。于是果断改成
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("Amindao2");   
           
        //配置文件,用于实例化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"/>
  • 大小: 26.2 KB
  • 大小: 35.9 KB
  • 大小: 29.4 KB
  • 大小: 127.6 KB
  • 大小: 61.4 KB
分享到:
评论

相关推荐

    如何使用Wireshark进行抓包和分析?wireshark是网络诊断和故障排除的重要技能

    wireshark抓包及分析:如何使用Wireshark进行抓包和分析?wireshark是网络诊断和故障排除的重要技能; wireshark抓包及分析:如何使用Wireshark进行抓包和分析?wireshark是网络诊断和故障排除的重要技能; ...

    Wireshark协议分析之SMTP.zip

    在这个名为"Wireshark协议分析之SMTP.zip"的压缩文件中,包含了四个*.pcapng数据包,这些数据包记录了SMTP通信的不同阶段,特别是涉及跨域邮件传输和附件上传的场景。 首先,我们来看"mail_sender_client_1.pcapng...

    wireshark-gm-wireshark

    这对于排查网络问题,如确认数据是否正确发送、查找延迟原因、分析DDoS攻击等非常有帮助。同时,Wireshark还支持颜色编码,不同类型的封包会以不同的颜色显示,便于快速识别和分析。 对于开发者来说,Wireshark-GM-...

    wireshark11

    Wireshark是一款强大的网络协议分析器,被广泛用于网络故障排查、网络安全分析和软件开发等领域。标题"wireshark11"可能指的是Wireshark的一个特定版本,即1.12.0,这是一款适用于Windows 32位系统的版本,如...

    Wireshark安装顺序

    ### Wireshark安装顺序 Wireshark是一款广泛使用的网络数据包捕获与分析工具,它可以帮助用户深入理解网络通信过程中的细节。对于初次接触Wireshark的用户来说,正确安装Wireshark及其相关依赖是非常重要的一步。...

    9.4.3 使用 SMTP 发送附件 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    在Wireshark的数据包分析实战中,我们可以通过深入理解9.4.3章节来掌握如何通过SMTP发送带有附件的邮件。这一过程涉及到多个关键步骤,包括邮件内容的组织、MIME编码以及TCP流的跟踪。 首先,SMTP最初设计时并未...

    Wireshark - 使用WireShark进行报文分析简明教程

    Wireshark是一款强大的网络封包分析软件,它能够截取并深入分析网络中传输的数据包,展示出其中的详细信息。对于性能测试来说,尤其是在面对B/S架构和C/S架构的项目产品时,Wireshark起到了至关重要的作用。在Web...

    wireshark-dll

    Wireshark是一款强大的网络封包分析软件,广泛用于网络故障排查、网络安全分析和协议开发等领域。标题中的"wireshark-dll"暗示我们讨论的是Wireshark与动态链接库(DLL)文件之间的关联,这通常是由于某些DLL文件...

    Wireshark抓包分析POP3和SMTP协议

    Wireshark 是一款功能强大的网络抓包分析工具,通过对 POP3 和 SMTP 协议的抓包分析,可以深入理解电子邮件的发送和接收过程。本文将通过 Wireshark 抓包分析 POP3 和 SMTP 协议,来详细介绍电子邮件的发送和接收...

    ubuntu20.04离线安装wireshark3.2.3

    Wireshark是一款强大的网络协议分析器,被广泛用于网络故障排查、数据分析以及网络安全检测。在Ubuntu 20.04上离线安装Wireshark 3.2.3,需要遵循一系列步骤,因为通常我们是通过apt包管理器在线安装软件的。离线...

    ubuntu系统安装wireshark离线包,安装步骤详解以及遇到的问题解决方案

    4. **编译错误**:如果编译失败,检查configure脚本的输出,找出可能的错误原因,如编译器版本过低等。 5. **硬件限制**:如果电脑性能较低,编译过程可能耗时较长,耐心等待或者考虑升级硬件。 通过以上步骤,你...

    wireshark帮助解决问题

    - **网络故障排查**:当遇到网络性能下降、连接不稳定等问题时,Wireshark可以帮助分析具体原因,比如是否由数据包丢失、延迟过高或配置错误等因素引起。 - **网络安全分析**:Wireshark能够识别出网络流量中的异常...

    国密SSL的wireshark解析脚本gmssl-wireshark-main.zip

    《深入理解国密SSL与Wireshark解析脚本——gmssl_wireshark-main.zip详解》 国密SSL,全称为“国家商用密码SSL”,是中国自主研发的网络安全协议,旨在保护国内互联网通信的安全性和隐私性。它基于国际SSL/TLS协议...

    Wireshark从入门到精通视频.zip

    0.1 Wireshark协议分析从入门到精通课程介绍.mp4 1.1.1 Wireshark安装入门之软件介绍.mp4 1.1.2 Wireshark安装入门之抓包原理.mp4 1.1.3 WireShark安装入门之初始安装.mp4 1.1.4 WireShark安装入门之快速抓包.mp4 ...

    9.4.1 收发邮件 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    在深入探讨Wireshark如何分析电子邮件收发的数据包之前,我们先来理解电子邮件的工作原理。 电子邮件服务的架构与传统的邮政服务有诸多相似之处。用户通过邮件用户代理(MUA)撰写邮件,这相当于在纸上写信并放入...

    wireshark的NAT分析

    ### Wireshark的NAT分析 #### 一、引言 在现代网络环境中,网络地址转换(Network Address Translation,简称NAT)是一项重要的技术,它允许一个或多个私有IP地址在网络边界路由器上被转换为一个公共IP地址,从而...

    为什么wireshark有的地方显示的是乱码报文

    在使用Wireshark的过程中,有时我们可能会遇到显示乱码的情况,这通常是由于以下几个原因导致的: 1. **编码问题**:Wireshark尝试解析数据时,如果不知道正确的字符编码,就可能显示为乱码。例如,网络数据可能...

    Wireshark 4.2.6 arm64 for mac系统 M1/M2/M3芯片专用版本2024最新版

    文件名: Wireshark 4.2.6 Arm 64.dmg 要进行网络数据抓包和分析吗?立即下载Wireshark 4.2.6 Arm 64.dmg安装文件,让您轻松捕获和分析苹果 M1/M2/M3 arm64位架构 设备上的网络流量。Wireshark是一款功能强大的开源...

    wireshark MQTT协议抓取

    Wireshark是一款强大的网络封包分析软件,常用于网络故障排查、网络安全分析和协议学习。在本场景中,我们关注的是使用Wireshark抓取和分析MQTT(Message Queuing Telemetry Transport)协议的数据包。MQTT是一种轻...

Global site tag (gtag.js) - Google Analytics