1.使用python给自己发送一个邮件
smtplib-SMTP协议客户端:https://docs.python.org/3/library/smtplib.html
那么今天我们要使用python来发送邮件的话需要用到哪些知识呢?
import smtplib
message=smtplib.SMTP()
message.connect(host,port)
#链接服务器 host:服务器 port:端口号
message.login(username,password)
#登录邮箱 username:登录邮箱的用户名 password:授权码
message.sendmail(from_addr,to_addr,msg.as_string())
#发送邮件
#from_addr:邮件发送地址,就是上面的username
#to_addr:邮件收件人地址
#msg.as_string():为一个字符串类型
message.quit()
#退出服务器,结束SMTP会话
①smtplib模块
②SMTP (Simple Mail Transfer Protocol):“简单邮件传输协议”(我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器)一般情况下SMTP默认端口号为25
③发邮件时自行搜索邮箱的服务器名称 (host)和端口号(port)
import smtplib
server = smtplib.SMTP_SSL()
#如果端口是用SSL加密,请这样写代码。其中server是变量名
server.connect('smtp.qq.com', 465)
#如果出现编码错误UnicodeDecodeError,你可以这样写:server.connect('smtp.qq.com', 465,'utf-8')
每种形式对应的导入方式为:
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
“模块”和“包”的区别:模块(module)一般是一个文件,而包(package)是一个目录,一个包中可以包含很多个模块,可以说包是“模块打包”组成的。
#从email包下的text文件中引入MIMEText方法
from email.mime.text import MIMEText
编辑所发送邮件的内容使用的函数MIMEText():
MIMEText(msg,type,chartset)
# msg:文本内容,可自定义
# type:文本类型,默认为plain(纯文本)
# chartset:文本编码,中文为“utf-8”
发送一条邮件:
#1.导入模块
import smtplib#smtplib用于邮件的发信动作
from email.mime.text import MIMEText
#2.定义变量 MIMEText(msg,type,chartst)
from_addr='[email protected]'#发信方的地址信息
password='xxxxxxxxxx'#发信方的授权码
to_addr='[email protected]'#收件方邮箱
smtp_sever='smtp.qq.com'#发信服务器
msg=MIMEText('u收到我的晚安了吗?','plain','utf-8')#发送的文本信息
#3.使用方法
sever=smtplib.SMTP_SSL(smtp_sever)#开启发信服务,这里是使用加密传输
sever.connect(smtp_sever,25)#链接服务器(服务器,端口)
sever.login(from_addr,password)#登录发信邮箱
sever.sendmail(from_addr,to_addr,msg.as_string())#发送邮件
sever.quit()#退出
2.发送一个包含发件人和标题的完整文件
from email.header import Header
msg['From'] = Header('xxx')
msg['To'] = Header('xxx')
msg['Subject'] = Header('xxx')
3.群发邮件
①是将收件人信箱的变量设置成一个可以装多个内容的列表:
to_addrs = ['[email protected]','[email protected]']
msg['To'] = Header(','.join(t0_addr))
这里涉及到一个join函数:join()的用法是str.join(sequence),str代表在这些字符串之中你要用什么字符串来连接
a=['d','o','g']
b=','
print(b.join(a)) #输出d,o,g
c='-'
print(c.join(a)) #输出d-o-g
②定义一个空数组,编写一个while循环,使用input()函数获取输入的好友邮箱地址,用append()函数将邮件地址元素放入数组中,循环中询问是否继续添加群发邮箱地址。
③调用csv模板
import csv
#引用csv模块。
data = [['123 ', '[email protected]'],['456', '[email protected]']]
#待写入csv文件的内容
with open('to_addrs.csv', 'w', newline='') as f:#使用的是with语句新建to_addr.csv文件
writer = csv.writer(f)
for row in data:
writer.writerow(row)#通过遍历列表data将数据一行行写到了to_addrs.csv文件中
读取文件read():
#import csv
#引入模块、打开文件、读取文件
with open('to_addrs.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
to_addrs=row[1] #row[1]表示csv文件中第1列的数据
整个过程:
import smtplib
# smtplib 用于邮件的发信动作
from email.mime.text import MIMEText
# email 用于构建邮件内容
from email.header import Header
# 用于构建邮件头
import csv
# 引用csv模块,用于读取邮箱信息
# 发信方的信息:发信邮箱,QQ邮箱授权码
# 方便起见,你也可以直接赋值
from_addr = input('请输入登录邮箱:')
password = input('请输入邮箱授权码:')
# 发信服务器
smtp_server = 'smtp.qq.com'
# 邮件内容
text='''
演员需要保持神秘感
才会给观众带来惊喜的作品
对演员来说观众才是最重要的
就继续创作出好的作品来回馈观众
我们一起加油,一起并肩前行
希望未来可以在中国影视行业留名
加油(づ ̄ 3 ̄)づ
'''
# 待写入csv文件的收件人数据:人名+邮箱
# 记得替换成你要发送的名字和邮箱
data = [['二宝', '[email protected]'],['大虎子', '[email protected]']]
# 写入收件人数据
with open('to_addrs.csv', 'w', newline='') as f:
writer = csv.writer(f)
for row in data:
writer.writerow(row)
# 读取收件人数据,并启动写信和发信流程
with open('to_addrs.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
to_addrs=row[1]
msg = MIMEText(text,'plain','utf-8')
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addrs)
msg['Subject'] = Header('python test')
server = smtplib.SMTP_SSL()
server.connect(smtp_server,465)
server.login(from_addr, password)
server.sendmail(from_addr, to_addrs, msg.as_string())
# 关闭服务器
server.quit()
或许为了严谨可以增加一段异常处理代码:
try:
server.sendmail(from_addr, to_addrs, msg.as_string())
print('恭喜,发送成功')
except:
print('发送失败,请重试')