Python:发送邮件或发带附件的邮件
在进行发邮件之前,首先了解两个模块:smtplib和email。
smtplib模块主要是负责发送邮件的,是一个发邮件的动作,比如连接邮箱服务,登录邮箱,发送邮件等。
email模块主要是负责构造邮件,是显示邮件页面的一些内容,比如发件人,收件人,主题,附件,正文等。
本文使用的是163邮箱作为测试邮箱。
注:163邮箱开启smtp需要进行授权 客户端授权码 ,不再支持邮箱密码进行测试。
1、使用Python发Text 邮件
import smtplib # 发送字符串的邮件 from email.mime.text import MIMEText # 设置服务器所需信息 fromEmailAddr = '发件人邮箱地址' # 邮件发送方邮箱地址 password = 'email password' # 密码(部分邮箱为授权码) toEmailAddrs = ['接收方地址'] # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发 # 设置email信息 # ---------------------------发送字符串的邮件----------------------------- # 邮件内容设置 message = MIMEText('hello,test Python send Email.', 'plain', 'utf-8') # 邮件主题 message['Subject'] = 'python test email' # 发送方信息 message['From'] = fromEmailAddr # 接受方信息 message['To'] = toEmailAddrs[0] # --------------------------------------------------------------------- # 登录并发送邮件 try: server = smtplib.SMTP('smtp.163.com') # 163邮箱服务器地址,端口默认为25 server.login(fromEmailAddr, password) server.sendmail(fromEmailAddr, toEmailAddrs, message.as_string()) print('success') server.quit() except smtplib.SMTPException as e: print("error:", e)
2、使用Python发送带附件的邮件
import smtplib # 发送字符串的邮件 from email.mime.text import MIMEText # 需要 MIMEMultipart 类 from email.mime.multipart import MIMEMultipart # 设置服务器所需信息 fromEmailAddr = '发件人邮箱地址' # 邮件发送方邮箱地址 password = 'email password' # 密码(部分邮箱为授权码) toEmailAddrs = ['收件人地址'] # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发 # 设置email信息 # ---------------------------发送带附件邮件----------------------------- # 邮件内容设置 message = MIMEMultipart() # 邮件主题 message['Subject'] = 'python test email' # 发送方信息 message['From'] = fromEmailAddr # 接受方信息 message['To'] = toEmailAddrs[0] # 邮件正文内容 message.attach(MIMEText('hello,test Python send Email', 'plain', 'utf-8')) # 构造附件 att1 = MIMEText(open('text.txt', 'rb').read(), 'base64', 'utf-8') att1['Content-type'] = 'application/octet-stream' att1['Content-Disposition'] = 'attachment; filename="test.zip"' message.attach(att1) # --------------------------------------------------------------------- # 登录并发送邮件 try: server = smtplib.SMTP('smtp.163.com') # 163邮箱服务器地址,端口默认为25 server.login(fromEmailAddr, password) server.sendmail(fromEmailAddr, toEmailAddrs, message.as_string()) print('success') server.quit() except smtplib.SMTPException as e: print("error:", e)
好好做人,认真生活。