一、发送文本型内容
代码如下:
-*- coding: utf-8-*- #没有这句话,发送不了中文
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = '发件地址@qq.com'
password = '客户端授权登陆密码'
to_addr = '收件地址@qq.com'
smtp_server = 'smtp.qq.com'
msg = MIMEText('hello, send by ...', 'plain', 'utf-8')
msg['From'] = _format_addr('你猜我是谁 <%s>' % from_addr)
msg['To'] = _format_addr('笨蛋 <%s>' % to_addr)
msg['Subject'] = Header('来自温暖被窝的问候……', 'utf-8').encode()
server = smtplib.SMTP_SSL(smtp_server, 465)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
二、发送HTML格式邮件
将
msg = MIMEText('hello, send by ...', 'plain', 'utf-8')
替换为:
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">这是一个链接</a></p>
"""
msg = MIMEText(mail_msg, 'html', 'utf-8')
遇到的问题:
1、要确保自己的邮箱地址开启了smtp服务,开启服务的方法网上也有。
2、不同邮箱的smtp服务地址(smtp_server)不同,可以上网搜索。
3、如果不设置客户端授权登陆密码 :smtplib.SMTPAuthenticationError: (``530``,
'Error: A secure connection is requiered(such as ssl). More information at [http://service.mail.qq.com/cgi-bin/help?id=28](http://service.mail.qq.com/cgi-bin/help?id=28)'``)
程序报503错误
原因:需要一个安全的连接,例如SSL,因此我们要使用SSL的方式去登录
4、设置客户端授权登陆密码
打开qq邮箱,点击设置->
账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启IMAP/SMTP服务,然后根据要求使用手机发送到指定号码,获取授权码,
这个授权码就是你接下来登录要使用的密码,配置完成,上代码,另,QQ的授权码有效期为30天。
5、改了上面的SSL之后,运行报错
我原来的代码是server = smtplib.SMTP(smtp_server, 465)
后来改为:server = smtplib.SMTP_SSL(smtp_server, 465)即可。
6、注意,代码中的465代表端口号,不同的服务端口号不同。