freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Python 邮件自动化
2022-05-31 21:06:09
所属地 江西省

我们可以使用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.pyconfig.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群发邮件了。

# python # 邮件 # python脚本
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录