1. 程式人生 > 其它 >python封裝傳送郵件類

python封裝傳送郵件類

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os


class SendEMail(object):
    """封裝傳送郵件類"""

    def __init__(self, host: str, port: int, user: str, pwd: str):
        self.host = host
        self.port = port
        self.user = user
        self.pwd = pwd

    def __send(self, msg):
        try:
            smtpObj = smtplib.SMTP()
            smtpObj.connect(self.host, self.port)
            smtpObj.login(self.user, self.pwd)
            smtpObj.sendmail(self.user, msg["To"], msg.as_string())
            print("郵件傳送成功")
        except Exception as e:
            print("郵件傳送失敗")

    def send_text(self, to_user: str, content: str, subject: str):
        """
        傳送文字郵件
        :param to_user: 對方郵箱
        :param content: 郵件正文,文字格式
        :param subject: 郵件主題
        :return:
        """

        # 使用email構造郵件
        msg = MIMEText(content, _subtype='plain', _charset="utf8")
        msg["From"] = self.user
        msg["To"] = to_user
        msg["subject"] = subject

        self.__send(msg)

    def send_html(self, to_user: str, content: str, subject: str):
        """
        傳送html格式郵件
        :param to_user: 對方郵箱
        :param content: 郵件正文,html格式
        :param subject: 郵件主題
        :return:
        """
        # 使用email構造郵件
        msg = MIMEText(content, _subtype='html', _charset="utf8")
        msg["From"] = self.user
        msg["To"] = to_user
        msg["subject"] = subject

        self.__send(msg)

    def send_attachment(self, to_user: str, content: str, subject: str, files: list):
        """
        傳送附件郵件
        :param to_user: 對方郵箱
        :param content: 郵件正文,文字格式
        :param subject: 郵件主題
        :return:
        """
        # 建立一個帶附件的例項
        msg = MIMEMultipart()
        msg['From'] = self.user
        msg['To'] = to_user
        msg['subject'] = subject
        # 郵件正文內容
        msg.attach(MIMEText(content, 'plain', 'utf-8'))
        # 構造附件
        for file in files:
            att = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
            att["Content-Type"] = 'application/octet-stream'
            # 這裡的filename可以任意寫,寫什麼名字,郵件中顯示什麼名字
            _, file_name = os.path.split(file)
            att["Content-Disposition"] = 'attachment; filename="{}"'.format(file_name)
            msg.attach(att)
        self.__send(msg)