吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1793|回复: 11
收起左侧

[Python 原创] python 多线程批量发送邮件,csv读取发送账号,支持图片附件

[复制链接]
pusonglin 发表于 2023-8-22 16:26
本帖最后由 苏紫方璇 于 2023-8-28 00:55 编辑

[Python] 纯文本查看 复制代码
import smtplib
import csv
import threading
import argparse
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

def send_email(sender_email, sender_password, receiver_email):
    # 与SMTP服务器建立连接
    smtp_server = 'smtp.qq.com'
    server_port = 587
    server = smtplib.SMTP(smtp_server, server_port)
    server.starttls()

    try:
        # 登录邮箱账号
        server.login(sender_email, sender_password)
        # 构造邮件内容
        msg_root = MIMEMultipart('related')
        msg_root['Subject'] = '测试一下'
        msg_root['From'] = sender_email
        msg_root['To'] = receiver_email

        subject = '测试一下111111'
        message = '''
        <html>
          <body>
            <p><img src="cid:image1" alt="升学教育图片" style="width:300px;height:200px;"></p>
            <p>班上新来一位学生,名字叫“马騳骉”。</p>
            <p>开学点名了,班主任不知怎么念,就说 : 马叉叉到了没?</p>
            <p>语文老师有点文学素养,点名道:万马奔腾到了没?</p>
            
          </body>
        </html>
        '''
        # 添加文本内容
        html_part = MIMEText(message, 'html')
        msg_root.attach(html_part)

        # 添加图片附件
        with open('F:/data/png/pexels-max-andrey-1366630.jpg', 'rb') as image_file:
            image_part = MIMEImage(image_file.read())
            image_part.add_header('Content-Disposition', 'attachment; filename=1366630.jpg')
            image_part.add_header('Content-ID', '<image1>')
            msg_root.attach(image_part)

        # 添加附件#
        with open('F:/data/Jmeter弱网测试.pdf', 'rb') as file:
            attachment_part = MIMEApplication(file.read(), Name='弱网测试.pdf')
            attachment_part.add_header('Content-Disposition', 'attachment; filename=弱网测试.pdf')
            msg_root.attach(attachment_part)

        # 发送邮件
        server.sendmail(sender_email, receiver_email, msg_root.as_string())
        print(f"邮件发送成功: {receiver_email}")
    except smtplib.SMTPException as e:
        print(f"邮件发送失败: {receiver_email},错误信息: {str(e)}")

    # 关闭连接
    server.quit()

def send_emails(sender_email, sender_password, thread_count):
    # 读取CSV文件并获取收件人邮箱列表
    receiver_emails = []
    with open('E:/pythonProject/test/file/email.csv', 'r') as file:
        reader = csv.reader(file)
        for row in reader:
            receiver_emails.append(row[0])

    # 创建线程列表
    threads = []

    # 创建发送邮件的函数
    def send_email_thread(receiver_email):
        send_email(sender_email, sender_password, receiver_email)

    # 创建并启动发送邮件的线程
    for receiver_email in receiver_emails:
        t = threading.Thread(target=send_email_thread, args=(receiver_email,))
        threads.append(t)
        t.start()

        # 控制最大线程数
        if len(threads) >= thread_count:
            for thread in threads:
                thread.join()
            threads = []

    # 等待剩余线程完成
    for thread in threads:
        thread.join()

def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='发送邮件')
    parser.add_argument('-s', '--sender-email', required=True, help='发件人邮箱')
    parser.add_argument('-p', '--sender-password', required=True, help='发件人密码')
    parser.add_argument('-t', '--thread-count', default=5, type=int, help='发送线程数')
    args = parser.parse_args()

    # 调用发送邮件函数
    send_emails(args.sender_email, args.sender_password, args.thread_count)

if __name__ == '__main__':
    main()



PowerShell:python test_email.py -s xxxx@qq.com -p xxxxxxybbbc -t 1

收到的邮箱

收到的邮箱

运行脚本命令:python 002.py -s xxxxx6@qq.com -p xxxxxxx -t 1

运行脚本命令:python 002.py -s xxxxx6@qq.com -p  xxxxxxx  -t 1
image.png

免费评分

参与人数 2吾爱币 +5 热心值 +2 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
pj2016 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2023-8-28 00:42
推荐使用下面的方法粘贴代码
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)
nukhuang 发表于 2023-8-22 19:13
ydydq 发表于 2023-8-22 19:47
头像被屏蔽
moruye 发表于 2023-8-22 21:43
提示: 作者被禁止或删除 内容自动屏蔽
wan456 发表于 2023-8-22 23:13
stmp需要邮箱开通并获取我一次性密,码吗
wzyzhuce 发表于 2023-8-23 08:29
很详细,具有实用参考价值。
 楼主| pusonglin 发表于 2023-8-23 15:37
wan456 发表于 2023-8-22 23:13
stmp需要邮箱开通并获取我一次性密,码吗

需要,密码就是POP3/SMTP生成的授权码。不是登录密码哦
Hai12138 发表于 2023-9-7 22:27
学习一下,感谢分享!
tb633495121 发表于 2023-9-13 12:00
老哥这个代码还能优化吗?我很需要,可以聊聊吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表