文档章节

试用环境开发环境不发邮件

Mr_Qi
 Mr_Qi
发布于 2017/06/01 14:38
字数 710
阅读 15
收藏 0

对于近期项目出现了奇怪的现象

项目试用环境出现了没有错误邮件的情况。

初期觉着没有问题,恰逢端午过节,认为没有人在开发环境测试导致。

到了发布试用环境也没有错误邮件

最近一封为05-27日。

发布后发现生产环境可以正常收到邮件(很诡异)。

参考了前两次邮件的问题

maven项目引入新依赖问题

slf4j 更新版本导致无日志输出

 

对比后发现没有任何问题。

可以保证的是maven和邮件配置都没有被修改。

注意到一个现象,试用环境在05-27之后再无错误邮件但是确实包含错误日志的。

并且在05-31日才发布,可以确定邮件发不出来应该和代码的变化没有关系,

那么可以比较一下试用环境和生产环境的邮件配置。

<executions>
    <execution>
        <id>replace</id>
        <phase>compile</phase>
        <goals>
            <goal>run</goal>
        </goals>
        <configuration>
            <tasks>
                <echo>
                    process system.properties: set MAIL.To to ${exception.mail.to};
                </echo>
                <replaceregexp file="${basedir}/target/classes/system.properties"
                               match="exception\.mail\.to.*"
                               replace="exception\.mail\.to = ${exception.mail.to}"
                               byline="true"/>
                <echo>
                    process system.properties: set MAIL.Subject to
                    ${exception.mail.subject};
                </echo>
                <replaceregexp file="${basedir}/target/classes/system.properties"
                               match="exception\.mail\.subject.*"
                               replace="exception\.mail\.subject = ${exception.mail.subject}"
                               byline="true"/>
                <echo>
                    process system.properties: set MAIL.Threshold =
                    ${exception.mail.threshold};
                </echo>
                <replaceregexp file="${basedir}/target/classes/system.properties"
                               match="exception\.mail\.threshold.*"
                               replace="exception\.mail\.threshold = ${exception.mail.threshold}"
                               byline="true"/>
 
                <echo>
                    process system.properties: set business.additivity =
                    ${business.additivity};
                </echo>
                <replaceregexp file="${basedir}/target/classes/system.properties"
                               match="business\.additivity.*"
                               replace="business\.additivity = ${business.additivity}"
                               byline="true"/>
 
 
            </tasks>
        </configuration>
    </execution>

发现了唯一的却别在于接受者配置的不一样。

试用环境和开发环境均配置的是个人邮箱而生产环境配置的是邮件列表。

灵光闪现最近有个开发离职,会否是某个开发离职导致他的邮箱无法使用,发送邮件失败?

果然发现

/**
 * Send the contents of the cyclic buffer as an e-mail message.
 */
protected void sendBuffer(CyclicBuffer<E> cb, E lastEventObject) {
 
    // Note: this code already owns the monitor for this
    // appender. This frees us from needing to synchronize on 'cb'.
    try {
        MimeBodyPart part = new MimeBodyPart();
 
        StringBuffer sbuf = new StringBuffer();
 
        String header = layout.getFileHeader();
        if (header != null) {
            sbuf.append(header);
        }
        String presentationHeader = layout.getPresentationHeader();
        if (presentationHeader != null) {
            sbuf.append(presentationHeader);
        }
        fillBuffer(cb, sbuf);
        String presentationFooter = layout.getPresentationFooter();
        if (presentationFooter != null) {
            sbuf.append(presentationFooter);
        }
        String footer = layout.getFileFooter();
        if (footer != null) {
            sbuf.append(footer);
        }
 
        String subjectStr = "Undefined subject";
        if (subjectLayout != null) {
            subjectStr = subjectLayout.doLayout(lastEventObject);
 
            // The subject must not contain new-line characters, which cause
            // an SMTP error (LOGBACK-865). Truncate the string at the first
            // new-line character.
            int newLinePos = (subjectStr != null) ? subjectStr.indexOf('\n') : -1;
            if (newLinePos > -1) {
                subjectStr = subjectStr.substring(0, newLinePos);
            }
        }
 
        MimeMessage mimeMsg = new MimeMessage(session);
 
        if (from != null) {
            mimeMsg.setFrom(getAddress(from));
        } else {
            mimeMsg.setFrom();
        }
 
        mimeMsg.setSubject(subjectStr, charsetEncoding);
 
        List<InternetAddress> destinationAddresses = parseAddress(lastEventObject);
        if (destinationAddresses.isEmpty()) {
            addInfo("Empty destination address. Aborting email transmission");
            return;
        }
 
        InternetAddress[] toAddressArray = destinationAddresses.toArray(EMPTY_IA_ARRAY);
        mimeMsg.setRecipients(Message.RecipientType.TO, toAddressArray);
 
        String contentType = layout.getContentType();
 
        if (ContentTypeUtil.isTextual(contentType)) {
            part.setText(sbuf.toString(), charsetEncoding, ContentTypeUtil.getSubType(contentType));
        } else {
            part.setContent(sbuf.toString(), layout.getContentType());
        }
 
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(part);
        mimeMsg.setContent(mp);
 
        mimeMsg.setSentDate(new Date());
        addInfo("About to send out SMTP message \"" + subjectStr + "\" to " + Arrays.toString(toAddressArray));
        Transport.send(mimeMsg);
    } catch (Exception e) {
        addError("Error occurred while sending e-mail notification.", e);
    }
}

发现报错

javax.mail.SendFailedException: Invalid Addresses; nested exception is:

 

删除掉离职者的邮箱果然可以正常了

© 著作权归作者所有

共有 人打赏支持
Mr_Qi

Mr_Qi

粉丝 273
博文 350
码字总数 359193
作品 0
南京
程序员
构建你的Office 365开发环境 - IOS版

博客地址:http://blog.csdn.net/FoxDave 本文主要介绍在开始创建应用之前,如何构建你的Office 365开发环境去调用Office 365 API。 构建Office 365开发环境包含了三个一次性的工作: 下载开...

justinliu927
04/16
0
0
PostgreSQL命令行工具 - pgcli

简介 pgcli 是针对PostgreSQL的命令行工具,他的特色是对SQL能够语法高亮显示,并且能对输入进行自动提示。(同时,针对MySQL也有一个类似的命令行工具mycli)。 网站: http://pgcli.com/ 授...

YuanyuanL
2015/12/18
634
0
软件项目开发环境构建之二:Confluence5.10.8安装

Confluence是一个非常棒的wiki知识库系统,支持Blog,也支持团队创建项目文档,编辑所见即所得,支持word导入导出,对团队管理有很好的帮助作用。从最初的想法到最终的需求,都能够通过Confl...

newthink
2016/11/03
0
0
linu系统延时任务和定时任务

一、延时任务 在Linux中延时任务是临时的,可以指定某一个任务在将来的特定时间运行 1、at命令 基本操作格式: 2、at执行命令权利设定 /etc/at.deny #用户黑名单,此名单中的用户不能执行at命...

wx59e701214b276
06/27
0
0
IBM 的一些免费软件下载地址大全

IBM 各个品牌(IM、Lotus、WebSphere、Tivoli、Rational)软件产品基本都支持 Linux,都有相应的 Linux 版本。本下载中心为了方便读者找到相应的软件产品 Linux 版,专门将热门软件组织在一起...

红薯
2010/06/22
2.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

一步步编写自己的PHP爬取代理IP项目(二)

这一章节我们正式开展我们的爬虫项目,首先我们先要知道哪个网站能获取到免费代理IP,目前比较火的有西刺代理,快代理等,这里我们拿西刺代理作为例子。 这里就是一个个免费的IP地址以及各自...

NateHuang
28分钟前
1
0
11-利用思维导图梳理JavaSE-Java的反射机制

11-利用思维导图梳理JavaSE-Java的反射机制 主要内容 1.反射与Class类 1.1.反射概念 1.2.Class类 1.3.实例化Class类 1.4.反射的作用 1.5.Class对象的作用 2.反射的深入应用 2.1.调用无参的成...

飞鱼说编程
34分钟前
1
0
How to serve the world from home computer?

最近在开发web应用,很想知道,通过公网来访问,效果会不会好。今天在做家务的时候,突然想到,如果我自己写一个ip转发的工具,不就可以实现了吗?但是转过头一想,这么大众的想法,怎么会没...

pearma
50分钟前
1
0
今天在码云遇到一个很有意思的人 for Per.js

今天在码云遇到一个很有意思的人,他在我的Per.js项目下面评论了一句,大意为“你试试这句代码,看看速度到底是你快还是Vue快”【当然,这个评论被我手残不小心删掉了...】。 然后我就试了,...

Skyogo
今天
50
0
Java -------- 首字母相关排序总结

Java 字符串数组首字母排序 字符串数组按首字母排序:(区分大小写) String[] strings = new String[]{"ba","aa","CC","Ba","DD","ee","dd"}; Arrays.sort(strings); for (int i ...

切切歆语
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部