下面是发普通邮件的代码:

import smtplib 
from email.mime.text import MIMEText
from email.header import Header
#引入smtplib、MIMEText和Header

mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上,地址应为字符串格式
qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以调用SMTP对象的方法和属性了
qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。
#注意,如果端口用465的话,第8行要用smtplib.smtp_ssl

account = input('请输入你的邮箱:')
#获取邮箱账号,为字符串格式
password = input('请输入你的密码:')
#获取邮箱密码,为字符串格式,这里的密码不是邮箱的登陆密码,而是一个授权码
qqmail.login(account,password)
#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码

receiver=input('请输入收件人的邮箱:')
#获取收件人的邮箱。

content=input('请输入邮件正文:')
#输入你的邮件正文,为字符串格式
message = MIMEText(content, 'plain', 'utf-8')
#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码
subject = input('请输入你的邮件主题:')
#输入你的邮件主题,为字符串格式
message['Subject'] = Header(subject, 'utf-8')
#在等号的右边是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。

try:
    qqmail.sendmail(account, receiver, message.as_string())
    print ('邮件发送成功')
except:
    print ('邮件发送失败')
qqmail.quit()
#邮件发完后退出邮箱。

如果要发带附件的邮件,可以使用下面的代码:

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

def send_mail()
    sender = 'xxx@qq.com'  # 发送邮件的人
    receivers = 'xxx@163.com'  # 接收邮件人
    
    # 第三方SMTP服务
    mail_host='smtp.qq.com'  # 设置发送服务器
    mail_user = 'xxx@qq.com'  # 登录邮箱名
    mail_pass = 'xxx'  # 口令(授权码)
    
    # 创建一个带附件的实例
    message = MIMEMultipart()
    message['From'] = Header(sender,'utf-8') # 发送者
    message['To'] = Header(receivers,'utf-8')  # 接收者
    subject = '扛锄头的农民给你发送了一封带附件的邮件'   # 发送邮件标题
    message['Subject'] = Header(subject,'utf-8')
    
    # 邮件正文内容
    mail_msg = '这个一个发送带附件的测试邮件......' # 发送邮件内容
    # 三个参数:第一个是文本内容,第二个plain设置文本格式,第三个utf-8设置编码
    message.attach(MIMEText(mail_msg,'plain','utf-8'))  # 发送邮件正文(纯文本)
    
    # 构造附件1,传送当前目录下的文件
    File='成都.mp3'
    att1 = MIMEText(open(File,'rb').read(),'base64','utf-8')
    att1['Content-Type'] = 'application/octet-stream'
    # 这里的filename是指邮件中显示的附件名称
    att1.add_header('Content-Disposition', 'attachment', filename=File)
    message.attach(att1)
    
    # 构造附件2,传送当前目录下的文件
    File='社群及直播.pdf'
    att2 = MIMEText(open(File,'rb').read(),'base64','utf-8')
    att2['Content-Type'] = 'application/octet-stream'
    # 这里的filename是指邮件中显示的附件名称
    att2.add_header('Content-Disposition', 'attachment', filename=File)
    message.attach(att2)
    
    # 如果还有其它附件,可以继续添加,附件多的话,可以创建一个列表,循环,注意文件路径必须一致
    
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host,465)  # 发送服务器的端口号
        smtpObj.login(mail_user,mail_pass)
        smtpObj.sendmail(sender,receivers,message.as_string())
        print('邮件发送成功')
    except smtplib.SMTPException:
        print('邮件发送失败')
    smtplib.quit()

send_mail()