zoukankan      html  css  js  c++  java
  • Python模块--smtplib、email

    概述


    smtplib模块和email模块均是内置模块,smtplib模块提供了smtp协议功能,email模块提供了编写MIME格式内容的功能。

    SMTP


    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,属于TCP/IP协议簇,帮助每台计算机在发送或中转信件时找到下一个目的地。

    相关帖子:

    POP3、SMTP和IMAP之间的区别和联系

    MIME


    MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,决定了邮件的组成内容和结构。

    相关帖子:

    MIME协议分析

    python实例


    第一段代码

    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    import email
    import mimetypes
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEText import MIMEText
    from email.MIMEImage import MIMEImage
    import smtplib

    def sendEmail(authInfo, fromAdd, toAdd, subject, plainText, htmlText):

            strFrom = fromAdd
            strTo = ', '.join(toAdd)

            server = authInfo.get('server')
            user = authInfo.get('user')
            passwd = authInfo.get('password')

            if not (server and user and passwd) :
                    print 'incomplete login info, exit now'
                    return

            # 设定root信息
            msgRoot = MIMEMultipart('related')
            msgRoot['Subject'] = subject
            msgRoot['From'] = strFrom
            msgRoot['To'] = strTo
            msgRoot.preamble = 'This is a multi-part message in MIME format.'

            # Encapsulate the plain and HTML versions of the message body in an
            # 'alternative' part, so message agents can decide which they want to display.
            msgAlternative = MIMEMultipart('alternative')
            msgRoot.attach(msgAlternative)

            #设定纯文本信息
            msgText = MIMEText(plainText, 'plain', 'utf-8')
            msgAlternative.attach(msgText)

            #设定HTML信息
            msgText = MIMEText(htmlText, 'html', 'utf-8')
            msgAlternative.attach(msgText)

           #设定内置图片信息
            fp = open('test.jpg', 'rb')
            msgImage = MIMEImage(fp.read())
            fp.close()
            msgImage.add_header('Content-ID', '<image1>')
            msgRoot.attach(msgImage)

           #发送邮件
            smtp = smtplib.SMTP()
           #设定调试级别,依情况而定
            smtp.set_debuglevel(1)
            smtp.connect(server)
            smtp.login(user, passwd)
            smtp.sendmail(strFrom, strTo, msgRoot.as_string())
            smtp.quit()
            return

    if __name__ == '__main__' :
            authInfo = {}
            authInfo['server'] = 'smtp.somehost.com'
            authInfo['user'] = 'username'
            authInfo['password'] = 'password'
            fromAdd = 'username@somehost.com'
            toAdd = ['someone@somehost.com', 'other@somehost.com']
            subject = '邮件主题'
            plainText = '这里是普通文本'
            htmlText = '<B>HTML文本</B>'
            sendEmail(authInfo, fromAdd, toAdd, subject, plainText, htmlText)

    文件形式的邮件

    #!/usr/bin/env python3   
    #coding: utf-8   
    import smtplib   
    from email.mime.text import MIMEText   
    from email.header import Header   

    sender = '***'   
    receiver = '***'   
    subject = 'python email test'   
    smtpserver = 'smtp.163.com'   
    username = '***'   
    password = '***'   

    msg = MIMEText('你好','text','utf-8')#中文需参数‘utf-8',单字节字符不需要   
    msg['Subject'] = Header(subject, 'utf-8')   

    smtp = smtplib.SMTP()   
    smtp.connect('smtp.163.com')   
    smtp.login(username, password)   
    smtp.sendmail(sender, receiver, msg.as_string())   
    smtp.quit()

    HTML形式的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText

    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'

    msg = MIMEText('<html><h1>你好</h1></html>','html','utf-8')

    msg['Subject'] = subject

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

    带图片的HTML邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage

    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'

    msgRoot = MIMEMultipart('related')
    msgRoot['Subject'] = 'test message'

    msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!','html','utf-8')
    msgRoot.attach(msgText)

    fp = open('h:\python\1.jpg', 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()

    msgImage.add_header('Content-ID', '<image1>')
    msgRoot.attach(msgImage)

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()

    带附件的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage

    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'

    msgRoot = MIMEMultipart('related')
    msgRoot['Subject'] = 'test message'

    #构造附件
    att = MIMEText(open('h:\python\1.jpg', 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="1.jpg"'
    msgRoot.attach(att)

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()

    群邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText

    sender = '***'
    receiver = ['***','****',……]
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'

    msg = MIMEText('你好','plain','utf-8')

    msg['Subject'] = subject

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

    各种元素都包含的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage

    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'

    # Create message container - the correct MIME type is multipart/alternative.
    msg = MIMEMultipart('alternative')
    msg['Subject'] = "Link"

    # Create the body of the message (a plain-text and an HTML version).
    text = "Hi! How are you? Here is the link you wanted: http://www.python.org"
    html = """
    <html>
      <head></head>
      <body>
        <p>Hi!<br>
           How are you?<br>
           Here is the <a href="http://www.python.org">link</a> you wanted.
        </p>
      </body>
    </html>
    """

    # Record the MIME types of both parts - text/plain and text/html.
    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html')

    # Attach parts into message container.
    # According to RFC 2046, the last part of a multipart message, in this case
    # the HTML message, is best and preferred.
    msg.attach(part1)
    msg.attach(part2)
    #构造附件
    att = MIMEText(open('h:\python\1.jpg', 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="1.jpg"'
    msg.attach(att)

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

     基于SSL的邮件

    #!/usr/bin/env python3
    #coding: utf-8
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    sender = '***'
    receiver = '***'
    subject = 'python email test'
    smtpserver = 'smtp.163.com'
    username = '***'
    password = '***'

    msg = MIMEText('你好','plain','utf-8')#中文需参数‘utf-8',单字节字符不需要
    msg['Subject'] = Header(subject, 'utf-8')

    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.set_debuglevel(1)
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

    参考帖子

    https://www.cnblogs.com/xcblogs-python/p/5727238.html

    https://www.cnblogs.com/haq5201314/p/8728016.html

    python发送邮件的实例代码(支持html、图片、附件)

    python发送邮件的实例代码(支持html、图片、附件)

    https://www.cnblogs.com/chenjianhong/p/4144304.html

    http://www.jb51.net/web/25072.html

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types#重要的MIME类型

    https://blog.csdn.net/wangxh_haha/article/details/78037449

    https://www.cnblogs.com/duanguyuan/p/5208590.html

  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/sky58/p/8728074.html
Copyright © 2011-2022 走看看