Example #1
0
 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())
Example #3
0
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())
Example #4
0
 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())
Example #6
0
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