exchange 只发送邮件 不能登录_Python: 通过QQ邮箱发送电子邮件

    文章背景:自学Python编程快速上手中关于发送电子邮件的章节。本文讲述如何通过Python,使用QQ邮箱发送电子邮件。

  1. 连接到SMTP服务器

    import smtplibsmtpObj = smtplib.SMTP('smtp.qq.com',587)

    0a25b3719abcb846dcdbd9358c8a85b3.png

  2. 发送SMTP的“Hello”消息

    smtpObj.ehlo()
  3. 开始TLS加密

    smtpObj.starttls()
  4. 登陆到SMTP服务器

    smtpObj.login('my_email_address@qq.com','MY_SECRET_PASSWORD')

    对于MY_SECRET_PASSWORD,针对QQ邮箱,需要输入的是授权码。授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。

    将密码放在源代码中要当心。调用input(),让用户输入密码是个好主意。

  5. 发送电子邮件

from email.mime.text import MIMETextfrom email.header import Headerfrom email.utils import parseaddr, formataddrdef _format_addr(s):    name, addr = parseaddr(s)    return formataddr((Header(name, 'utf-8').encode(), addr))from_addr = 'my_email_address@qq.com'          # 发件人to_addr = 'recipient@example.com'              # 收件人message = MIMEText('Happy new year!', 'plain', 'utf-8')         # 正文message['From'] = _format_addr('Sam ' % from_addr)          # 发件人message['To'] =  _format_addr('Python lover ' % to_addr)    # 收件人subject = 'Python SMTP 邮件测试'message['Subject'] = Header(subject, 'utf-8')    #主题smtpObj.sendmail(from_addr, [to_addr], message.as_string())
  • 邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发送出去,而是包含在发给message的文本中。所以,我们必须把FromToSubject添加到MIMEText中,才是一封完整的邮件。

  • 函数_format_addr()用来格式化一个邮件地址;如果包含中文,需要通过Header对象进行编码。

  • message['To']接收的是字符串而不是list,如果有多个邮件地址,用,分隔即可。

  • sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个stras_string()MIMEText对象变成str

  1. 从SMTP服务器断开

smtpObj.quit()

代码汇总

import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerfrom email.utils import parseaddr, formataddrdef _format_addr(s):    name, addr = parseaddr(s)    return formataddr((Header(name, 'utf-8').encode(), addr))# 1. 连接到SMTP服务器smtpObj = smtplib.SMTP('smtp.qq.com',587)# 2. 发送SMTP的“HELLO”消息smtpObj.ehlo()# 3. 开始TLS加密smtpObj.starttls()# 4. 登陆到SMTP服务器smtpObj.login('my_email_address@qq.com','MY_SECRET_PASSWORD')# 5. 发送电子邮件from_addr = 'my_email_address@qq.com'          # 发件人to_addr = 'recipient@example.com'              # 收件人message = MIMEText('Happy new year!', 'plain', 'utf-8')         # 正文message['From'] = _format_addr('Sam ' % from_addr)          # 发件人message['To'] =  _format_addr('Python lover ' % to_addr)    # 收件人subject = 'Python SMTP 邮件测试'message['Subject'] = Header(subject, 'utf-8')    #主题smtpObj.sendmail(from_addr, [to_addr], message.as_string())# 6. 从服务器断开smtpObj.quit()print("Done!")

运行代码后,打开收件箱,效果如下:

515a3c67f82aa1712aa9bca2caf98f21.png

参考资料:

[1] Python编程快速上手—让繁琐工作自动化(https://ddz.red/AFTmO)

[2] QQ邮箱的POP3与SMTP服务器(https://service.mail.qq.com/cgi-bin/help?subtype=1&no=167&id=28)

[3] 授权码(https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256%27)

[4] SMTP发送邮件(https://www.liaoxuefeng.com/wiki/1016959663602400/1017790702398272)

[5] Python SMTP发送邮件(https://www.runoob.com/python/python-email.html)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值