Python自动发邮件

使用python实现自动发送邮件,可以让部分发邮件的繁琐事情减少,留出更多的时间专注于其他事情。

1、导入库

import smtplib
from email.mime.multipart import MIMEMultipart  # 多形式组合,可包含文本和组合
from email.mime.text import MIMEText  # 纯文本,HTML页面
from email.mime.application import MIMEApplication
from email.mime.image import MIMEImage  # 图片
from email.header import Header  # 邮件头
from email.utils import parseaddr, formataddr

2、设置邮箱、发件人、收件人、密码或授权码、邮件主题

mail_host = "smtp.yyds.com"  # SMTP服务器,使用自己搭建ewomail测试服务器
mail_sender = "listmail@yyds.com"  # 发件人邮箱
mail_passwd = "12345678"  # 邮箱密码
mail_receivers = ["nidayezhongjiushinidaye@yyds.com"]  # 收件人邮箱
mail_duplicate = ["listmail@oppo.com"]  # 抄送人邮箱
mail_subject = """python测试邮件"""  # 邮件主题

3、构建MIMEMultipart对象,可以添加文本、图片、附件(这里使用文本)和设置邮件的头部内容

"""构造邮件内容"""
mes = MIMEMultipart()  # 内容接收池
# subject_content = """python测试邮件"""  # 邮件主题
mes["From"] = "Python<listmail@yyds.com>"  # 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
mes["To"] = "test<nidayezhongjiushinidaye@yyds.com>"  # 设置接收者,注意严格遵守格式,里面邮箱为接收者邮箱,多个用“,”号
mes["Subject"] = Header(mail_subject, 'utf-8')  # 设置邮件主题

4、输入正文内容

body_content = """你好,这是一个测试邮件!"""  # 邮件正文内容,文本或html等
message_text = MIMEText(body_content, "plain","utf-8")  # 构造内容,参数1:正文内容,参数2:文本的格式,参数3:编码的方式
mes.attach(message_text)  # 向MIMEMultipart对象中添加文本对象

5、发送邮件

stp = smtplib.SMTP()  # 创建SMTP对象
stp.connect(mail_host, 25)  # 设置发件人邮箱的域名和端口,端口地址为25
stp.set_debuglevel(1)  # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
stp.login(mail_sender, mail_passwd)  # 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码或密码
stp.sendmail(mail_sender, mail_receivers + mail_duplicate, mes.as_string())  # 发送邮件,传递参数1:发件人邮箱,参数2:收件人邮箱 + 抄送人邮箱,参数3:把邮件内容格式改为str
print("邮件发送成功")
stp.quit()  # 关闭SMTP对象

自动发邮箱的类

# coding=utf-8
import smtplib
from email.mime.multipart import MIMEMultipart  # 多形式组合,可包含文本和组合
from email.mime.text import MIMEText  # 纯文本,HTML页面
from email.mime.application import MIMEApplication
from email.mime.image import MIMEImage  # 图片
from email.header import Header  # 邮件头
from email.utils import parseaddr, formataddr


class MailSender:
    def __init__(self, username, passwd, receivers, subject="Python测试主题"):
        """初始化信息"""
        self.mail_host = "smtp.yyds.com"  # SMTP服务器,使用自己搭建ewomail测试服务器
        self.mail_sender = username  # 发件人邮箱
        self.mail_passwd = passwd  # 邮箱密码
        self.mail_receivers = receivers  # 收件人邮箱
        # self.mail_duplicate = [duplicate]  # 抄送人邮箱
        self.mail_subject = subject  # "python测试邮件"  # 邮件主题

    def message_init(self,From,To):
        """构造邮件内容"""
        mes = MIMEMultipart()  # 内容接收池
        # subject_content = """python测试邮件"""  # 邮件主题
        mes["From"] = From # "Python<listmail@yyds.com>"  # 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
        mes["To"] = To # "test<test@yyds.com>,你大爷终究是你大爷<nidayezhongjiushinidaye@yyds.com>"  # 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
        mes["Subject"] = Header(self.mail_subject, 'utf-8')  # 设置邮件主题

        body_content = """你好,这是一个测试邮件!"""  # 邮件正文内容
        message_text = MIMEText(body_content, "plain","utf-8")  # 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
        mes.attach(message_text)  # 向MIMEMultipart对象中添加文本对象
        return mes

    def send_mail(self, mes):
        stp = smtplib.SMTP()  # 创建SMTP对象
        stp.connect(self.mail_host, 25)  # 设置发件人邮箱的域名和端口,端口地址为25
        stp.set_debuglevel(1)  # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
        stp.login(self.mail_sender, self.mail_passwd)  # 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码或密码
        stp.sendmail(self.mail_sender, self.mail_receivers , mes.as_string())  # 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
        print("邮件发送成功")
        stp.quit()  # 关闭SMTP对象


if __name__ == "__main__":
    receivers_list = "nidayezhongjiushinidaye@yyds.com", "test@yyds.com"
    send = MailSender("listmail@yyds.com", "12345678", receivers_list)
    message = send.message_init("测试Python<listmail@yyds.com>","test<test@yyds.com>,你大爷终究是你大爷<nidayezhongjiushinidaye@yyds.com>")
    send.send_mail(message)

脚本字段对应邮件的内容
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值