java:邮件发送失败总结(只是外网服务器有问题)-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

java:邮件发送失败总结(只是外网服务器有问题)

简介:

案例一:

    运行环境比较

    1、本地用同样的代码、系统环境及发邮件的帐号是没有问题的;

    2、外网其它服务器项目使用相同技术也没有问题;

    问题现象

    邮件模板中某链接(如:“http://www.baidu.com/...”)在邮箱发送后自动执行了,导致其它业务出错。

    处理方式

    1、处理前:“http://www.baidu.com/...”这部分字符串是在发邮件时整个填充到邮件模板中某个变量;   

    2、处理后:“http://”固定在邮件模板中,“www.baidu.com/...”这部分会变化就仍然用程序填充至模板;

   处理结果

   问题已解决,邮件中的链接不再自动执行。


案例二:

    运行环境比较

    1、本地用同样的代码、系统环境及发邮件的帐号也是没有问题的;

    问题现象

    发邮件报错如下:

     com.sun.mail.smtp.SMTPSendFailedException: 553 Envolope sender mismatch with login user.

    处理方式

    根据网上搜索的资料,说是发邮件的username 和 发送地址不匹配,具体如下:

    :553 Envolope sender mismatch with login user.-->553年Envolope发送方与登录用户不匹配。
        Session session = Session.getInstance(props, new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
        String userName = "ceshi@sina.com";//A 
        return new PasswordAuthentication(userName, password);
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("wowo3129@sina.com"));// B 
        答:A和B 必须统一!

    所以我认真检查了下,发现我们项目的用法确实有点不一样,不过应该也是正确的呀。

我们项目中的B是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
new InternetAddress(StringUtil.formatAddress(“小明”, “ceshi@sina.com”);
/**
 * 格式化 Name <email@address.com> 的地址
 * @param name 名字
 * @param email Email地址
 * @return 格式化的地址
 */
public static String formatAddress(String name, String email) {
    if (StringHelper.isEmpty(name)) {
        return email;
    }
    try {//"%1$s <%2$s>"
    return String.format("%1$s <%2$s>", MimeUtility.encodeText(name,"utf-8""B"), email);
    catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return email;
}

   对比下:

   A: "ceshi@sina.com"

      B:?utf-8?B?5ZKx572R5ZWG5Z+O?= <ceshi@sina.com>

      于是我就改为下面这个样子:

1
  new InternetAddress(StringUtil.formatAddress(“ceshi@sina.com”);//A和B一样了

   传外网、重启服务器,测试下还真没问题了,只不是发件人不能显示中文名“小明”而是默认的“ceshi”.

  

   一是这样发件人不好看;二是我觉得应该不是这个问题,因为本地也是同样的配置但没问题啊!

  

   感觉还是服务器自身的问题,于是我又把代码改回去,重启服务器,再测试,哎~~~~~~~~

  

   坑啊~~邮件发送成功了。也就是说其实我只需要重启下服务器就好了!!!

  

   可是为什么呢?哎~~ 这种事很难解释,但时常会遇到!!

  

   那么长个记性,下次遇到本地测试机没问题,却偏偏外网服务器突然就出问题了,并且之前还好好的;那么兄台,这个时候先不管三七二十一,先重启下试试吧!省得白忙活了不是~~










本文转自 艺晨光 51CTO博客,原文链接:http://blog.51cto.com/ycgit/1656122,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: