通过xmail构建本地电子邮件测试环境
作者 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构建本地电子邮件测试环境相关推荐
- Kali Linux安装dvwa本地shentou测试环境
本地shentou测试环境 在学习网络安全中,常常没有真实实验环境帮助自己动手提升技术能力,而本地shentou测试环境就为大家带来了便利.本地shentou测试环境:搭建于本地来进行shentou测 ...
- 微信搭建本地开发测试环境
##准备工作 1.ngrok,微信的接口有一些是被动的接收从微信服务器发送的消息的,所以需要提供一个域名给微信服务器,ngrok可以将本机的指定端口,映射到一个域名.花生壳什么的也可以. 2.微信we ...
- Win7 IIS配置本地Https测试环境
1.在IIS服务器中 生成服务器证书 (创建自签名证书) 2.配置站点允许https 3.bingo
- 微信公众号搭建本地测试环境
原因: 1.由于公司的微信公众号已经在阿里云上运营,如果有任何bug不可能去停掉服务器去调试,这就需要在本地搭建测试环境了. 2.公众号开发涉及到微信的回调,所以你本地搭建的服务器需要外网能够访问,这 ...
- .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)...
Jenkins测试环境到生产环境的一键部署策略(Windows) 一.前言 前面我们已经初步实现了开发集成环境.测试环境的持续集成(自动化构建.自动化测试.自动化部署).但生产环境自动化部署迟迟没有推 ...
- Nginx 反向代理实现微信开发完美线上测试环境
成文时间: 2018-11-29 11:18:10 环境说明 Ubuntu 16.04 LTS Nginx version: nginx/1.10.3 (Ubuntu) PHP 7.1.18 Lara ...
- qt5.9.0调试如何查看变量的值_从0开发3D引擎(四):搭建测试环境
大家好,本文介绍了3D引擎的测试方法,搭建了本地的测试环境. 上一篇博文 wonder-yyc:从0开发3D引擎(三):搭建开发环境zhuanlan.zhihu.com 下一篇博文 wonder-y ...
- selenium===使用docker搭建selenium分布式测试环境
准备: #请在此之前务必先了解,selenium grid :参考:selenium-grid ,下载地址, win-本地部署过程 >>>环境准备: Linux操作系统 >&g ...
- Nginx下配置Https,测试环境的完整过程
在本地的测试环境中,当我们没有https的证书时,又想使用https,我们该怎么办呢?我们可以在服务器中生成自己的证书,当然这个证书只能是用在测试环境中,因为他们没有经过第三方的认证. 下面是配置的过 ...
最新文章
- 2021年大数据Hive(二):Hive的三种安装模式和MySQL搭配使用
- redis php数据插入失败,redis插入数据,恢复数据测试(禁止淘汰策略下恢复大于redis内存限制数据情况)...
- Web前端到底需要学什么?应该怎么学?
- 密码强度测试工具包【Java】_测试用例
- GCD LCM UVA - 11388 (思维。。水题)
- 爬虫入门五(Phantomjs和selenium)
- Java中equals()方法和==的区别分析
- c++ socket线程池_Netty(3)——Reactor线程模型
- 完整的CJK Unicode范围(5.0版)
- c语言编程 设计密码锁,单片机控制安全密码锁的设计(附程序,pcb,原理图)
- 米家扫地机器人尘盒怎么取_如何清理小米扫地机器人尘盒及滤网
- 浏览器闪退问题解决汇总(需配合360)
- 操作系统:手把手带你扫盲 操作系统 的那些必知必会!
- vc2010下调用miniblink控件实现浏览器简单实例
- 详细前端面试题javascript篇--持续更新
- 传输层---TCP协议
- 鼠标经过——图片放大效果
- 最新App、手机网站尺寸规范—移动设备界面UI设计尺寸规范
- win7internet信息服务器安装,Win7如何安装启用Internet信息服务(IIS)管理器
- Cookie.setSecure(true)解释