Python 邮件自动化
我们可以使用Python群发给我们想要的任意数量的人,发送任意多次,而无需手动填写 100 封邮件。
可以使用smtplib
标准python
库来完成。使用Simple Mail Transfer Protocol
协议发送邮件(SMTP)
需要准备:
Python 3.7+
支持
SMTP
的邮箱帐户邮件收件人列表
PS:该程序在当前状态下并不安全,密码以纯文本形式存储。这是为了简单起见,请根据您自己的需要调整程序。
设置
创建一个client.py
文件,然后导入我们需要的东西
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.base import MIMEBase
from email import encoders
import config
创建一个config.py
文件,这是为了简化程序的使用,而不是通过大量代码来更改简单的东西。
确保client.py
与config.py
在同一目录中,并使用自己的信息替换相关内容:
smtp_addr = 'smtp.gmail.com'
smtp_port = 587
attachments = [
'important.pdf',
'cat.png',
'/opt/opt_cat.jpeg',
]
which_sender_to_use = 0
senders = {
'user@gmail.com':'PASSWORD',
'user1@gmail.com':'PASSWORD',
}
receivers = {
'user@protonmail.com':'User',
'zhangsan@gmail.com':'张三',
'lisi@outlook.com':'李四',
}
这里Gmail使用的是587端口
使用 SMTP
现在我们有了一个可以使用的基本模型了,回到client.py。
smtp_client = smtplib.SMTP(config.smtp_addr, config.smtp_port)
# smtp_client.set_debuglevel(True)
smtp_client.ehlo()
smtp_client.starttls()
smtp_client.ehlo()
username = list(config.senders.keys())[config.which_sender_to_use]
password = config.senders[username]
smtp_client.login(username, password)
不出意外的话,我们现在将在 TLS 加密下登录我们的邮箱帐户。如果收到身份验证错误并且正在使用 Gmail,请确保已启用安全性较低的应用程序(Google 将所有不在浏览器内的登录尝试归类为不安全,并默认阻止。)
创建电子邮件
我们现在可以使用 SMTP 发送电子邮件。
让我们在client.py
中编写一个消息创建函数。
def makeEmailMessage(receiver_name, receiver, subject, attachments=None, extra=''):
body = f"""Hi {receiver_name},
{extra}"""
msg = MIMEMultipart()
msg['From'] = username
msg['To'] = formataddr((receiver_name, receiver))
msg['Subject'] = subject
body = MIMEText(body)
msg.attach(body)
if attachments is None:
attachments = []
for file in attachments:
attach_file = open(file, 'rb')
email_file = MIMEBase('application', 'octate-stream')
email_file.set_payload((attach_file).read())
encoders.encode_base64(email_file)
email_file.add_header('Content-Disposition', 'attachment', filename=file)
msg.attach(email_file)
return msg
群发邮件
现在我们可以开始向我们的收件人字典config.py
中的每个人发送垃圾邮件,这里使用的是for循环,如果发送的邮件内容完全相同的话可以使用其他方法,可参考StackOverflow中的这篇文章
继续编写client.py
的代码
def genNuclearLaunchCodes(n):
return ("6E 75 6B 65 21" * n)
iteration = 1
for receiver in config.receivers:
msg = makeEmailMessage(config.receivers[receiver], receiver, 'SUBJECT HERE', config.attachments, genNuclearLaunchCodes(iteration))
smtp_client.send_message(msg, username, receiver)
print(f'{iteration}: email sent to {receiver} from {username}')
iteration += 1
在config.py
中添加正确的数据,然后就可以运行client.py
群发邮件了。
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录