day06-代码发送邮件
01发送邮件基本流程
1. 连接邮箱服务器
import smtplib
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
2. 登录邮箱
connect.login('邮箱账号', '授权码')
3. 准备邮箱内容
from email.mime.multipart import MIMEMultipart # 构建一个邮件对象的类
from email.header import Header # 创建邮件主题的类
from email.mime.text import MIMEText # 创建邮件正文的类
# 1) 创建一个空的邮件对象
email = MIMEMultipart()
# 2) 设置收件人信息
email['To'] = '收件人邮箱账号'
# 3) 设置发件人信息
email['From'] = 'xxx <发件人邮箱账号>'
# 4) 设置邮件主题
email['Subject'] = Header('第一次发送邮件', 'utf-8').encode()
# 5) 添加正文
# MIMEText(正文内容, 类型) 类型 - plain(普通文字对应的正文) 、html(超文本) 、base64(附件和图片)
msg = MIMEText('你好吗?', 'plain') # 创建正文内容
email.attach(msg) # 将正文内容添加到邮件当中
# 6) 发送邮件
connect.sendmail('发件人邮箱账号', '收件人邮箱账号', email.as_string())
# 7) 关闭连接
connect.close()
02发送附件
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('邮箱账号', '授权码')
# 3) 构建邮件
mail = MIMEMultipart()
mail['Subject'] = Header('发送邮件', 'utf-8').encode()
mail['From'] = 'xxx <发件人邮箱账号>'
mail['To'] = '收件人邮箱账号'
# 普通正文内容: MIMEText(字符串, 'plain')
msg1 = MIMEText('hello world!', 'plain', 'utf-8')
mail.attach(msg1)
# 附件: MIMEText(二进制类型的文件内容, 'base64', 'utf-8)
# 打开附件对应的文件, 并且获取文件内容
data1 = open('文件路径', 'rb').read()
file1 = MIMEText(data1, 'base64', 'utf-8')
# 设置附件在邮件中显示的位置和格式(注意: filename后面的附件名称不能有中文)
file1['Content-Disposition'] = 'attachment; filename="xxx.后缀"'
# 将附件添加到邮件中
mail.attach(file1)
# 4) 发送邮件
connect.sendmail('发件人邮箱账号', '收件人邮箱账号', email.as_string())
# 5) 关闭连接
connect.close()
03发送超文本
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
name = input('客户姓名:')
gender = input('客户性别:')
if gender == '男':
call = '先生'
else:
call = '女士'
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('邮箱账号', '授权码')
email = MIMEMultipart()
email['subject'] = Header('发送超文本', 'utf-8').encode()
email['From'] = 'xxx <发件人邮箱账号>'
email['To'] = '收件人邮箱账号'
# 构建html格式正文(读html文件内容, 获取文件内容对应的字符串)
data1 = open('文件路径', encoding='utf-8').read()
msg = MIMEText(data1, 'html')
# 将附件添加到邮件中
email.attach(msg)
# 4) 发送邮件
connect.sendmail('发件人邮箱账号', '收件人邮箱账号', email.as_string())
# 5) 关闭连接
connect.close()
04格式字符串
1. 使用格式字符串
语法 | 包含格式占位符的字符串 % (数据1, 数据2, 数据3, …) |
---|---|
说明 | 格式占位符%s – 任何类型的数据的占位%d – 数字(整数)占位符, 填充的时候会自动将数据转换成整数%f – 数字占位符, 填充的时候会让数字保留6位小数%.Nf – 数字占位符, 填充的时候会让数字保留N位小数 |
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
msg = '%s今年%d岁' % (name, age)
print(msg)
msg = 'a: %s, b: %d, c: %.1f' % ('abc', 23.9, 30.89)
print(msg)
# a: abc, b: 23, c: 30.9
# xx先生/女士, 你今年xx岁了!
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
gender = input('请输入性别:')
if gender == '男':
print('%s先生, 你今年%d岁了' % (name[0], age))
else:
print('%s女士, 你今年%d岁了' % (name[0], age))
05邮件批量发送
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
data = [
{'name': 'xx', 'gender': '女', 'score': 1000, 'email': '123@qq.com'},
{'name': 'aa', 'gender': '男', 'score': 567, 'email': '456.com'},
{'name': 'ee', 'gender': '男', 'score': 478, 'email': '777@163.com'},
{'name': 'kk', 'gender': '女', 'score': 672, 'email': '876@qq.com'},
{'name': 'll', 'gender': '男', 'score': 325, 'email': '8987@qq.com'}
]
# 1. 连接服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 2. 登陆邮箱
connect.login('邮箱账号', '授权码')
# 3. 构建邮件对象
for info in data:
# 收件人邮箱地址
to_email = info['email']
# 收件人姓名
name = info['name']
# 称呼
if info['gender'] == '女':
call = '女士'
else:
call = '先生'
# 前缀
if info['score'] >= 500:
pre = '尊敬的'
else:
pre = ''
email = MIMEMultipart()
email['Subject'] = Header('京东会员活动通知', 'utf-8').encode()
email['From'] = 'JingDong <发件方邮箱账号>'
email['To'] = to_email
email_content = open('文件路径', encoding='utf-8').read()
msg = MIMEText(email_content, 'html')
email.attach(msg)
connect.sendmail('发件方邮箱账号', to_email, email.as_string())
connect.close()
06OS常见函数
# os是python提供的专门用来处理文件或者文件夹的模块
import os
路径
绝对路径
: 文件或者是文件夹在计算机中的全路径(windows 必须从盘符开始写, 写绝对路径的时候字符串的最前面要加r)
相对路径
:
前提
: 需要操作的文件或者文件夹在工程里面的时候才可以使用相对路径a. 用
.
开头表示当前目录 (当前目录指的是, 当前代码文件所在的文件夹)
注意
: 如果相对路径是以./
开头的,./
可以省略b. 用
../
开头表示当前目录的上层目录
-
创建文件夹
os.mkdir(文件夹路径)
注意
: 创建文件夹的时候, 如果文件夹已经存在就会报错
-
判断文件或者文件夹是否已经存在
os.path.exists(文件或者文件夹路径)
-
罗列出指定文件夹中所有的内容
os.listdir(文件夹路径)
-
判断是否是文件或者文件夹
os.path.isfile(文件路径)
– 判断指定路径对应的内容是否是文件os.path.isdir(路径)
– 判断指定路径对应的内容是否是文件夹
content = os.listdir('./files') for name in content: if os.path.isfile('./files/%s' % (name)): print(name)