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,如需转载请自行联系原作者
目录
相关文章
|
28天前
|
Java
使用java底层实现邮件的发送(含测试,源码)
使用java底层实现邮件的发送(含测试,源码)
9 0
|
24天前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
43 2
|
28天前
|
Java 数据安全/隐私保护 Windows
java实现邮件发送准备工作(前期配置)
java实现邮件发送准备工作(前期配置)
7 0
|
1月前
|
存储 网络协议 安全
如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!
如何搭建外网可访问的Serv-U FTP服务器,轻松远程共享文件!
|
1月前
|
数据安全/隐私保护 Windows
Windows Server 2003 搭建邮件服务器实现自建邮箱域名及账户并连接外网
Windows Server 2003 搭建邮件服务器实现自建邮箱域名及账户并连接外网
27 0
|
2月前
|
Java
java上传、下载、预览、删除ftp服务器上的文件
java上传、下载、预览、删除ftp服务器上的文件
|
2月前
|
移动开发 编解码 网络协议
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
用Java的BIO和NIO、Netty来实现HTTP服务器(三) 用Netty实现
|
2月前
|
网络协议 Java Linux
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
用Java来实现BIO和NIO模型的HTTP服务器(二) NIO的实现
|
2月前
|
编解码 网络协议 Java
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
|
2月前
|
Java Linux 网络安全
vscode 远程服务器 java 无法跳转
【2月更文挑战第4天】