代码发送邮件
一. 发送邮件基本流程
1. 链接邮箱服务器
连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端⼝)
import smtplib
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
2. 登录邮箱
connect.login('1262xxxx863@qq.com', 'jtjsxxxxxsobaga')
3. 准备邮件内容
from email.mime.multipart import MIMEMultipart # 构建一个邮件对应的类
from email.mime.text import MIMEText # 创建邮件主题的类
from email.header import Header # 创建邮件内容的类
1). 创建一个空的邮件对象
email = MIMEMultipart()
2). 设置收件人信息
email['To'] = '158xxxx48@qq.com'
3). 设置发件人信息
email['From'] = 'Hxxxxxodi <12xxxxx3@qq.com>'
4). 设置邮件主题
email['Subject'] = Header('第一次发送邮件', 'utf-8').encode()
5). 添加正文
# MIMEText(正文内容,类型)
# 类型:plain(普通文字对应的正文)、html(超文本)、base64(附件和图片)
# a.创建正文内容
msg = MIMEText('早上好呀!', 'plain')
# b.将正文内容添加到邮件中
email.attach(msg)
6). 发送邮件
connect.sendmail('1262xxxx863@qq.com', '1592xxxx220@163.com', email.as_string())
7). 关闭网站
connect.close()
二. 发送附件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
1.链接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
2.登录邮箱
connect.login('12625xxxxx@qq.com', 'jtjsxxxxxobaga')
3.构建邮件
mail = MIMEMultipart()
mail['subject'] = Header('发送附件', 'utf-8').encode()
mail['from'] = 'Huxxxxxaodi <126xxxxx63@qq.com>'
mail['To'] = '159xxxx20@163.com'
4.普通正文.MIMEMuText(字符串,'plain')
msg1 = MIMEText('快中午了,吃什么呢?', 'plain', 'utf-8')
mail.attach(msg1)
5.附件:MIMEMuText(二进制类型的文件内容,’base64‘,'utf-8')
# a.打开附件对应的文件,并且获取文件内容
data1 = open('12345.jpg', 'rb').read()
# b. 创建附件对象
file1 = MIMEText(data1, 'base64', 'utf-8')
# c. 设置附件在邮件中显示的位置和格式(注意:filename后面的附件名称不能有中文)
file1['Content-Disposition'] = 'attachment; filename="1234.jpg"'
# d.将附件添加到邮件中
mail.attach(file1)
data2 = open('smtplib 邮件自动发送.pdf', 'rb').read()
file2 = MIMEText(data2, 'base64', 'utf-8')
file2['Content-Disposition'] = 'attachment; filename="smtplib Automatic mail sending.pdf"'
mail.attach(file2)
6. 发送邮件
connect.sendmail('12xxxx3863@qq.com', '126xxxx863@qq.com', mail.as_string())
7.关闭连接
connect.close()
三. 发送超文本
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
1. 链接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
2. 登录邮箱
connect.login('12xxxxx3@qq.com', 'jtjxxxxxxxaga')
3. 构建邮件
mail = MIMEMultipart()
mail['subject'] = Header('发送超文本', 'utf-8').encode()
mail['from'] = 'Huxxxxxaodi <126xxxxx63@qq.com>'
mail['To'] = '15927342220@163.com'
4. 构建html格式正文
data2 = open('data.html', encoding='utf-8').read()
msg = MIMEText(data2, 'html')
mail.attach(msg)
5. 发送邮件
connect.sendmail('12xxxxx863@qq.com', '12xxxxx63@qq.com', mail.as_string())
6 .关闭连接
connect.close()
四. 格式字符串
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
gender = input('请输入性别:')
# 1.格式字符串
"""
a.语法:包含格式占位符的字符串 % (数据1,数据2,数据3,。。。)
b.说明:格式占位符
%s - 任何类型的数据的占位
%d - 数字(整数)占位符,填充的时候会自动将数据转换成整数
%f - 数字占位符, 填充的时候会让数字保留6位小数
%.Nf - 数字占位符, 填充的时候会让数字保留N位小数
"""
# 'xxx今年xx岁' 括号内的数据是给前面的占位符赋值,s和d
msg = '%s今年%d岁' % (name, age)
print(msg)
msg = 'a:%s, b:%d, c:%f, d:%.3f' % ('abc', 345.23, 30, 3.1415926)
print(msg) # a:abc, b:345, c:30.000000, d:3.142
# x先生/女生,你今年xx岁!
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
gender = input('请输入性别:')
# msg = '%s%s, 你今年%d岁!' % (name, gender, age)
# if 'gender' == '男':
# msg = '%s先生, 你今年%d岁!' % (name, gender, age)
# else:
# msg = '%s女士, 你今年%d岁!' % (name, gender, age)
# print(msg)
# 以上思维复杂,简化
if gender == '男':
msg = '%s先生, 你今年%d岁!' % (name, gender, age)
else:
msg = '%s女生, 你今年%d岁!' % (name, gender, age)
print(msg)
五.邮件批量发送
data1 = [
{'name': '周', 'gender': '男', 'score': 1000, 'email': '70xxxx70@qq.com'},
{'name': '安', 'gender': '男', 'score': 567, 'email': '99xxxx67@qq.com'},
{'name': '张', 'gender': '女', 'score': 478, 'email': '19xxxxxx14@qq.com'},
{'name': '黄', 'gender': '女', 'score': 672, 'email': '126xxxxx863@qq.com'},
{'name': '邓', 'gender': '女', 'score': 2304, 'email': '159xxxxxx220@163.com'}
]
1)基本功能:给上面data中所有客户发送购票邮件,如果积分在500以上的,在称呼加’尊敬的‘
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
# 1.连接服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 2.登录账号
connect.login('12xxxxxx863@qq.com', 'jtjsxxxxxxbaga')
# 3.构建邮件对象(写信)
for info in data1:
# 收件人邮箱地址
to_email = info['email']
# 收件人姓名
name = info['name']
# 称呼
if info['gender'] == '女':
call = '女士'
else:
call = '先生'
# 前缀
if info['score'] >= 500:
pre = '尊敬的'
else:
pre = ''
# 2)创建邮件
mail = MIMEMultipart()
mail['subject'] = Header('网上购票系统-用户购票成功通知', 'utf-8').encode()
mail['from'] = '12306 <12xxxxx863@qq.com>'
mail['To'] = to_email
# 占位符去定义
email_content = open('data.html', encoding='utf-8').read() % (pre+name[0], call, name)
msg = MIMEText(email_content, 'html')
mail.attach(msg)
# 3)发送邮件
connect.sendmail('12xxxxx63@qq.com', to_email, mail.as_string())
connect.close()
六. OS常见函数
import os
os是python提供的专门用来出来文件或者文件夹的模块。
# 路径
"""
1)绝对路径:文件或者文件夹在计算机中的全路径(windows从盘开始,而且程序写绝对路径的时候字符串的最前面要加r)
2)相对路径:
前提:需要操作的文件或者文件夹在工程里面的时候才可以使用相对路径
a.用 . 开头表示当前目录(当面目录指的是,当前代码文件所在的文件夹)
b.用 .. 开头表示当前目录的上层目录
"""
# path = 'D:\千峰Python作业\基础班作业\06-代码发送邮件\1234.jpg'
# print(path)
# open(文件路径)
# 1.创建文件夹
# os.mkdir(文件夹路径)
# 注意:创建文件夹的时候,文件夹不存在才能创建,如果存在还要创建就会报错
# os.mkdir('./names') # 创建文件夹在当前目录下,文件夹名字叫names
# os.mkdir('./files/abc') # 在files下创建一个文件夹叫abd
# 2.判断文件或者文件夹是否已经存在
# os.path.exists(文件或者文件夹路径)
# 在files下面创建img文件夹
# if not os.path.exists('./千峰Python作业/ng'):
# os.mkdir('./ng')
# 3.罗列出指定文件夹中所有的内容
# os.listdir(文件夹路径)
content = os.listdir('./img')
print(content)
# 4.判断是否是文件或者文件夹
# 1)os.path.isfile(文件路径) - 判断指定路径对应的内容是否是文件
# 2) os.path.isdie(路径) - 判断指定路径对应的内容是否是文件夹
result = os.path.isfile('./img/1234.jpg')
print(result)
print('-----------------------------------------专属分割线----------------------------------------------------')
for name in content:
if os.path.isfile('./img/%s' % (name)):
print(name)
七.作业
data1 = [
{'name': '周', 'gender': '男', 'email': '709xxxx70@qq.com'},
{'name': '安', 'gender': '男', 'email': '993xxxx67@qq.com'},
{'name': '张', 'gender': '女', 'email': '195xxxx914@qq.com'},
{'name': '黄', 'gender': '女', 'email': '126xxxx863@qq.com'},
{'name': '邓', 'gender': '女', 'email': '1592xxxx220@163.com'}
]
给多个客户同时发送多个附件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
# 连接邮箱网站
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录自己的邮箱账号
connect.login('126xxxx863@qq.com', 'jtxxxxbaga')
# 创建邮件内容(因为要措辞发送给很多人,所以需要用到for循环)
# 拿到发送邮件的对象和姓名
for i in data:
name = i['name']
to_email = i['email']
if i['gender'] == '女':
call = '女士'
else:
call = '先生'
# 开始写邮件的正文内容
# 点击写邮件按钮、写邮件的标题、寄件人邮箱、收件人邮箱
email = MIMEMultipart()
email['Subject'] = Header('附件同步', 'utf-8').encode()
email['From'] = 'DIDI <126xxxxx63@qq.com>'
email['To'] = to_email
# 写邮件的正文
msg1 = MIMEText('尊敬的%s%s,\n\t下面是多个附件,请注意查收!' % (name, call), 'plain') # msg20 = '%s今年%d岁' % (name,age)
email.attach(msg1)
# 添加邮件的附件进去 # 罗列出指定文件夹中所有的内容 os.listdir(文件夹路径),需要用到for循环
# print(os.listdir('./img'))
for x in os.listdir('./img'):
url = 'img/%s' % x
file_data = open(url, 'rb').read()
file = MIMEText(file_data, 'base64', 'utf-8')
file['Content-Disposition'] = 'attachment; filename="%s"' % (x)
email.attach(file)
# 以下如果附件中有中文字符,想发送且需要字符不乱码的时候可以使用
# for x in os.listdir('./img'): # 在文件夹中获取文件,需要循环遍历文件夹中的文件内容,每个邮件都需要遍历一遍,所以放在上面的循环里面
# file = open('./img/' + x, 'rb').read()
# msg2 = MIMEText(file, 'base64', 'utf-8')
# msg2['Content-Disposition'] = 'attachment; filename="%s"' % (x)
# email.attach(msg2)
# msg2['content-Type'] = 'application/octet-stream'
# msg2.add_header('Content-Disposition', '', filename=('gbk', '', '{}'.format(x)))
# # 发送邮件及附件给上面所有人
connect.sendmail('126XXXX63@qq.com', to_email, email.as_string())
# 全部发完,关闭邮件网页
connect.close()