day 06 自动发送邮件 课堂笔记

day 06 自动发送邮件 课堂笔记

  • 准备工作
    • 邮箱账号:
    • 授权码:登录之后——设置——账户——下拉pop/imap/smtp——开启服务状态保存授权码
    • smtplib库

一、自动发送邮件流程

1、代码发送普通邮件

  1. 登录邮箱

    # 引入 smtplib 库
    import smtplib
    
    # 连接邮箱服务器
    '''
    连接对象 = smtplib.SMTP_SSL(服务器地址, 邮箱服务端口)
    - 服务器地址:smtp.qq.com 、 smtp.163.com
    - 邮箱服务端口:465 或 25
    eg:
    connect = smtp.SMTP_SSL('smtp.qq.com', 465)
    '''
    
    # 登录邮箱
    '''
    连接对象.login(邮箱账号, 授权码)
    eg:
    connect.login('*********@qq.com', '******')
    '''
    
  2. 准备邮件内容

    # 使用 email 库里的函数
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header
    
    # 创建邮件对象
    邮件对象 = MIMEMultipart()
    # 设置邮件主题		Header(邮件标题, 编码方式).encode() : 主题对象
    邮件对象['Subject'] = Header(邮件标题, 编码方式).encode()
    # 设置邮件收件人
    邮件对象['To'] = '收件人'
    # 设置发送人
    邮件对象['From'] = '用户名 <邮箱地址>'	# 用户名可以随意修改,最好用英文
    # 添加文字内容 (内容为字符串时,类型写 plain)
    文字内容对象 = MIMEText(内容, 类型, 编码方式)
    - 内容就是文字字符串
    - 类型:plain(简单的文字内容)、html(超文本)
    邮件对象.attach(文字内容对象)
    
  3. 发送邮件

    # 发送邮件
    连接对象.sendmail(发件人, 收件人, 邮件对象.as_string())
    # 退出连接
    连接对象.close()
    

2、代码发送附件

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('********@qq.com', '**********')

# 3.构建邮件
# 创建邮件对象
mail = MIMEMultipart()
# 设置邮件主题
mail['Subject'] = Header('附件传输', 'utf-8').encode()
# 邮件发送者与接收者
mail['From'] = '**** <*********@qq.com>'
mail['To'] = '*********@163.com'


# 附件:MIMEText(二进制类型的文件内容, 'base64', 'utf-8')
# 打开附件对应文件,并获取文件内容(打开方式为rb)
data = open('files/smtplib_sendmail.pdf', 'rb').read()
# 创建附件对象
file1 = MIMEText(data, 'base64', 'utf-8')
# 设置附件在邮件中显示的位置和格式(注意:filename后面的附件名称不能有中文)
# 注意:filename是发送过去后,对方接收到该文件时,看见的文件名,可修改,其他地方是固定写法
# content-disposition:附件位置		attachment:附件
file1['Content-Disposition'] = 'attachment; filename="123.pdf"'
# 将附件添加到邮件中
mail.attach(file1)

# 4.发送邮件
connect.sendmail('*********@qq.com', '*********@163.com', mail.as_string())

# 5.关闭
connect.close()


二、格式字符串

  • 语法:包含格式占位符的字符串 % (数据1, 数据2, 数据3, …)

  • 说明:格式占位符如下

    • %s - 任何类型的占位符
    • %d - 数字(整数)占位符,填充时会自动将数据转换为整型
    • %f - 数字(浮点数)占位符,填充时会让数字保留6位小数
      • %.nf - 浮点数占位符的变形,填充时让数字保留n位小数
    # *先生/女士,你今年**岁啦!
    name = input('请输入姓名:')
    age = int(input('请输入年龄:'))
    gender = input('请输入性别:')
    n_gender = '先生'
    if gender == '女':
        n_gender = '女士'
    print('%s%s,你今年%d岁啦!' % (name[0], n_gender, age))
    

三、发送超文本

  • 在代码文件夹下的files文件夹下有一个你需要发送的超文本文件
# 引库
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText

# 输入姓名和性别,判断是先生还是女士
name = input('请输入姓名:')
gender = input('请输入性别:')
n_gender = '先生'
if gender == '女':
    n_gender = '女士'

# 连接邮箱服务器并登录
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('*********@qq.com', '**授权码**')

email = MIMEMultipart()
email['Subject'] = Header('发送超文本', 'utf-8').encode()
email['To'] = '*********@163.com'
email['From'] = '*********@qq.com'

# 构建html格式正文,(读取html文件内容,获取文件对应字符串)
data = open('files/data.html', encoding='utf-8').read() % (name[0], n_gender, name)
msg = MIMEText(data, 'html')
email.attach(msg)

connect.sendmail('**from**@qq.com', '****to***@163.com', email.as_string())
connect.close()

三、批量发送文件

基本功能:

给下面data列表中所有用户发送邮件,若积分大于500,在称呼前加’尊敬的’

data = [
    {'name': '余婷', 'gender': '女', 'score': 1000, 'email': '*********@qq.com'},
    {'name': '张三', 'gender': '男', 'score': 567, 'email': '*********.com'},
    {'name': '朱聪', 'gender': '男', 'score': 478, 'email': '*********@163.com'},
    {'name': '马诗雨', 'gender': '女', 'score': 672, 'email': '*********@qq.com'},
    {'name': '李相葛', 'gender': '男', 'score': 325, 'email': '*********@qq.com'},
    {'name': '胡洋', 'gender': '男', 'score': 666, 'email': '*********@163.com'}
]

# 引库
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)
connect.login('*********@qq.com', '*********')

dear = ''
for i in data:
    n_gender = '先生'
    if i['gender'] == '女':
        n_gender = "女士"
    if i['score'] >= 500:
        dear = '尊敬的:'
    # 2.构建邮箱(点击写信)
    email = MIMEMultipart()     # 创建一个空的邮件对象
    email['Subject'] = Header('订票通知', 'utf-8').encode()      # 邮件主题
    email['From'] = '12306YOUXIANG<*********@qq.com> '     # 发件人信息
    email['To'] = '%s' % (i['email'])       # 收件人信息

    data1 = open('files/data.html', encoding='utf-8').read() % (dear, i['name'][0], n_gender, i['name'])
    msg = MIMEText(data1, 'html')       # 创建正文内容
    email.attach(msg)       # 将正文添加到邮箱中

    # 3.发送邮件
    connect.sendmail('*********@qq.com', '%s' % (i['email']), email.as_string())        #发送邮件
connect.close()     # 关闭网页

四、os常见函数

  • os是python提供的专门用于处理文件或文件夹的模块
  • 菜鸟教程

1、路径

  • 绝对路径

    • 文件或文件夹在计算机中的全路径
    • windows电脑从盘开始写,写绝对路径时,需在字符串前加r(因为路径与 \ 结合可能会产生转义)
    path = r'F:\qianfeng_study\python_project\src\day6\files\data'
    
  • 相对路径

    • 使用前提:需要操作的文件或文件夹在工程目录中时才可以使用相对路径
      • a. 用 . 开头表示当前目录(当前代码文件所在的文件夹)
      • b. 用… 开头表示当前目录的上一层目录(当前代码所在文件夹的上一层目录)
    # 1.创建文件夹
    # os.mkdir(文件夹路径)
    # 注意:创建文件夹时,如果文件夹已经存在,会报错!
    '''
    os.mkdir('./names')     #在当前文件夹下创建一个名为 names 的文件夹
    os.mkdir('./files/abc')    #在当前文件夹下的 files 文件夹下创建一个名为 abc 的文件夹
    '''
    
    
    # 2.判断文件或文件夹是否已经存在
    # os.path.exists(文件或文件夹路径)
    result = os.path.exists('files/a')
    print(result)
    
    result = os.path.exists('files/data.html')
    print(result)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值