小王,给这2000个客户发一下节日祝福的邮件

小王,给这2000个客户发一下节日祝福的邮件

【阅读全文】
演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。

小王,给这2000个客户发一下节日祝福的邮件

小王,给这2000个客户发一下节日祝福的邮件

将UI处理的相关的界面包导入进来

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

应用操作相关的库
import sys

邮件发送相关的库
import smtplib
from email.mime.text import MIMEText

为了不和邮件发送的UI界面主线程产生冲突,使用QThread子线程的方式制作邮件发送。

class EmailWork(QThread):
    trigger = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(EmailWork, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        email_subject_text = self.parent.email_subject_text.text().strip()
        recipient_text = self.parent.recipient_text.text().strip()
        current_text = self.parent.current_text.toPlainText().strip()

        print(email_subject_text)
        print(recipient_text)
        print(current_text)

        self.trigger.emit("邮件信息读取完成!")

        # 发件人邮箱
        send_email_name = '1342929047@qq.com'
        # 发件人授权码
        passwd = 'fjyjqlzxprzihcii'

        self.trigger.emit(send_email_name)
        self.trigger.emit("发件人信息初始化完成!")
        # 收件人邮箱
        msg_to = recipient_text.split(';')
        self.trigger.emit(recipient_text)
        self.trigger.emit("收件人信息初始化完成!")
        print(msg_to)
        # 设置邮件
        msg = MIMEText(current_text)
        msg['subject'] = email_subject_text
        # 设置发件人
        msg['From'] = '一匹来自北方的狼'
        # 设置收件人
        msg['To'] = ';'.join(msg_to)
        # 连接服务器
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
        self.trigger.emit("服务器连接成功!")
        # 登录邮箱
        smtp.login(send_email_name, passwd)
        self.trigger.emit("邮箱登录成功!")
        # 发送邮件
        smtp.sendmail(send_email_name, msg_to, msg.as_string())
        self.trigger.emit("邮件发送成功!")
        self.finished.emit(True)

下面是主页面的UI布局及信号量的代码块。

class StmpEmail(QWidget):
    def __init__(self):
        super(StmpEmail, self).__init__()
        self.init_ui()

    def init_ui(self):

        self.setWindowTitle('批量邮件工具  公众号:[Python 集中营]')
        self.setWindowIcon(QIcon('邮件.ico'))
        self.setFixedSize(500, 400)

        hbox = QHBoxLayout()
        self.send_btn = QPushButton()
        self.send_btn.setText('发送')
        self.send_btn.clicked.connect(self.send_btn_click)

        self.brower = QTextBrowser()
        self.brower.setFont(QFont('宋体', 8))
        self.brower.setReadOnly(True)
        self.brower.setPlaceholderText('执行进度显示区域...')
        self.brower.ensureCursorVisible()

        hbox.addWidget(self.send_btn)

        self.email_subject_text = QLineEdit()
        self.email_subject_text.setPlaceholderText('请输入主题')

        self.recipient_text = QLineEdit()
        self.recipient_text.setPlaceholderText('请输入收件人,示例:134047@qq.com;092837@163.com')

        self.current_text = QTextEdit()
        self.current_text.setPlaceholderText('请输入邮件正文')

        self.thread_ = EmailWork(self)
        self.thread_.trigger.connect(self.update_log)
        self.thread_.finished.connect(self.finished)

        vbox = QVBoxLayout()

        vbox.addWidget(self.email_subject_text)
        vbox.addWidget(self.recipient_text)
        vbox.addWidget(self.current_text)
        vbox.addWidget(self.brower)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

    def update_log(self, text):
        '''
        槽函数:向文本浏览器中写入内容
        :param text:
        :return:
        '''
        cursor = self.brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.brower.append(text)
        self.brower.setTextCursor(cursor)
        self.brower.ensureCursorVisible()

    def finished(self, finished):
        if finished is True:
            self.send_btn.setEnabled(True)

    def send_btn_click(self):
        self.send_btn.setEnabled(False)
        self.thread_.start()

最后,通过main函数将页面布局加入主体循环即可。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = StmpEmail()
    main.show()
    sys.exit(app.exec_())

以上就是邮件发送的主要代码块了,copy到自己的开发工具中运行即可(前提是你已经安装好了需要的python模块)。
如果您需要下载完整的源代码,请回复公众号中的‘Bulk Mail Tool’获取下载链接。

[En]

If you need to download the complete source code, please reply to the ‘bulk Mail tool’ in the official account to get the download link.

小王,给这2000个客户发一下节日祝福的邮件

【往期精选】

python 一行命令开启网络间的文件共享…

PyQt5 批量删除 Excel 重复数据,多个文件、自定义重复项一键删除…

再见XShell,这款国人开源的终端命令行工具更nice!

python 表情包下载器,轻松下载上万个表情包、斗图不用愁…

Python 自动清理电脑垃圾文件,一键启动即可…

有了jmespath,处理python中的json数据就变成了一种享受…

解锁一个新技能,如何在Python代码中使用表情包…

万能的list列表,python中的堆栈、队列实现全靠它!

该怎么用pyqt5来实现数据的增、删、改、查功能…

介绍一个文字语音神器,几行代码就可以了!

[En]

Introduce a text voice artifact, a few lines of code can be done!

python批量自动整理文件

初学者福利:分享五个免费的 Python 学习网站,抓紧收藏吧!

Original: https://www.cnblogs.com/lwsbc/p/16113978.html
Author: Python集中营
Title: 小王,给这2000个客户发一下节日祝福的邮件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/500070/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Python】Excel操作–panda、matplotlib、Jupyter Notebook

    目录 一、创建Excel文件 二、操作Excel文件 1.往文件里写入数据: 2.读写Excel文件: 3.查看行数和列数: 4.查看表头名: 5.查看”头&#8221…

    Python 2023年8月31日
    0133
  • 上线流程

    上线流程 上线前准备 首先将跑在本地版本的项目,上传至远端(gitee、github上) 重新复制一份项目的配置文件,可以命名为pro.py(dev为开发阶段的配置文件,pro为上…

    Python 2023年10月30日
    093
  • numpy 的transpose是如何实现的

    背景 transpose在深度学习中是很常见的一个操作, numpy和pytorch都有对应的操作, 但是内部是如何实现的呢? stackoverflow上有很相信的说明, 这里搬…

    Python 2023年8月25日
    091
  • AI修复照片

    一、前言 最近闲来无事,翻了翻以前的老照片,看着多年前的老照片,感慨万千,仿佛又回到了以前的青春岁月。只可惜青春易逝,无法重来。意气风发,头角峥嵘的画面只能永远地留存在相片之中了。…

    Python 2023年10月30日
    094
  • 用Python做一个小姐姐跳舞词云视频

    Original: https://www.cnblogs.com/123456feng/p/16076723.htmlAuthor: 蚂蚁ailingTitle: 用Python…

    Python 2023年5月24日
    090
  • FastAPI-Amis-Admin: 一个拥有高性能,高效率,易拓展的fastapi管理后台框架

    项目介绍 FastAPI-Amis-Admin fastapi-amis-admin是一个拥有高性能,高效率,易拓展的fastapi管理后台框架启发自Django-Admin,并且…

    Python 2023年8月6日
    0138
  • Python—-Python字典类型数据通过点‘.’的方式访问

    推荐文章 很多小伙伴都发现了,用户自主「申请上首页」的按钮取消了,那博主们写的文章还有上首页曝光的机会吗?我们的回答是”当然有!!!”虽然我们取消了上首页申…

    Python 2023年5月24日
    0163
  • Python数据可视化大屏最全教程(全)

    阅读本文大约需要3分钟 主要内容:数据分析。 适用人群:Python初学者,数据分析师,或有志从事数据分析工作的人员。 准备软件:Anaconda(Spyder:代码编译)、Nav…

    Python 2023年8月1日
    0144
  • Matplotlib基础绘图

    目录 Matplotlib基础绘图 * 1.pyplot 2.绘图标记 – + marker参数 fmt参数 标记的大小和颜色 3.绘图线 轴标签和标题 Matplot…

    Python 2023年9月3日
    059
  • 基于NumPy的数组重塑与转置

    这次主要是利用Python的:NumPy NumPy是引入了数组;数组是一些相同类型的数据的集合。 这些数据按照一定的顺序排列,每个数据占用大小相同的存储空间 数组的重塑是指更改数…

    Python 2023年8月27日
    066
  • Python——import导入模块

    Python导入第三方库或者使用标准库。 如使用数学函数,import math ,如余弦函数cos,绝对值函数fabs();import numpy as np,解决矩阵数组问题…

    Python 2023年8月26日
    098
  • sklearn 估计器(estimator)接口

    简单介绍了关于sklearn 估计器(estimator)接口的一些用法 sklearn 估计器(estimator)接口的简单介绍 Scikit-learn 努力在为所有方法建立…

    Python 2023年6月3日
    0138
  • python计算斜率以及给定一组点两两求斜率

    1.1 在 Python 中使用 SciPy 模块计算给定线的斜率 from scipy.stats import linregress x = [4, 8] y = [5, 10…

    Python 2023年8月22日
    0145
  • (django)04 django表格

    django model 文章目录 django model * 1.定义数据表 – (1)创建model (2)注册model (3)migrate (4)使用dja…

    Python 2023年8月6日
    078
  • 我的硕士前半生

    本篇文章属于随笔类,它可能无法对你起到直接帮助,它只是我这个普通学生一年半以来的一些足迹与思考。本文首发于我的个人博客 Forever Young 我的本科像硕士,有实验室有工位,…

    Python 2023年11月5日
    081
  • python—全文上下查找

    python—全文上下查找 原创 夕陌2022-07-19 11:24:15©著作权 文章标签 html 导包 参数说明 文章分类 Python 后端开发 ©著作权归作…

    Python 2023年5月25日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球