python 发送邮件
今天接触下python邮件发送
中间遇到几个坑
自己的实验文件名称不能是 email 否则就会报错文件冲突
QQ 发送普通邮件
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender = 'xxxxxxxx@qq.com' # 发件人邮箱账号
my_pass = 'xxxxxxxxxxxxxxxx' # 发件人邮箱密码
my_user = 'xxxxxxx@qq.com' # 收件人邮箱账号,我这边发送给自己
def mail():
ret = True
try:
msg = MIMEText('两相忘,自惆怅,\n悲欢泪,心渐碎,\n恨离愁,几杯浊酒泪直流', 'plain', 'utf-8') # 邮件内容
msg['From'] = formataddr(["FromRunoob", my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["FK", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "送你一首诗" # 邮件的主题,也可以说是标题
server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
ret = False
return ret
ret = mail()
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")
Python 简单发送邮件 / 发送带各种附件邮件
写个自动发送邮件的python脚本。
用脚本发送邮件思路是:登陆邮箱-->写邮件-->发送邮件
发送邮箱设置:
得开通自己邮箱的 SMTP 功能,具体可百度。
以163网易邮箱为例: 设置 --> POP3/SMTP/IMAP --> 设置POP3/SMTP/IMAP 勾选保存
一、发送简单邮件:
用STMP库
-
import smtplib
-
#发送字符串的邮件
-
from email.mime.text import MIMEText
-
#处理多种形态的邮件主体我们需要 MIMEMultipart 类
-
from email.mime.multipart import MIMEMultipart
-
#处理图片需要 MIMEImage 类
-
from email.mime.image import MIMEImage
-
-
#设置服务器所需信息
-
fromaddr = '137xxx@163.com'#邮件发送方邮箱地址
-
password = 'zzz'#密码(部分邮箱为授权码)
-
toaddrs = ['137xxx@163.com', '137xxxxx@qq.com']#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
-
-
-
#设置email信息
-
#---------------------------发送字符串的邮件-----------------------------
-
#邮件内容设置
-
message = MIMEText('hello,ziqiiii','plain','utf-8')
-
#邮件主题
-
message['Subject'] = 'ziqiiii test email'
-
#发送方信息
-
message['From'] = sender
-
#接受方信息
-
message['To'] = receivers[0]
-
#---------------------------------------------------------------------
-
-
-
#登录并发送邮件
-
try:
-
server = smtplib.SMTP('smtp.163.com')#163邮箱服务器地址,端口默认为25
-
server.login(fromaddr,password)
-
server.sendmail(fromaddr, toaddrs, message.as_string())
-
print('success')
-
server.quit()
-
-
except smtplib.SMTPException as e:
-
print('error',e) #打印错误
二、发送各种带附件的邮件
使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。
MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。
最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。
-
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
if __name__ == '__main__':
fromaddr = 'xxxxxxxxxxx@qq.com'
password = 'xxxxxxxx'
# toaddrs = ['xxxxxxxxxx@qq.com', '137xxxx@qq.com']
toaddrs = ['xxxxxxxxx7@qq.com']
content = 'hello, this is email content.'
textApart = MIMEText(content)
图片
imageFile = '1.png'
imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])
imageApart.add_header('Content-Disposition', 'attachment', filename=imageFile)
普通文件 txt、html、、、、
pdfFile = 'D:\\HTMLReport.html'
pdfApart = MIMEApplication(open(pdfFile, 'rb').read())
pdfApart.add_header('Content-Disposition', 'attachment', filename=pdfFile)
zip文件
zipFile = '算法设计与分析基础第3版PDF.zip'
zipApart = MIMEApplication(open(zipFile, 'rb').read())
zipApart.add_header('Content-Disposition', 'attachment', filename=zipFile)
m = MIMEMultipart()
m.attach(textApart)
图片
m.attach(imageApart)
普通文件
m.attach(pdfApart)
zip文件
m.attach(zipApart)
m['Subject'] = 'title'
try:
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(fromaddr, password)
server.sendmail(fromaddr, toaddrs, m.as_string())
print('success')
server.quit()
except smtplib.SMTPException as e:
print('error:', e) # 打印错误
Airtest自动化测试交流群:739857090