文档章节

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

Mr_Qi
 Mr_Qi
发布于 2017/06/01 14:38
字数 710
阅读 19
收藏 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

粉丝 280
博文 359
码字总数 369228
作品 0
南京
程序员
私信 提问
PostgreSQL命令行工具 - pgcli

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

YuanyuanL
2015/12/18
634
0
构建你的Office 365开发环境 - IOS版

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

justinliu927
2018/04/16
0
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
2018/06/27
0
0
免费VPS,Nitrous.io 抢鲜试用

https://www.nitrous.io/join/uG7jwnQXblY Nitrous.io是一个提供在线编程测试的云服务提供商。作为一整套的服务,Nitrous.io的免费方案包括了一个拥有“384Mb”内存,“750Mb”磁盘空间的“B...

pure
2013/10/25
10
1

没有更多内容

加载失败,请刷新页面

加载更多

mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
21分钟前
2
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
39分钟前
2
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
39分钟前
1
0
oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
53分钟前
1
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部