提高工作效率——利用Python自动化发送邮箱

本文参考自:显示正文的邮件自动发送,文中有相关的业务背景介绍。
感谢:@楠楠szl

import csv
import smtplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.header import Header
from email import encoders
from email.mime.base import MIMEBase
import pandas as pd



class Auto_send_email(object):
    def __init__(self):
        self.mailserver = ''           # 邮箱服务端URL
        # 不同邮箱的服务器地址可以在邮箱设置中找到
        self.userName_SendMail = ''    # 发件人邮箱/用户名
        self.userName_AuthCode = ''    # 邮箱发件授权码

    def send_email_text(self, subject, message_content, received_mail):
        """自动化发送纯文本形式邮箱

        Attributes: subject:邮件主题
        Attributes:message_content:邮件正文
        Attributes:received_mail: 接收人邮箱列表(传入列表形式可以同时发送多人)
        """
        message_content = message_content
        msg = MIMEText(message_content, 'plain', 'utf-8')
        # 纯文本形式的邮件内容的定义,通过MIMEText进行操作
        # plain代表纯文本
        msg['Subject'] = Header(subject, 'utf-8')          # 定义邮件主题
        msg['From'] = self.userName_SendMail               # 发件人
        msg['To'] = ';'.join(received_mail)
        received_mail = ';'.join(received_mail)
        # smtp=smtplib.SMTP()
        smtp = smtplib.SMTP_SSL(self.mailserver)
        smtp.connect(self.mailserver, 465)
        smtp.login(self.userName_SendMail, self.userName_AuthCode)
        smtp.sendmail(self.userName_SendMail,
                      received_mail, msg.as_string())
        smtp.quit()

    def send_email_file(self, subject, message_content, received_mail, attachment):
        """以附件形式发送至邮箱

        Attributes: subject:邮件主题
        Attributes:message_content:邮件正文(附件说明)
        Attributes:received_mail: 接收人邮箱列表(传入列表形式可以同时发送多人)
        Attributes: attachment: 附件的存储路径,以列表形式给出以便同时发送多个附件
        """
        message_content = message_content
        msg = MIMEMultipart()                              # 纯文本形式的邮件内容的定义,通过MIMEText进行操作
        msg['Subject'] = Header(subject, 'utf-8')          # 定义邮件主题
        msg['From'] = self.userName_SendMail               # 发件人
        msg['To'] = ';'.join(received_mail)
        received_mail = ';'.join(received_mail)
        msg.attach(MIMEText(message_content, 'plain', 'utf-8'))
        for item in range(len(attachment)):
            with open(attachment[item], 'rb') as f:
                # MIMEBase表示附件的对象
                append_file = MIMEBase('application', 'octet-stream')
                # filename是显示附件名字
                append_file.add_header(
                    'Content-Disposition', 'attachment', filename=attachment[item])
                # 获取附件内容
                append_file.set_payload(f.read())
                encoders.encode_base64(append_file)
                # 作为附件添加到邮件
                msg.attach(append_file)
        smtp = smtplib.SMTP_SSL(self.mailserver)
        smtp.connect(self.mailserver, 465)
        smtp.login(self.userName_SendMail, self.userName_AuthCode)
        smtp.sendmail(self.userName_SendMail,
                      received_mail, msg.as_string())
        smtp.quit()

    def file_to_html(self, path):
        """将csv、xlsx文件简单转化为html文本

        Attributes: path:文件存储路径
        """
        if ".xlsx" in path:
            data = pd.read_excel(path, encoding="gbk")
        else:
            data = pd.read_csv(path, encoding="gbk")
        data.to_html("file.html", index=False)
        with open("file.html", 'r', encoding="gbk") as f:
            html_txt = f.read()
        return html_txt

    def send_email_html(self, subject, received_mail, html_txt):
        """以html形式发送至邮箱

        Attributes: subject:邮件主题
        Attributes:message_content:邮件正文(附件说明)
        Attributes:html_txt: html文本
        """
        msg = MIMEMultipart()
        msg['Subject'] = Header(subject, 'utf-8')          # 定义邮件主题
        msg['From'] = self.userName_SendMail               # 发件人
        msg['To'] = ';'.join(received_mail)
        received_mail = ';'.join(received_mail)
        # smtp=smtplib.SMTP()
        msg.attach(MIMEText(html_txt, 'html', 'gbk'))
        smtp = smtplib.SMTP_SSL(self.mailserver)
        smtp.connect(self.mailserver, 465)
        smtp.login(self.userName_SendMail, self.userName_AuthCode)
        smtp.sendmail(self.userName_SendMail,
                      received_mail, msg.as_string())
        smtp.quit()

if __name__=="__main__"
	send_email = Auto_send_email()
	message_content = ""
	received_mail = [""]
	subject = "测试"
	attachment = ["test.csv"]
	send_email.send_email_file(subject, message_content, received_mail, attachment)
	html_txt = send_email.file_to_html("test.csv")
	send_email.send_email_html(subject, received_mail, html_txt)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值