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()
浙公网安备 33010602011771号