为了安全起见,我们发送邮件需要使用tls,这样发送的内容都是加密的了,但是该工具批量发送带有自定义内容的邮件不方便,于是写了一个py脚本,使用--data参数,方便批量发送,我们的策略是每天随机发送150至200个人,具体看公司规模而定。每个邮箱客户端使用的邮件头还不一样,我们测试了用qq邮箱头发给outlook没有问题,由于我们公司默认都是outlook,foxmail没有测,应该问题也不大,有问题增删相关邮件头字段即可。下面是批量发送脚本内容(命名为mail.py):
import time
import sys
import subprocess
#发送的完整邮件内容有2部分组成,一部分是收件人,是可变的,一部分是邮件内容,是不变的,内容使用file_c变量,收件人使用file_f变量,具体看脚本内容
file_c = '''Subject: =?gb2312?B?xxxxxxxdLss6M=?=
#主题等都是gb2312编码后的base64加密
#Thread-Topic: =?gb2312?B?0/Lxxxxxxxxxss6M=?=
Thread-Index: AdT6eO/KxxxxxxxxxxxxxxxxIKA==
Date: {time.ctime()} +0800
#发送邮件是提前发送的模板邮件,所以需要获取当前时间作为发送时间,不然接收的时间会不对
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [x.x.x.x]
Content-Type:xxxxxxxxx;
Return-Path: administrator@xxx.com
xxx内容xxx '''
file = open(f'/usr/local/src/{sys.argv[1]}', 'r')
names = file.readlines()
for name in names:
file_f = f'To: "{name.strip()}" <{name.strip()}>\n'
#print(file_f)
with open('/usr/local/src/file.txt', 'w') as f:
f.writelines(file_f + file_c)
status = subprocess.Popen(['swaks', '--tls', '--data', '/usr/local/src/file.txt', '--to', name.strip(), '--from', 'administrator@xxx.com'], stdout=subprocess.PIPE)
lg = status.stdout.readlines()
print(type(lg))
with open('/usr/local/src/log.txt', 'a+') as g:
for line in lg:
g.write(line.decode())
`
发送对象名单保存在sec.txt中,运行 python mail.py sec.txt 即可。