作者 root

在涉及到邮件功能测试时,由于测试环境比较杂乱,各种有效无效的邮件地址随处可见无法辨别。当我们需要测试发送邮件时,这些无效地址也会被一并放入发送列表,这会发送失败率增加,对于发送域名的信誉是有影响的,同时,如果也会导致一些邮件被错误的发送出去,甚至发送给了实际的用户。

为了方便邮件的测试,我们需要在测试环境中的收件人与生产环境的获取机制是类似的,可以通过相同的方法从数据库或者代码中获取。 在不改动现有代码以及数据库连接机制的情况下, 可以使用私有SMTP服务器往这些邮箱地址发送邮件。

我们可以在测试环境中,假设一个内部的SMTP服务器,在这个环境中存在与生产环境一样的用户邮箱地址结构,并设置登陆私有SMTP服务器的密码。这样我们就可以在私有的邮件服务器上进行各种邮件相关测试和确认,而这个测试的环境是和生产环境完全分离的。

经过一些调研,我们使用xmail来作为测试环境SMTP服务器, 为了方便使用xmail选择在docker中安装.

  • 首先配置Dockerfile构建一个基础的docker镜像
      FROM scratchADD ubuntu-bionic-core-cloudimg-amd64-root.tar.gz /ENV TZ=Asia/Shanghai LANG=en_US.UTF-8RUN useradd -m -s /bin/bash ubuntu && apt-get update && apt-get install -y locales g++ sudo vim make libssl-dev tzdata&&\apt-get autoclean && apt-get clean all&& locale-gen en_US.UTF-8 &&\usermod -aG sudo ubuntu &&\ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneADD sudoers /etc/USER ubuntuWORKDIR /home/ubuntu
  • 开始下载安装包
wget http://www.xmailserver.org/xmail-1.27.tar.gz
tar zxf xmail-1.27.tar.gz
mv xmail-1.27 /var/MailRoot
  • 启动docker开始安装
    sudo docker run -itd --name local-smtp -v /var/MailRoot:/var/MailRoot smtpserver /bin/bashsudo docker attach local-smtpcd /var/MailRootmake -f Makefile.lnxsudo cp xmail /etc/init.d && sudo chmod +x /etc/init.d/xmailshopt -s extglobcp bin/!(*.o) MailRoot/binrm -rf !(MailRoot)mv MailRoot/* .rm -rf MailRoot
  • 提交docker, 并使用新镜像启动docker
     sudo docker commit -m='install xmail' <container-id> smtpserversudo docker run -itd --name local-smtp -p 110:110 -p 25:25 -v /var/MailRoot:/var/MailRoot smtpserver /bin/bash
  • 进入docker 配置xmail
 # xmail 配置文件中均是 <TAB> 分隔cd /var/MailRootsed -i 's/xmailserver.test/example.com/g' server.tab  # 域名配置XMCrypt  password    # 加密 passwordecho -e '"admin"\t"15041616120a1701"' > ctrlaccounts.tab  # 设置管理员账号及密码, 密码是上一步的加密结果sudo /etc/init.d/xmail startCtrlClnt -s localhost -u admin -p password domainadd example.com  # 添加域名sudo /etc/init.d/xmail restartCtrlClnt -s localhost -u admin -p password useradd example.com test01 test01 U # 添加 test 用户CtrlClnt -s localhost -u admin -p password useradd example.com test02 test02 U

可以为这台机器分配一个域名,比如 smtp.example.com。然后使用python的smtplib库发送测试邮件发送,
用户可以使用outlook等邮箱客户端登陆自己的邮箱查看邮件。

一般来说,默认用户只能存储大约十几M的邮件,在xmail中可以修改用户的user.tab中 MailMBSize值来改变这值的大小。

除了xmail这个方案之外,mailslurper这个项目也是很有意思,它可以提供一个本地的SMTP服务器,所有发给这个服务器的信件不是实际发送出去而是保存在一个数据库中,mailslurper提供了一个web界面让开发人员可以检查这些邮件。不过mailslurper目前的开发状态还不是十分完备,比如存在不支持邮件服务器的认证,以及发送附件时会存在bug等等,尚不能完美模拟我们的线上发送需求。


通过xmail构建本地电子邮件测试环境相关推荐

  1. Kali Linux安装dvwa本地shentou测试环境

    本地shentou测试环境 在学习网络安全中,常常没有真实实验环境帮助自己动手提升技术能力,而本地shentou测试环境就为大家带来了便利.本地shentou测试环境:搭建于本地来进行shentou测 ...

  2. 微信搭建本地开发测试环境

    ##准备工作 1.ngrok,微信的接口有一些是被动的接收从微信服务器发送的消息的,所以需要提供一个域名给微信服务器,ngrok可以将本机的指定端口,映射到一个域名.花生壳什么的也可以. 2.微信we ...

  3. Win7 IIS配置本地Https测试环境

    1.在IIS服务器中 生成服务器证书 (创建自签名证书) 2.配置站点允许https 3.bingo

  4. 微信公众号搭建本地测试环境

    原因: 1.由于公司的微信公众号已经在阿里云上运营,如果有任何bug不可能去停掉服务器去调试,这就需要在本地搭建测试环境了. 2.公众号开发涉及到微信的回调,所以你本地搭建的服务器需要外网能够访问,这 ...

  5. .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)...

    Jenkins测试环境到生产环境的一键部署策略(Windows) 一.前言 前面我们已经初步实现了开发集成环境.测试环境的持续集成(自动化构建.自动化测试.自动化部署).但生产环境自动化部署迟迟没有推 ...

  6. Nginx 反向代理实现微信开发完美线上测试环境

    成文时间: 2018-11-29 11:18:10 环境说明 Ubuntu 16.04 LTS Nginx version: nginx/1.10.3 (Ubuntu) PHP 7.1.18 Lara ...

  7. qt5.9.0调试如何查看变量的值_从0开发3D引擎(四):搭建测试环境

    大家好,本文介绍了3D引擎的测试方法,搭建了本地的测试环境. 上一篇博文 wonder-yyc:从0开发3D引擎(三):搭建开发环境​zhuanlan.zhihu.com 下一篇博文 wonder-y ...

  8. selenium===使用docker搭建selenium分布式测试环境

    准备: #请在此之前务必先了解,selenium grid :参考:selenium-grid ,下载地址, win-本地部署过程 >>>环境准备: Linux操作系统 >&g ...

  9. Nginx下配置Https,测试环境的完整过程

    在本地的测试环境中,当我们没有https的证书时,又想使用https,我们该怎么办呢?我们可以在服务器中生成自己的证书,当然这个证书只能是用在测试环境中,因为他们没有经过第三方的认证. 下面是配置的过 ...

最新文章

  1. node sqlite 插入数据_安卓手机中的应用数据都保存在哪些文件中?
  2. 3种mysql的储存机制_MySQL三种InnoDB、MyISAM和MEMORY存储引擎对比
  3. 弹出框的鼠标拖拽事件
  4. 快速排序 python菜鸟教程-十大编程算法助程序员走上高手之路
  5. windows系统禁止更改服务启动类型_Win10系统关闭自动更新方法
  6. 三维球体换算到二维_AutoCAD三维入门,这些硬核干货要知道,看不懂建议备份收藏...
  7. ssh查找linux端口,linux – 查找当前连接的端口号SSH
  8. 【软件架构】软件架构设计常用概念、原则与思想
  9. mysql录入图片数据_mysql插入图片数据
  10. 谷歌 Chrome 同步功能可滥用于 C2 通信及数据提取
  11. 当VS2005卸载不干净时
  12. 杀死系统中的进程kill和killall命令
  13. 谷歌地图TMS地图服务地址收集,测试可用
  14. java FTPSClient 上传下载带证书的ftps服务器
  15. CSS3------ 按钮闪光划过效果
  16. Mac重启Finder的技巧
  17. Python3爬取新浪微博头条
  18. 通俗易懂学Docker
  19. 吴佳怡最新街拍曝光  潮酷girl演绎初秋时尚
  20. redis笔记-常用命令篇(采用与《redis入门指南》)

热门文章

  1. 频繁更新背后,微信究竟在思考什么?
  2. Yep MKdocs编辑器
  3. 可信云最高级认证 百度飞桨企业版BML就是这么飒!
  4. ***cgy学长爱吃糖果***
  5. 层析分析法(AHP)
  6. 通过Shell 脚本向CK集群群分发SQL指令
  7. 一颗璀璨的月光宝石——Lua
  8. LIGO找到首个超越广义相对论的证据?
  9. unity is checking your license authorization - stay tuned
  10. SHP转换为SLPK