博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java发邮件eclipse中测试没问题,部署到tomcat上收到的是乱码问题排查
阅读量:4038 次
发布时间:2019-05-24

本文共 2568 字,大约阅读时间需要 8 分钟。

最近项目上有个需求是要求对业务错误信息进行发邮件,故而开发了个发邮件的功能。这个功能很简单,网上也有很多代码。我这里贴一下我的发邮件方法:

 

public static void sendMailByAliyunNew(String subject, String content){    try {        String receivers = "收件人邮箱";// 收件人,多个用逗号隔开        //设置SSL连接、邮件环境        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";        Properties props = System.getProperties();        props.setProperty("mail.transport.protocol", "SMTP");        props.setProperty("mail.smtp.host", "smtp.mxhichina.com");//阿里云邮箱固定的host        props.setProperty("mail.smtp.auth", "true");        props.put("mail.smtp.ssl.enable", "true");        MailSSLSocketFactory sf = new MailSSLSocketFactory();        sf.setTrustAllHosts(true);        props.put("mail.smtp.ssl.socketFactory", sf);        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);        props.setProperty("mail.smtp.socketFactory.fallback", "false");        props.setProperty("mail.smtp.port", "465");//阿里云邮箱25服务端口默认禁用,所以使用ssl的465端口        props.setProperty("mail.smtp.socketFactory.port", "465");        //建立邮件会话        Session session = Session.getDefaultInstance(props, new Authenticator() {            //身份认证            protected PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication("发件人邮箱", "密码");//需要是阿里云邮箱            }        });        session.setDebug(true);        //建立邮件对象        MimeMessage message = new MimeMessage(session);        //设置邮件的发件人、收件人、主题        //附带发件人名字        message.setFrom(new InternetAddress("发件人邮箱"));        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receivers));        message.setSubject(subject,"UTF-8");        message.setContent(content, "text/html;charset=UTF-8");        message.setSentDate(new Date());        Transport.send(message);        System.out.println("邮件发送成功");    } catch (Exception e) {        e.printStackTrace();    }}

先说一下我遇到的问题,我用的阿里云企业邮箱服务进行发邮件的,以上方法,在本地用main方法执行完全没问题,收到的邮件也没有乱码,但是部署到tomcat之后,收到的邮件是这样的,如图所示,没有主题,内容是看似乱码的东西(实际是base64编码后的)。

遇到此问题,排查了一天多,一直纠结在编码格式不对,转码问题上,也一直在尝试修改发邮件的方法,但是都不起效。后来想了下,为什么本地可以,tomcat不可以,一定是环境问题,跟环境有关的也就是jar包和字符集了,后来修改了tomcat字符集依旧不管事,最后排查lib的时候,发现工程的lib里面有geronimo相关的包,其中有个geronimo-javamail_1.4_spec-1.2.jar,这个包跟

javax.mail的jar包冲突,而且这个是geronimo发邮件的一个包,没有啥用,故而删掉这个jar包,然后重启tomcat,邮件发送正常。这也就解释了为啥本地可以但是tomcat不行了,本地执行的时候直接调用javax.mail包的内容,没有任何问题; 但是部署到tomcat后,jvm执行的时候,因为jar包冲突,使用了geronimo-javamail_1.4_spec-1.2.jar的内容,导致转码有问题,导致邮件发送内容有问题。

在此希望对大家有所帮助,在此需要注意,阿里云邮箱服务器禁用25端口,所以不能使用25端口进行发邮件,只能使用加密的465端口进行发邮件。

 

 

转载地址:http://qmcdi.baihongyu.com/

你可能感兴趣的文章
FreeMarker基础配置
查看>>
Java中使用Jedis操作Redis
查看>>
Redis中常用命令
查看>>
spring下载
查看>>
读取request流
查看>>
微信消息模板的配置
查看>>
Spring框架结合Quartz实现任务调度实例
查看>>
Quartz Cron表达式 在线生成器
查看>>
struts2中action接收参数的3种方法
查看>>
java获取随机数
查看>>
url中传递中文参数时的转码与解码
查看>>
百度Ueditor设置允许上传的图片格式及大小
查看>>
java图形验证码生成工具类及web页面校验验证码
查看>>
微信菜单的配置
查看>>
移动端的emoji表情符号插入MySQL数据库失败
查看>>
mysql对指定列进行排名
查看>>
Eclipse安装FindBugs插件
查看>>
联想T440怎么把原装Win8或Win10换成Win7系统
查看>>
PowerDesigner将物理数据模型图生成图片
查看>>
PowerDesigner创建物理数据模型(PDM)
查看>>