DAY 06 用代码来发送文件
一 . 邮件发送的基本流程
- 连接服务器
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
- 登录邮箱
connect.login('1062862550@qq.com','svsnjiruevnlbcbb')
- 准备邮件内容
① 创建一个空的邮件对象
from email.mime.multipart import MIMEMultipart
# 这是构建一个邮件对应的类,相当于一个空的邮件
from email.header import Header
# 创建一个邮件的主题
from email.mime.text import MIMEText
#创建邮件的内容
email = MIMEMultipart()
② 设置收件人信息
email['To'] = '2219190038@qq.com'
③ 设置发件人信息
email['From'] = 'shixin <1062862550@qq.com>'
#第一个可以修改收到的发件人信息
④ 设置邮件主题
email['Subject'] = Header('你好嘛','utf-8').encode()
⑤添加正文
MIMEText(正文内容,类型)
类型:pLain (普通文字对应的正文),html(超文本)base64(附件和图片)
#a.创建正文内容
msg = MIMEText('你好','plain')
#b.将正文内容添加到邮件种
email.attach(msg)
- 发送邮件
connect.sendmail('1062862550@qq.com','2219190038@qq.com',email.as_string())
#第一个收件,第二个发件
- 关闭链接
connect.close()
二 发送附件
*import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
-
连接邮箱服务器
onnect = smtplib.SMTP_SSL('smtp.qq.com',465)
-
登陆邮箱
connect.login('1062862550@qq.com','svsnjiruevnlbcbb')
- 构建邮箱
email = MIMEMultipart()
email['Subject'] = Header('休息','utf-8').encode()
email['From'] = 'shixin <1062862550@qq.com>'
email['To'] = '2219190038@qq.com'
a.普通正文
msg1 = MIMEText('hello world ','plain')
email.attach(msg1)
①.打开附件对应的文件,并且获取文件内容
data = open(' wenjian/smtplib 邮件自动发送.pdf','rb').read()
②.创建附件对象
wenjian = MIMEText(data,'base64','utf-8')
③.设置附件在邮件种显示的位置和格式(注意ilename后面的附件名称不能有中文
wenjian['Content-Disposition'] = 'attachment; filename="smtp.pdf"'
④.将附件添加到邮件中
email.attach(wenjian)
- 发送邮件
connect.sendmail('1062862550@qq.com', '2219190038@qq.com', email.as_string())
- 关闭连接
connect.close()
三.发送超文本
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
conect = smtplib.SMTP_SSL('smtp.qq.com',465)
conect.login('1062862550@qq.com','svsnjiruevnlbcbb')
email = MIMEMultipart()
email['Subject']= Header('发生超文本','utf-8').encode()
email['From'] = 'shixin <1062862550@qq.com>'
email['To'] = 'y_t209@163.com'
#构建html格式正文 (读html文件内容,获取文件内容对应的字符串)
data1 = open(' wenjian/data.html',encoding='utf-8').read()
msg = MIMEText(data1,'html')
email.attach(msg)
conect.sendmail('1062862550@qq.com', 'y_t209@163.com', email.as_string())
conect.close()
四.格式字符串
a.语法 ;包含格式占位符的字符串 % (数据1,数据2.数据3.....)
b. 说明:格式占位符
%s - 任何类型的数据占位
%d - 数字(整数)占位符,填充的时候会把数据自动转换为整数
%f - 数字占位符,填充的时候会将字数转化为小数,并保留6位小数
%.NF - 数字占位符,填充的时候会让数字保留N位小数 (多用于金额的时候)
五.邮件的批量发送
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
例
data = [
{'name': '余婷', 'gender': '女', 'score': 1000, 'email': '726550822@qq.com'},
{'name': '张三', 'gender': '男', 'score': 567, 'email': 'y_t209@163.com'},
{'name': '朱聪', 'gender': '男', 'score': 478, 'email': 'zhuucc@163.com'},
{'name': '马诗雨', 'gender': '女', 'score': 672, 'email': '873925431@qq.com'},
{'name': '李相葛', 'gender': '男', 'score': 325, 'email': '1873215638@qq.com'}
]
# 基本功能:给上面data种所有客户发送邮件,如果积分在500分以上,称呼前面加上‘’尊敬
①.连接服务器
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
②.登录邮箱
connect.login('1062862550@qq.com','svsnjiruevnlbcbb')
③.构建邮件对象(写信)
a.
for info in data :
#收件人邮箱地址
to_email = info['email']
#收件人姓名
name = info['name']
#称呼
if info['gender'] == '女':
call = '女士'
else :
call = '先生'
#前缀
if info['score'] >= 500:
pre = '尊敬的'
else:
pre = ''
b. 创建邮件
email = MIMEMultipart()
email['Subject'] = Header('京东会员活动通知', 'utf-8').encode()
email['From'] = 'JingDong <1062862550@qq.com>'
email['To'] = to_email
email_content =open('we',encoding='utf-8').read() . %(pre + name[0], call, name)
msg = MIMEText(email_content, 'html')
email.attach(msg)
③. 发送邮件
connect.sendmail('726550822@qq.com', to_email, email.as_string())
④.关闭连接
connect.close()
六.os常见函数
import os
os 是python提供的专门用来处理文件或者文件夹的模块
- 路径
语法:open(文件路径)
1)绝对路径:文件或者文件夹在计算机中的全路径 (windos需要从C盘开始写,字符串的最前面加r)
2)相对路径:
前提:需要操作的文件或者文件夹在工程里面的时候才可以使用相对路径
a。用 . 表示当前目录 (当前目录指的是,当前代码文件所在的文件夹)
注意:如果相对路径是以‘./开头的,可以省略./’
b 用 .. 开头表示当前目录的上层目录
- 创建文件夹
os.mkdir(文件夹路径)
#创建文件夹的时候,如果文件夹已经存在会报错!
- 判断文件或者文件夹是否已经存在
# os.path.exists(文件或者文件夹路径)
#创建wenjian下面常见img文件夹
if not os.path.exists('./wenjian/img'):
os.mkdir('./wenjian/img')
- 罗列除指点文件夹中所有内容
content = os.listdir('./wenjian'):
print(content)
- 判断是否是文件或者文件夹
# 1)os.path.isfile(路径) - 判断指定路径对应的内容是否是文件
# 2)os.path.isdir(路径) - 判断指定路径对应的内容是否是文件夹
result = os.path.isfile('./wenjian/test'):
print(result)
for name in content:
if os.path.isfile('./wenjian/%s' %(name)):
print(name)