一、代码发送邮件
1、代码发送邮件的基本流程
import smtplib
1)连接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
2)登录邮箱
connct.login('xxx@qq.com','ilxqhvczadfwbegc')
3)准备邮箱内容
from email.mine.multipart import MIMEMultipart # 构建一个邮件对应的类
from email.header import Header # 创建邮件主题的类
from email.mine.text import MIMEText # 创建邮件内容的类
mail = MIMEMultipart() # 1)创建一个空的邮件对象
mail['From']='xx<xxx@qq.com>' #2)设置发件人信息
mail['To']='xxx@163.com' # 3)设置收件人信息
mail['Subject']=Header('发送文件','utf-8').encode()
4)创建正文
- MIMEText(正文内容, 类型)
- 类型:plain(普通文字对应的正文)、html(超文本)、base64(附件和图片)
msg=MIMEText('hello word!',plain) # a.创建正文内容
mail.attach(msg) # b.将正文内容添加到邮件中
5)发送邮件
connect.sendmail('xxx@qq.com>','xxx@163.com',mail.as_string())
6)关闭连接
connect.close()
2、附件发送
import smtplib
from email.mine.multipart import MIMEMultipart # 构建一个邮件对应的类
from email.header import Header # 创建邮件主题的类
from email.mine.text import MIMEText # 创建邮件内容的类
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
connct.login('xxx@qq.com','ilxqhvczadfwbegc')
mail = MIMEMultipart() # 1)创建一个空的邮件对象
mail['From']='xx<xxx@qq.com>' #2)设置发件人信息
mail['To']='xxx@163.com' # 3)设置收件人信息
mail['Subject']=Header('发送文件','utf-8').encode()
1)构建附件
- 附件: MIMEText(二进制类型的文件内容, ‘base64’, ‘utf-8’)
data1 = open('files/01-HQ-管理-思维导图.pdf','rb').read() # a.打开附件对应的文件,并且获取文件内容
file1 = MIMEText(data1,'base64', 'utf-8') # b. 创建附件对象,附件: MIMEText(二进制类型的文件内容, 'base64', 'utf-8')
file1['Content-Disposition'] = 'attachment;filename="midmap.pdf"' # c. 设置附件在邮件中显示的位置和格式(注意:filename后面的附件名称不能有中文)
mail.attach(file1) # d.将附件添加到邮件中
connect.sendmail('xxx@qq.com>','xxx@163.com',mail.as_string())
connect.close()
3、发送超文本
import smtplib
from email.mine.multipart import MIMEMultipart # 构建一个邮件对应的类
from email.header import Header # 创建邮件主题的类
from email.mine.text import MIMEText # 创建邮件内容的类
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
connct.login('xxx@qq.com','ilxqhvczadfwbegc')
mail = MIMEMultipart() # 1)创建一个空的邮件对象
mail['From']='xx<xxx@qq.com>' #2)设置发件人信息
mail['To']='xxx@163.com' # 3)设置收件人信息
mail['Subject']=Header('发送文件','utf-8').encode()
1) 构建html格式正文
data1 = open('file/data.html',encoding='utf-8').read()
msg = MIMEText(data1,'html')
mail.attach(msg)
connect.sendmail('xxx@qq.com>','xxx@163.com',mail.as_string())
connect.close()
4、格式字符串
-
语法:包含格式占位符得字符串 %(数据1,数据2,数据3,……)
-
说明:格式占位符
- %s - 任何类型数据的占位符
- %d - 数字(整数)占位符,填充的时候会自动将数据转换成整数
- %f - 数字(六位小数)占位符,填充的时候会让数字保留6位小数
- %.Nf - 数字占位符,填充的时候会让数字保留N位小数
name = input('请输入姓名:')
age =int(input('请输入年龄:'))
gender = input('请输入性别:')
msg = '%s今年%s岁'%(name,age)
5、批量发送
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'}
]
不需要循环操作部分:
import smtplib
from email.mine.multipart import MIMEMultipart # 构建一个邮件对应的类
from email.header import Header # 创建邮件主题的类
from email.mine.text import MIMEText # 创建邮件内容的类
connect = smtplib.SMTP_SSL('smtp.qq.com',465)
connct.login('xxx@qq.com','ilxqhvczadfwbegc')
需要循环操作:
for x in data:
a=x['name']
b=x['gender']
c=x['score']
d=x['email']
call=0
if b == '男'
call = '先生'
else:
call = '女士'
if c >= 500
pre = '尊敬的'
else:
pre = ''
mail = MIMEMultipart()
mail['From']='xx<xxx@qq.com>'
mail['To']=d
mail['Subject']=Header('批量发送文件','utf-8').encode()
data1 = open('file/data.html',encoding='utf-8').read()% (pre,a[0],call,a)
msg = MIMEText(data1,'html')
mail.attach(msg)
connect.sendmial('1772992802@qq.com',d,mail.as_string())
connect.close()
6、os
os是python提供的专门处理文件或者文件夹的模块
1)路径
- 绝对路径:文件或者文件夹在计算机中的全路径(Windows从盘开始写,而且程序写绝对路径的时候字符串的最前面要写r)
- 相对路径
- 前提:需要操作的文件或者文件加再工程里面的时候才可以使用相对路径
- 用 . 开头表示当前目录(当前目录指的是,当前代码所在的文件夹),如果相对路径是./,可以省略
- 用 … 开头表示当前目录的上层目录
2)创建文件夹
os.mkdir(文件夹路径)
- 注意:创建文件夹的时候,如果文件夹已经存在就会报错
3)判断文件或者文件夹是否已经存在
os.path.exists(文件或者文件夹路径)
回答是 True or False
4)罗列出指定文件中所有的内容
os.listdir(文件夹路径)
5)判断是否是文件或者是文件夹
- os.path.isfile(文件路径) - 判断指定路径对应的内容是否是文件
- os.path.isdir(文件路径) - 判断路径对应内容是否是文件夹