smtplib发送邮件大概分为以下几个步骤:
1、连接到SMTP服务器;
2、发送SMTP的“Hello”消息;
3、登录到SMTP服务器;
4、发送电子邮件;
5、关闭 SMTP 服务器的连接。
import smtplib
from email.mime.text import MIMEText
def send_mail(text):
msg = MIMEText(text) #参数是消息内容
msg['From'] = 'from@163.com' #发送人
msg['To'] = 'to@163.com' #接收人
msg['Subject'] = 'test' #主题
smtp = smtplib.SMTP('smtp.163.com',25) #smtp服务器设置
try:
smtp.ehlo() #hello消息
smtp.starttls()#连接
smtp.login('from@163.com','password')#登陆
smtp.sendmail('from@163.com','to@163.com',msg.as_string())#发送
except Exception as e:
print(e)
finally:
smtp.quit() #退出
if __name__ == '__main__':
send_mail('test')
这是一个发送纯文本邮件的例子,send_mail函数中构建了一个MIMEText对象,并通过这个MIMEText对象设置收件人、发件人和邮件主题。如果需要发送带有附件的邮件,需要构建一个MIMEMultipart对象,并通过MIMEMultipart的attach方法添加附件。
Python标准库中发送电子邮件的模块比较复杂,因此有许多开源的库提供了更加易用的接口来发送电子邮件。其中yagmail 是一个使用比较广泛的开源项目。yagmail的底层依然使用smtplib和email模块,但是相对于直接使用smtplib和email模块,yagmail提供了更加Pythonic的接口,并具有更好的易用性。
yagmail是开源的第三方库,因此在使用之前需要安装
pip install yagmail
import yagmail
yag = yagmail.SMTP(user='from@163.com',password='password',host='smtp.163.com',port=25)
yag.send('to@163.com','test','test')
yag.close()