SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
    python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
    Python创建 SMTP 对象
    语法:

    1. import smtplib
    2. smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

    参数说明:
    host—SMTP 服务器主机。可以指定主机的ip地址或者域名如: 51coding.com,这个是可选参数。
    port— 如果提供了 host 参数, 需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
    local_hostname—如果 SMTP 在本机上,只需要指定服务器地址为 localhost 即可。
    使用Python SMTP发送邮件
    Python SMTP对象使用sendmail方法发送邮件,语法如下:

    1. SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

    参数说明:
    from_addr—邮件发送者地址。
    to_addrs— 字符串列表,邮件发送地址。
    msg— 发送消息
    实例:

    1. #!/usr/bin/python
    2. import smtplib
    3. sender = 'from@fromdomain.com'
    4. receivers = ['to@todomain.com']
    5. message = """From: From Person <from@fromdomain.com>
    6. To: To Person <to@todomain.com>
    7. Subject: SMTP e-mail test
    8. This is a test e-mail message.
    9. """
    10. try:
    11. smtpObj = smtplib.SMTP('localhost')
    12. smtpObj.sendmail(sender, receivers, message)
    13. print "Successfully sent email"
    14. except SMTPException:
    15. print "Error: unable to send email"

    使用Python发送HTML格式的邮件
    Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。
    实例:

    1. #!/usr/bin/python
    2. # -*- coding: UTF-8 -*-
    3. import smtplib
    4. from email.mime.text import MIMEText
    5. from email.header import Header
    6. sender = 'from@fromdomain.com'
    7. receivers = [''to@todomain.com''] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    8. mail_msg = """
    9. <p>Python 邮件发送测试...</p>
    10. <p><a href="http://www.51coding.com">这是一个链接</a></p>
    11. """
    12. message = MIMEText(mail_msg, 'html', 'utf-8')
    13. message['From'] = Header("wiki", 'utf-8')
    14. message['To'] = Header("测试", 'utf-8')
    15. subject = 'Python SMTP 邮件测试'
    16. message['Subject'] = Header(subject, 'utf-8')
    17. try:
    18. smtpObj = smtplib.SMTP('localhost')
    19. smtpObj.sendmail(sender, receivers, message.as_string())
    20. print "邮件发送成功"
    21. except smtplib.SMTPException:
    22. print "Error: 无法发送邮件"

    Python 发送带附件的邮件
    发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
    实例:

    1. #!/usr/bin/python
    2. # -*- coding: UTF-8 -*-
    3. import smtplib
    4. from email.mime.text import MIMEText
    5. from email.mime.multipart import MIMEMultipart
    6. from email.header import Header
    7. sender = 'from@fromdomain.com'
    8. receivers = ['to@todomain.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    9. #创建一个带附件的实例
    10. message = MIMEMultipart()
    11. message['From'] = Header("wiki", 'utf-8')
    12. message['To'] = Header("测试", 'utf-8')
    13. subject = 'Python SMTP 邮件测试'
    14. message['Subject'] = Header(subject, 'utf-8')
    15. #邮件正文内容
    16. message.attach(MIMEText('这是wiki Python 邮件发送测试……', 'plain', 'utf-8'))
    17. # 构造附件1,传送当前目录下的 test.txt 文件
    18. att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
    19. att1["Content-Type"] = 'application/octet-stream'
    20. # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    21. att1["Content-Disposition"] = 'attachment; filename="test.txt"'message.attach(att1)
    22. # 构造附件2,传送当前目录下的 imooc.txt 文件
    23. att2 = MIMEText(open('imooc.txt', 'rb').read(), 'base64', 'utf-8')
    24. att2["Content-Type"] = 'application/octet-stream'
    25. att2["Content-Disposition"] = 'attachment; filename="imooc.txt"'message.attach(att2)
    26. try:
    27. smtpObj = smtplib.SMTP('localhost')
    28. smtpObj.sendmail(sender, receivers, message.as_string())
    29. print "邮件发送成功"
    30. except smtplib.SMTPException:
    31. print "Error: 无法发送邮件"