Denua 博客

用 smtplib 发送邮件

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


使用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 = '''

Hello World

Hello world

''' 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](https://www.denua.cn/media/kindeditor/2017-11/4/b1891bba-c144-11e7-82d1-00163e020e5d.bmp) 完整代码 # 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 = '''

Hello World

Hello world

''' 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