python3邮件发送(基于smtp协议,使用qq邮箱)

做以前的项目维护,为保证每天的运行情况,在发生重大错误的时候发送邮件提醒。

环境:

python版本

3.6.3

 

smtp服务器

smtp.163.com  端口 465/994

smtp.qq.com    端口 465/587

开启QQ邮箱SMTP协议,以及生成登陆口令:

1.登陆QQ邮箱——设置——账号

python3邮件发送(基于smtp协议,使用qq邮箱)_第1张图片

2.在POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务下开启SMTP服务获得口令

python3邮件发送(基于smtp协议,使用qq邮箱)_第2张图片

代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '[email protected]'  #发送邮件名称
# receivers = ['[email protected]','[email protected]']  # 接收多个邮件,可设置为你的QQ邮箱或者其他邮箱
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
mail_host="smtp.qq.com"  #设置服务器
mail_port=465 #设置服务器
mail_user="xxxxxxxxxxxx"    #QQ邮件登陆名称
mail_pass="xxxxxxxxxxxx"    #生成的口令

#封装一个方法直接传入邮件标题和内容
def post_email(title,context):
    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
    message = MIMEText(context, 'plain', 'utf-8')
    message['From'] = Header(sender)   # 发送者
    message['To'] =  Header(str(";".join(receivers)))        # 接收者
    message['Subject'] = Header(title)
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host,mail_port)
        smtpObj.login(mail_user,mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        smtpObj.quit()
        return 1
    except smtplib.SMTPException:
        return 0

if __name__ == '__main__':
    result = post_email("来自于测试数据","今天测试一下python是否可以发送邮件成功。")
    print(result)

结果:

1

查看邮件:

python3邮件发送(基于smtp协议,使用qq邮箱)_第3张图片

成功接收邮件

可能出现的问题:

1.550 Suspected spam.——疑似垃圾邮件,大量的垃圾邮件发送自该域名或邮件运营商。如果你是邮件运营商,请重视垃圾邮件及垃圾用户的管理,避免被滥用。

解决方法:

由于发送邮件比较频繁,会让邮箱认为发送为垃圾邮件直接拒绝接收邮件。这里需要在你接收的邮箱对发送的邮箱添加白名单。这样邮箱不会拒绝接收你白名单发送的邮件。以163邮箱为例:

python3邮件发送(基于smtp协议,使用qq邮箱)_第4张图片

2.代码执行成功,未接收到邮件。

解决方法:

(1)可以去发送邮件的账号中的草稿中查看是不是因为接收邮箱或者发送邮箱输入有误导致邮件没有发送成功。

(2)若1已经显示发送成功,可以到接收邮件的垃圾邮件中查看是否存在,邮箱有时会把发送的邮件检测为垃圾邮件。

希望对大家有帮助谢谢。

你可能感兴趣的:(python3,smtp,邮件)