• 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

  • 相关阅读:
    从 i++ 和 ++i 说起局部变量表和操作数栈
    数据库连接情况查询相关sql语句
    db2相关语句
    BeanUtils源码详解
    Spring注解驱动开发之AOP
    Spring注解驱动开发之IOC
    正则表达式
    linux特殊符号
    linux下面如何让一个软件/命令开机自启动
    linux文件属性
  • 原文地址:https://www.cnblogs.com/sky58/p/8728074.html
Copyright © 2020-2023  润新知