def get_message_html_plain(self, subject, html_text, plain_text): message = email.message.EmailMessage() message.add_header('subject', subject) message.make_alternative() message.add_alternative(html_text, 'html') message.add_alternative(plain_text, 'text') return message
def main(args): message = email.message.EmailMessage(email.policy.SMTP) message['To'] = 'Test Recipient <*****@*****.**>' message['From'] = 'Test Sender <*****@*****.**>' message['Subject'] = 'Foundations of Python Network Programming' message['Date'] = email.utils.formatdate(localtime=True) message['Message-ID'] = email.utils.make_msgid() if not args.i: message.set_content(html, subtype='html') message.add_alternative(plain) else: cid = email.utils.make_msgid() # RFC 2392: must be globally unique! message.set_content(html + img.format(cid.strip('<>')), subtype='html') message.add_related(blue_dot, 'image', 'gif', cid=cid, filename='blue-dot.gif') message.add_alternative(plain) for filename in args.filename: mime_type, encoding = mimetypes.guess_type(filename) if encoding or (mime_type is None): mime_type = 'application/octet-stream' main, sub = mime_type.split('/') if main == 'text': with open(filename, encoding='utf-8') as f: text = f.read() message.add_attachment(text, sub, filename=filename) else: with open(filename, 'rb') as f: data = f.read() message.add_attachment(data, main, sub, filename=filename) sys.stdout.buffer.write(message.as_bytes())
def main(args): message = email.message.EmailMessage(email.policy.SMTP) message['To'] = 'Test Recipient <*****@*****.**>' message['From'] = 'Test Sender <*****@*****.**>' message['Subject'] = 'Foundations of Python Network Programming' message['Date'] = email.utils.formatdate(localtime=True) message['Message-ID'] = email.utils.make_msgid() if not args.i: message.set_content(html, subtype='html') message.add_alternative(plain) else: cid = email.utils.make_msgid() # RFS 2392: must be globally unique! message.set_content(html + img.format(cid.strip('<>')), subtype='html') message.add_related(blue_dot, 'image', 'gif', cid=cid, filename='blue-dot.gif') message.add_alternative(plain) for filename in args.filename: mime_type, encoding = mimetypes.guess_type(filename) if encoding or (mime_type is None): mime_type = 'application/octet-stream' main, sub = mime_type.split('/') if main == 'text': with open(filename, encoding='utf-8') as f: text = f.read() message.add_attachment(text, sub, filename=filename) else: with open(filename, 'rb') as f: data = f.read() message.add_attachment(data, main, sub, filename=filename) sys.stdout.buffer.write(message.as_bytes())
def test_html_conversion_simple_list(self): message = email.message.EmailMessage() message.add_header('subject', 'HTML Only') message.make_alternative() message.add_alternative('<ul><li>foo</li><li>bar</li></ul></p>', 'html') self.inject_mail(self.gestalt.user.email, [self.group_address], data=message.as_bytes()) self.assertExists(models.Contribution, conversation__subject='HTML Only', text__text=' * foo\n * bar')
def main(args): #EmailMessage类python提供用于构造电子邮件信息的最基本的接口 message = email.message.EmailMessage(email.policy.SMTP) message['To'] = 'Test Recipient <*****@*****.**>' message['From'] = 'Test Sender <*****@*****.**>' message['Subject'] = 'Foundations of Python Network Programming' #返回本地时间作为已知的日期时间对象。 message['Date'] = email.utils.formatdate(localtime=True) #email.utils.make_msgid(idstring = None,domain = None)返回适合 符合RFC 2822的 Message-ID标头。 message['Message-ID'] = email.utils.make_msgid() if not args.i: #set_content()用来设置消息主体 message.set_content(html, subtype='html') message.add_alternative(plain) else: cid = email.utils.make_msgid() message.set_content(html + img.format(cid.strip('<>')), subtype='html') #add_related()方法用于向主要内容添加生成消息所用的其他资源。通常主要内容为HTML,并且需要图片,css,javascript时会使用此方法 message.add_related(blue_dot, 'image', 'gif', cid=cid, filename='blue-dot.gif') #以下方法提供其他格式的电子邮件信息 message.add_alternative(plain) for filename in args.filename: #根据文件名,路径或URL(由url给出)来猜测文件的类型。返回值是一个元组(type, encoding) #其中type是无法猜测的类型(缺少或后缀未知)或形式为的字符串 mime_type, encoding = mimetypes.guess_type(filename) if encoding or (mime_type is None): mime_type = 'application/octet-stream' main, sub = mime_type.split('/') if main == 'text': with open(filename, encoding='utf-8') as f: text = f.read() #以下方法用于提供附件,如PDF文件,图片以及电子表格 message.add_attachment(text, sub, filename=filename) else: with open(filename, 'rb') as f: data = f.read() message.add_attachment(data, main, sub, filename=filename) sys.stdout.buffer.write(message.as_bytes())
def create(item, codec=Codec): """Create an email.message.EmailMessage object using given codec """ message = email.message.EmailMessage() identifier = codec.get_id(item) issuer = codec.get_issuer(item) sender, domain = email.utils.parseaddr(issuer)[1].split("@") message.add_header("From", issuer) message.add_header("To", codec.get_recipient(item)) message.add_header("Message-ID", "<{}@{}>".format(uuid.uuid4(), domain)) message.add_header("References", "<{}@{}>".format(identifier, domain)) message.add_header("Reply-To", "{}+{}@{}".format(sender, identifier, domain)) message.add_header( "Subject", "".join( "[{}]".format(t) for t in [codec.get_human_id(item), codec.get_external_id(item)] if t) + " " + codec.get_subject(item), ) context = codec.get_context(item) plain = codec.render_template(codec.get_text_template(item), context) message.set_content(plain) message.add_alternative( json.dumps(context).encode("utf-8"), "application", "json") message.add_alternative( codec.render_template( codec.get_html_template(item), { "markup": codec.text_to_html(plain), "context": context }, ), "html", ) for file_ in codec.get_attachments(item) or []: filename = os.path.basename(file_.name) maintype, subtype = mimetypes.guess_type(filename)[0].split("/", 1) content = file_.read() if maintype == "text": charset = "utf-8" try: content = content.decode(charset) except UnicodeDecodeError: charset = chardet.detect(content).get("encoding") try: content = content.decode(charset) except UnicodeDecodeError: maintype, subtype = "application", "octet-stream" if maintype == "text": message.add_attachment(content, maintype, charset=charset, filename=filename) else: message.add_attachment(content, maintype, subtype, filename=filename) return message