python3发送邮件的脚本

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.image import MIMEImage
from email.utils import parseaddr, formataddr
import smtplib
import os


class Sendemail:

    def __init__(self):
        self.__sender = ''
        self.subject = ''
        self.smtp_server = ''
        self.recipients = []
        self.message = ''
        self.Cc = ''
        self.msg = MIMEMultipart('alternative')
        self.attachment_id = 0

    def server(self, smtp_ipaddress, smtp_port=25):
        self.smtp_server = smtplib.SMTP(smtp_ipaddress, smtp_port)

    def login(self, sender, password):
        """
        :param sender: str
        :param password: str
        :return:
        """
        self.__sender = sender
        try:
            self.smtp_server.login(sender, password)
        except Exception as e:
            print(e)

    @staticmethod
    def __format_addr(address):
        name, addr = parseaddr(address)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    def add_image(self, image_path):
        with open(image_path, 'rb') as f:
            filename = os.path.basename(image_path)
            attachment_id = str(self.attachment_id)
            att_image = MIMEImage(f.read())
            att_image.add_header('Content-ID', '%s' % attachment_id)
            html_image = '<br><img src="cid:%s" alt="%s" width="50%%" height="50%%">' % (attachment_id, filename.split('.')[0])
            self.msg.attach(att_image)
            self.message += html_image
            self.attachment_id += 1

    def add_attachments(self, file_path):
        filename = os.path.basename(file_path)
        att = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8')
        att.add_header("Content-Type", 'application/octet-stream')
        att.add_header("Content-Disposition", 'attachment', filename=filename)
        att.add_header('X-Attachment-Id', str(self.attachment_id))
        self.msg.attach(att)

    def sendemail(self):
        self.msg['From'] = self.__format_addr(self.__sender)
        self.msg['To'] = self.__format_addr(",".join(self.recipients))
        self.msg['Cc'] = self.__format_addr(",".join(self.Cc))
        self.msg['Subject'] = Header(self.subject, 'utf-8').encode()
        self.msg.attach(MIMEText(self.message, 'html', 'utf-8'))
        try:
            self.smtp_server.sendmail(self.__sender, self.recipients, self.msg.as_string())
            self.smtp_server.quit()
        except Exception as e:
            print(e)


if __name__ == '__main__':
    mail = Sendemail()
    mail.server('smtp.126.com')
    mail.login('[email protected]', 'xxxxxxxx')
    mail.subject = '测试邮件'
    mail.recipients = ['[email protected]']
    mail.Cc = ['[email protected]']
    mail.message = '这是一封通过python发送又一个的测试邮件'
    mail.add_image(r'C:\Users\gaoyuanzhi\Desktop\aaa.jpg')
    mail.add_image(r'C:\Users\gaoyuanzhi\Desktop\bbb.jpg')
    mail.add_attachments(r'C:\Users\gaoyuanzhi\Desktop\aaa.jpg')
    mail.sendemail()

猜你喜欢

转载自www.cnblogs.com/gaoyuanzhi/p/12643508.html