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 = "[email protected]";//A 
        return new PasswordAuthentication(userName, password);
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("[email protected]"));// B 
        答:A和B 必须统一!

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

我们项目中的B是这样的

new InternetAddress(StringUtil.formatAddress(“小明”, “[email protected]”);
/**
 * 格式化 Name <[email protected]> 的地址
 * @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: "[email protected]"

B:?utf-8?B?5ZKx572R5ZWG5Z+O?= <[email protected]>

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

  new InternetAddress(StringUtil.formatAddress(“[email protected]”);//A和B一样了

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

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

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

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

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

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

时间: 2024-10-25 14:51:36

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

基于JavaMail的Java邮件发送:简单邮件发送

http://blog.csdn.net/xietansheng/article/details/51673073 http://www.cnblogs.com/codeplus/archive/2011/10/30/2229391.html http://blog.csdn.net/ghsau/article/details/17839983 ******************** 电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信

java-基于JavaMail的Java邮件发送

1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

Java邮件发送与屏幕截屏

前几天七夕情人节孤独寂寞的程序猿闲来没事,花了一两个小时写了个小Demo主要实现Java的Mail发送功能和桌面截屏功能. 首先让我们先看看Java sendMail邮件发送和桌面屏幕截屏功能是怎么实现的基础知识. 一.Java  SendMail邮件发送 首先让我们来看看邮件发送的原理图: JavaMail 是一套sun 提供开发邮件收发程序API,JavaMail编写程序就是邮件客户端程序(和outlook.foxmail功能类似) * JavaMail开发需要类库 javamail API

新版本Java邮件发送类

之前曾经做过几个邮件发送类,有兴趣可以查阅前面的帖子. 使用过程中,发现一些不便之处,并作出了改进,将改进后的版本发布如下: 基类及其附属类共三个:(下载地址:http://pan.baidu.com/s/1bn1VkUN) import java.io.File; import java.util.Date; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; impo

Java邮件发送

package com.expai.test; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Session; i

JAVA邮件发送的简单实现

JAVA邮件发送的简单实现 JAVA邮件发送的简单实现 JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注册激活和垃圾邮件的发送等方面. JavaMail可以到http://www.oracle.com/technetwork/java/javamail/index-138643.html进行下载,并将mail.jar添加到classpath即可.

java邮件发送(含附件)

1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面)emailsmtp=smtp.qq.com[email protected]emailpass=******2.读取配置文件的类文件(ReadPropertity.java)import java.io.IOException;import java.util.Properties;publ

邮件发送失败,Sendmail Headers too large

今天遇到一个奇怪问题,用户反馈邮件发送失败.远程查查吧,大小.收件人等等啥的都未超限制.怪了 . ??于是与用户了解发送时间,去邮件系统服务器sendmail日志查,发现关键信息"stat=Headers too large (32768 max)".哈哈,原来是邮件头超了,再查查用户foxmail那封邮件,查查邮件源码,发现源码中 References:字段的内容太多,从14年到18年的信息都有.原来是用户习惯在邮件的基础上点击全部回复,于是一封14年写的邮件,就重复重复再重复,一直

linux外网服务器跳转内网服务器实现内网访问(iptables)

服务器信息如下 外网服务器:eth0:公网IP eth1:内网IP(192.168.10.205) 公网对外提供服务,内网IP与内部局域网通信. 配置过程: (1)开启iptables service iptables restart   (临时开启) chkconfig  iptables on    (永久开启) (2)配置iptables          (2-1)配置filter选项,使得IP和PORT可以通过防火墙 注意:在filter选项下配置 例如:#18081(tomcat-O