标签:not mime dma read multipart use 页面 encode nbsp
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,<img>,在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": ‘<font color=red> 官网业务周平均延时图表 :<br><img src="cid:image_id_1"><br>详细内容见附件</font>‘, # 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"))
标签:not mime dma read multipart use 页面 encode nbsp
原文地址:https://www.cnblogs.com/12345huangchun/p/13270003.html