day06-代码发送邮件

一、代码发送邮件

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(文件路径) - 判断路径对应内容是否是文件夹
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值