简单版(不显示邮件主题和推荐人)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from email.mime.text import MIMEText
import smtplib

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

# 输入 Email 地址和口令
from_addr = input('From:')
password = input('Password:')

# 输入收件人地址
to_addr = input('To:')
# 输入 SMTP 服务器地址
smtp_server = input('SMTP server:')

server = smtplib.SMTP_SSL(smtp_server, 25) # SMTP 协议默认端口是25
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

直接从廖雪峰教程上搬运过来的,经测试代码没有问题。

from_addr 为 QQ 邮箱 1207543053@qq.com,口令 password 可以从 QQ 邮箱的设置 -> 账户 -> POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 下生成授权码获取到。需要发送一条自费的 0.1 元的验证短信。

to_addr 选择了不同的邮件服务商 163 网易邮箱 lihaiygm@163.comserver.set_debuglevel(1) 可以将中间通讯的发送消息、回复消息和数据内容展示出来。

关键点在于 smtp_server。一开始看到 smtp_serverto_addr 靠的更近,以为是接收邮件的服务商服务器地址(教程里没有说明,这也是为什么我输入发送地址和授权码后报错: Authentication Failed),其实是发送邮箱的服务商服务器地址。比如这里的 smtp.qq.com