python发送邮件用法-SendEmail类编写

本文介绍了如何使用Python的smtplib库和email模块创建一个SMTP邮件发送类,包括设置邮件头、纯文本内容、HTML内容、图片附件和文件附件。示例代码展示了如何根据Excel数据动态构造邮件内容并发送。
摘要由CSDN通过智能技术生成
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
import pandas as pd


class SendEmail:
    def __init__(self, host="smtp.126.com", username="@126.com", password=""):
        # 连接邮箱服务端
        self.email_con = smtplib.SMTP(host=host, port=25)
        # 登录邮箱
        self.email_con.login(username, password)
        # 创建邮件对象
        self.msg = MIMEMultipart()

    def email_header(self, subject, from_email="@126.com <@126.com>", to_email=[]):
        # 设置主题
        self.msg["Subject"] = Header(subject, "utf-8").encode()
        # 设置邮件发送人
        self.msg["From"] = from_email
        # 设置邮件的接收人
        self.msg["To"] = ";".join(to_email)

    def email_text(self, text):
        # 设置邮件文本内容
        text = MIMEText(text, "plain", "utf-8")
        # 添加邮件内容
        self.msg.attach(text)

    def email_htm(self, html):
        # 设置邮件文本内容
        html = MIMEText(html, "html", "utf-8")
        # 添加邮件内容
        self.msg.attach(html)

    def email_imag(self, filename, image_name):
        with open(filename, "rb") as f:
            image_data = f.read()
            image = MIMEImage(image_data)
            image["Content-Disposition"] = 'attachment; filename="{}"'.format(image_name)
            # 添加邮件内容
            self.msg.attach(image)

    def email_imag_(self, filename):
        with open(filename, "rb") as f:
            image_data = f.read()
            image = MIMEImage(image_data)
            image.add_header("Content-ID", "<img1>")
            # 添加邮件内容
            self.msg.attach(image)
            image_html = """
            <img src='cid:img1'>
            """
            image_html = MIMEText(image_html, "html", "utf-8")
            self.msg.attach(image_html)

    def email_fujian(self, filename, fujian_name):
        with open(filename, "rb") as f:
            file_data = f.read()
            fujian = MIMEText(file_data, "base64", "utf-8")
            fujian["Content-Disposition"] = 'attachment; filename="{}"'.format(fujian_name)
            # 添加邮件内容
            self.msg.attach(fujian)

    def send_email(self, from_email, to_email,  msg):
        self.email_con.sendmail(from_email, to_email, msg.as_string())

    def __del__(self):
        self.email_con.quit()


if __name__ == '__main__':

    df = pd.read_excel("./output.xlsx", sheet_name="Sheet1")
    df.set_index("序号", inplace=True)
    print(df)
    from_email = "@126.com"
    to_email = ["@qq.com", "@126.com"]
    con = SendEmail()
    con.email_header("邮件主题", from_email, to_email)
    msg = con.email_text("测试邮件发送")
    html = f"""
    <h1>我是正文的大标题</h1>
    <p>我是正文段落</p>
    {df.to_html()}
    <img src='https://img1.baidu.com/it/u=1161835547,3275770506&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500'>
    """
    con.email_htm(html)
    # con.email_imag("./meinu.jpg", "meinu.jpg")
    # con.email_imag_("./meinu2.jpg")
    # con.email_fujian("./Windows下安装MySQL详细教程.doc", "fujian.doc")
    con.send_email(from_email, to_email, con.msg)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值