python自动发送邮件(理解class的使用)

理解邮件的一个发送流程:首先设置邮箱账户用户名和密码 ——> 连接服务器 ——> 设置邮箱的发件人、收件人、发件主题、邮件内容 ——> 发送

***这里模拟的是qq邮箱发送邮件***

引入模块:smtplib,email,time

连接服务器需要用到smtplib库,SMTP代表简单邮件传输协议,相当于一种计算机之间发邮件的约定

email模块主要是用来配置邮件的各种信息(收发件人、内容、主题等)

time主要是为了实现获取当前的发件时间

1.导入python库:

点击查看代码
# 首先导入模块
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
import time

2.登录邮箱服务器:

点击查看代码
# 接着配置你的邮箱信息
mailHost = "smtp.qq.com"
mailUser = ""  # 填入你的qq号
mailPassWord = ""  # 这里是qq邮箱授权码

serve = smtplib.SMTP(mailHost)  # 调用服务器
serve.login(mailUser, mailPassWord)  # 登录你的服务器

3.获取当前时间:

点击查看代码
# 获取当前日期
strtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())

4.配置邮箱的内容:

点击查看代码
# 配置发送人和收件人信息
sender = ""  # 填入你的邮箱号码,一般用于发件人
receivers = ['', '','']  # 收送人邮箱,列表内字符串格式

# 配置邮件内容
mailMessage = MIMEText(f"这是一封测试python自动发送邮件的内容~~~\n日期是:{strtime}\n***此时间代表发件时间!", "plain", "utf-8")  # 邮件内容
# 发件人名称,qq邮箱一般都是代发,所以发件人可以填发件人,没有什么实际作用
mailMessage['from'] = formataddr((Header("发件人", "utf-8").encode(), sender))
# 收件人名称
addressee = formataddr((Header("收件1", "utf-8").encode(), receivers[0]))
addressee_2 = formataddr((Header("收件2", "utf-8").encode(), receivers[1]))
addressee_3 = formataddr((Header("收件3", "utf-8").encode(), receivers[2]))
# 把所有的收件人放在列表里遍历
addresseeList = [addressee, addressee_2,addressee_3]
for all_addressee in addresseeList:
    mailMessage['to'] = all_addressee
mailMessage['subject'] = Header("自动发送邮件", "utf-8")  # 邮件主题

5.调用服务器进行邮件发送:

点击查看代码
# 发送邮件
try:
    serve.sendmail(sender, receivers, mailMessage.as_string())  # 调用发件邮箱,收件邮箱
    # 发送的内容
    print("发送成功")
except:
    print("Error: 无法发送邮件")

**以下是对整串代码的封装(略有不同,自行修改即可):**

点击查看代码
# 首先导入模块
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr


class SendEmail():
    def __init__(self):
        # 接着配置你的邮箱信息
        self.mailHost = "smtp.qq.com"
        self.mailUser = ""  # 填入你的qq号
        self.mailPassWord = ""  # 填入你的qq密码就会报错,记住这里是授权码

    def send_email(self):
        # 配置发送人和收件人信息
        sender = ""  # 填入你的邮箱号码,一般是指发件人
        receivers = ['', '', '']  # 收送人邮箱

        # 配置邮件内容
        mailMessage = MIMEText("这是一封测试python自动发送邮件的内容~~~", "plain", "utf-8")

        # 发件人名称,qq邮箱一般都是代发,所以发件人可以填发件人,没有什么实际作用
        mailMessage['from'] = formataddr((Header("", "utf-8").encode(), sender))

        # 收件人名称
        addressee_0 = formataddr((Header("", "utf-8").encode(), receivers[0]))
        addressee_1 = formataddr((Header("", "utf-8").encode(), receivers[1]))
        addressee_2 = formataddr((Header("", "utf-8").encode(), receivers[2]))

        # 把所有的收件人放在列表里,遍历发送
        addressee = [addressee_0, addressee_1, addressee_2]
        for all_addressee in addressee:
            mailMessage['to'] = all_addressee
        mailMessage['subject'] = Header("自动发送邮件", "utf-8")  # 邮件主题
        print(mailMessage)

        # 发送邮件
        try:
            serve = smtplib.SMTP(self.mailHost)  # 调用服务器
            serve.login(self.mailUser, self.mailPassWord)  # 登录你的服务器
            serve.sendmail(sender, receivers, mailMessage.as_string())  # 调用发件邮箱,收件邮箱
            # 发送的内容
            print("发送成功")
        except:
            print("Error: 无法发送邮件")


if __name__ == '__main__':
    tom = SendEmail()
    tom.send_email()
posted @ 2022-08-26 17:09  太阳起了我也起  阅读(123)  评论(0)    收藏  举报