Denua 博客

用 smtplib 发送邮件

发布时间: 2017-11-04 17:49   分类 : Python    标签: Python 浏览: 513   

使用Python中的stmplib对smtp协议进行了简单的封装, 可以发送SSL加密邮件和普通邮件, 使用它发送邮件非常简单方便.

smtplib不是Python的内置库, 如果没有, 则需先安装

pip install smtplib

easy_install smtplib

登入和发送邮件代码, 这里我使用阿里云企业邮箱发送邮件到QQ邮箱, 也可用qq邮箱.

mail = {
    'host': 'smtp.denua.cn',
    'user': '****@denua.cn',
    'password': '****'
}
sender = mail['user']
receivers = ['****@qq.com']
message = 'HelloWorld.'

smtp = smtplib.SMTP_SSL()  # 使用 SSL 连接smtp服务器,否则使用.SMTP
smtp.set_debuglevel(1)  # 设置调试等级, 这样就可以看到邮件发送的详细过程
smtp.connect(mail['host'], 465)  # 主机, 端口, 如果使用SSL为465, 否则 25
smtp.login(mail['user'], mail['password'])  # 用户名, 密码
smtp.helo()  # 测试是否联通
smtp.sendmail(sender, receivers, message)  # 发送人, 收件人为一个列表, 邮件内容
smtp.quit()

这样就把要发的邮件发出去了,但是收到邮件会发现主题,发件人等都没有.这是因为我们没有构建这些邮件头.

这时我们需要用到另一个库, email

import email
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

subject = 'smtplib test'    # 主题
nickname = 'denua'      # 发件人
replayto = 'xxx@xx.com'     # 回复邮件收件人

message = MIMEMultipart('alternative')
message['From'] = '%s <%s>' % (Header(nickname.decode('utf-8')).encode(), sender)  
message['To'] = Header(receivers, 'gb2312')
message['Subject'] = Header(subject.decode('utf-8')).encode()   # 不进行编码可能出现乱码
message['Reply-To'] = replayto
message['Message-id'] = email.utils.make_msgid()

# 以上构建的都为邮件的 '头部'

msg = '''
    <html>
        <h2>Hello World</h2>
        <p><b>H</b>ello world</p>
    </html>
'''

html = MIMEText(msg, _subtype='html', _charset='UTF-8') # 发送HTML邮件
message.attach(html)    # 添加

这样, 一份标准的邮件就构造完成了, 发送的时候我们需要吧 message 改成 message.as_string()

smtp.sendmail(sender, receivers, message.as_string())

发送的内容可以有很多种, 只要是MIME类型基本都可以

结果

image

完整代码

# coding=utf-8
import smtplib
import email
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

mail = {
    'host': 'smtp.denua.cn',
    'user': '****@denua.cn',
    'password': '*****'
}
sender = mail['user']
receivers = '*****@qq.com'

subject = 'smtplib test'
nickname = 'denua'
replayto = '****@denua.cn'

message = MIMEMultipart('alternative')
message['From'] = '%s <%s>' % (Header(nickname.decode('utf-8')).encode(), sender)
message['To'] = Header(receivers, 'gb2312')
message['Subject'] = Header(subject.decode('utf-8')).encode()
message['Reply-To'] = replayto
message['Message-id'] = email.utils.make_msgid()

msg = '''
    <html>
        <h2>Hello World</h2>
        <p><b>H</b>ello world</p>
    </html>
'''

html = MIMEText(msg, _subtype='html', _charset='UTF-8')
message.attach(html)

smtp = smtplib.SMTP_SSL()
smtp.set_debuglevel(1)  
smtp.connect(mail['host'], 465)
smtp.login(mail['user'], mail['password']) 
smtp.helo()
smtp.sendmail(sender, receivers, message.as_string()) 
smtp.quit()
print 'success!'

(完)

评论    

Copyright denua denua.cn