以网易邮箱为例,简单粗暴,实现代码如下:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender = '***@163.com'  # 发送者
receiver = '***@qq.com'  # 接收者
sender_passwd = '******'

def send_email_with_text(from_addr, to_addr, from_addr_passwd):
    # 发送只含文本内容的邮件
    message = MIMEText('Python 邮件发送文本内容...', 'plain', 'utf-8') # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
    message['From'] = from_addr
    message['To'] = to_addr

    subject = 'Python SMTP 邮件测试'  # 邮件主题
    message['Subject'] = subject

    smtpObj = smtplib.SMTP('smtp.163.com', 25)  # 连接STMP服务器
    smtpObj.login(from_addr, from_addr_passwd)  # 用授权码登录
    smtpObj.sendmail(from_addr, to_addr, message.as_string())  # 发送邮件
    smtpObj.quit()  # 断开服务器连接

def send_email_with_html(from_addr, to_addr, from_addr_passwd):
    # 发送正文含链接的邮件
    mail_msg = """
    <p>Python 邮件发送测试...</p>
    <p><a href="https://www.python.org/">https://www.python.org/</a></p>
    """
    message = MIMEText(mail_msg, 'html', 'utf-8')  # 三个参数:第一个为文本内容,第二个 html 设置超文本格式,第三个 utf-8 设置编码
    message['From'] = from_addr
    message['To'] = to_addr

    subject = 'Python SMTP 邮件测试'  # 邮件主题
    message['Subject'] = subject

    smtpObj = smtplib.SMTP('smtp.163.com', 25)  # 连接STMP服务器
    smtpObj.login(from_addr, from_addr_passwd)  # 用授权码登录
    smtpObj.sendmail(from_addr, to_addr, message.as_string())  # 发送邮件
    smtpObj.quit()  # 断开服务器连接

def send_email_with_att(from_addr, to_addr, from_addr_passwd):
    message = MIMEMultipart()     # 创建一个带附件的对象
    message['From'] = from_addr
    message['To'] = to_addr
    subject = 'Python SMTP 邮件测试'  # 邮件主题
    message['Subject'] = subject

    # 邮件正文部分
    message.attach(MIMEText('这是Python 邮件发送测试……', 'plain', 'utf-8'))

    # 构造附件
    att = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att["Content-Disposition"] = 'attachment; filename="test.txt"'
    message.attach(att)

    smtpObj = smtplib.SMTP('smtp.163.com', 25)  # 连接STMP服务器
    smtpObj.login(from_addr, from_addr_passwd)  # 用授权码登录
    smtpObj.sendmail(from_addr, to_addr, message.as_string())  # 发送邮件
    smtpObj.quit()  # 断开服务器连接


send_email_with_text(sender, receiver, sender_passwd)
send_email_with_html(sender, receiver, sender_passwd)
send_email_with_att(sender, receiver, sender_passwd)