python发送邮件

2021-04-23 06:30

阅读:476

标签:not   mime   dma   read   multipart   use   页面   encode   nbsp   

  在实际开发中,有很多场景都需要消息通知,消息通知的类型主要分为短信、web页面消息、邮件。python发送邮件主要使用smtplib和email模块,smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接发送邮件的动作,连接服务器,登录邮箱,发送邮件(发件人、收件人,邮件内容);email模块主要负责构建邮件:指的是邮箱页面显示的一些构造,如发件人、收件人、主题、正文、附件等。

import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


class mailsender(object):
    def __init__(self, host, port):
        self.smtp = smtplib.SMTP()
        self.smtp_ssl = smtplib.SMTP_SSL()
        self.smtp.connect(host, port)
        self.user = None
        self.pwd = None

    def login(self, user, pwd):
        """
        登录
        :param user: 邮箱用户名
        :param pwd: 邮箱密码
        :return:
        """
        self.user = user
        self.smtp.login(user, pwd)

    def add_attachment(self, filename):
        """
        添加附加
        :param filename:  附件路径
        :return:
        """
        att = MIMEBase(application, octet-stream)
        att.set_payload(open(filename, rb).read())
        att.add_header(Content-Disposition, attachment, filename=(utf-8, ‘‘, filename))
        encoders.encode_base64(att)
        return att

    def add_img(self, filename, img_id):
        """
        添加正文中图片
        :param filename: 图片路径
        :param img_id: 图片ID机标识符
        :return:
        """
        msg_image = MIMEImage(open(filename, rb).read())  # 读取图片内容
        msg_image.add_header(Content-ID, img_id)  # 指定文件的Content-ID,,在HTML中图片src将用到
        return msg_image

    def structure_email(self, email_info):
        """
        构建邮件
        :return:
        """
        msg = MIMEMultipart(alternative)
        if email_info.get("is_html"):
            # html格式
            contents = MIMEText(email_info.get("content"), html, _charset=utf-8)
        else:
            contents = MIMEText(email_info.get("content"), plain, _charset=utf-8)
        msg.attach(contents)
        msg[subject] = email_info.get("subject")
        msg[from] = self.user
        msg[to] = email_info.get("send_target")
        attachments = email_info.get("attachments", [])
        # 处理附件
        for attachment_item in attachments:
            msg.attach(self.add_attachment(attachment_item))
        if email_info.get("is_html"):
            # 处理html正文中的图片
            image_attachments = email_info.get("image_attachments", {})
            for image_id, image_filename in image_attachments.items():
                msg.attach(self.add_img(image_filename, image_id))
        return msg

    def send(self, msg, to_addr):
        """
        发送邮件
        :param msg: 邮件体
        :param to_addr: 收件人
        :return:
        """
        self.smtp.sendmail(self.user, to_addr, msg.as_string())
        self.smtp.quit()


if __name__ == __main__:
    email_host = "smtp.163.com"
    email_port = "25"
    user = "92066@163.com"
    password = "password"
    message_data = {
        "creator": "00000",  # 创建人
        "create_time": 1345678123456,  # 创建时间
        "subject": "邮件主题",
        "content":  官网业务周平均延时图表 :

详细内容见附件
, # image_id_1这个是和添加图片用的id对应上 "send_target": ["123@qq.com"], "notice_type": 1, # 1-邮件,2-短信,3-web "status": 1, # 1-待发送,2-发送成功,3发送失败 "try_times": 0, # 尝试次数 "is_deleted": 0, # 0-正常,1-已删除 "attachments": [], # 附件列表 "is_html": 0, # 0-正常文本,1-HTML "image_attachments": {"image_id_1": ""} # 正文是否为HTML,且带图片 } email = mailsender(email_host, email_port) email.login(user, password) msg = email.structure_email(message_data) email.send(msg, message_data.get("send_target"))

 

python发送邮件

标签:not   mime   dma   read   multipart   use   页面   encode   nbsp   

原文地址:https://www.cnblogs.com/12345huangchun/p/13270003.html


评论


亲,登录后才可以留言!