day06-代码发送邮件

代码发送邮件

一. 发送邮件基本流程

1. 链接邮箱服务器

连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端⼝)
import smtplib
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)

2. 登录邮箱

connect.login('1262xxxx863@qq.com', 'jtjsxxxxxsobaga')

3. 准备邮件内容

from email.mime.multipart import MIMEMultipart   # 构建一个邮件对应的类
from email.mime.text import MIMEText  # 创建邮件主题的类
from email.header import Header      # 创建邮件内容的类

1). 创建一个空的邮件对象

email = MIMEMultipart()

2). 设置收件人信息

email['To'] = '158xxxx48@qq.com'

3). 设置发件人信息

email['From'] = 'Hxxxxxodi <12xxxxx3@qq.com>'

4). 设置邮件主题

email['Subject'] = Header('第一次发送邮件', 'utf-8').encode()

5). 添加正文
# MIMEText(正文内容,类型)
# 类型:plain(普通文字对应的正文)、html(超文本)、base64(附件和图片)
# a.创建正文内容
msg = MIMEText('早上好呀!', 'plain')
# b.将正文内容添加到邮件中
email.attach(msg)

6). 发送邮件
connect.sendmail('1262xxxx863@qq.com', '1592xxxx220@163.com', email.as_string())

7). 关闭网站
connect.close()

二. 发送附件

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

3.构建邮件
mail = MIMEMultipart()
mail['subject'] = Header('发送附件', 'utf-8').encode()
mail['from'] = 'Huxxxxxaodi <126xxxxx63@qq.com>'
mail['To'] = '159xxxx20@163.com'

4.普通正文.MIMEMuText(字符串,'plain')
msg1 = MIMEText('快中午了,吃什么呢?', 'plain', 'utf-8')
mail.attach(msg1)

5.附件:MIMEMuText(二进制类型的文件内容,’base64‘,'utf-8'# a.打开附件对应的文件,并且获取文件内容
data1 = open('12345.jpg', 'rb').read()
# b. 创建附件对象
file1 = MIMEText(data1, 'base64', 'utf-8')
# c. 设置附件在邮件中显示的位置和格式(注意:filename后面的附件名称不能有中文)
file1['Content-Disposition'] = 'attachment; filename="1234.jpg"'
# d.将附件添加到邮件中
mail.attach(file1)

data2 = open('smtplib 邮件自动发送.pdf', 'rb').read()
file2 = MIMEText(data2, 'base64', 'utf-8')
file2['Content-Disposition'] = 'attachment; filename="smtplib Automatic mail sending.pdf"'
mail.attach(file2)

6. 发送邮件
connect.sendmail('12xxxx3863@qq.com', '126xxxx863@qq.com', mail.as_string())

7.关闭连接
connect.close()

三. 发送超文本

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('12xxxxx3@qq.com', 'jtjxxxxxxxaga')
3. 构建邮件
mail = MIMEMultipart()
mail['subject'] = Header('发送超文本', 'utf-8').encode()
mail['from'] = 'Huxxxxxaodi <126xxxxx63@qq.com>'
mail['To'] = '15927342220@163.com'

4. 构建html格式正文
data2 = open('data.html', encoding='utf-8').read()
msg = MIMEText(data2, 'html')
mail.attach(msg)

5. 发送邮件
connect.sendmail('12xxxxx863@qq.com', '12xxxxx63@qq.com', mail.as_string())

6 .关闭连接
connect.close()

四. 格式字符串

name = input('请输入姓名:')
age = int(input('请输入年龄:'))
gender = input('请输入性别:')
# 1.格式字符串
"""
a.语法:包含格式占位符的字符串 % (数据1,数据2,数据3,。。。)
b.说明:格式占位符
%s    -    任何类型的数据的占位
%d    -    数字(整数)占位符,填充的时候会自动将数据转换成整数
%f    -    数字占位符, 填充的时候会让数字保留6位小数
%.Nf    -    数字占位符, 填充的时候会让数字保留N位小数
"""
# 'xxx今年xx岁'  括号内的数据是给前面的占位符赋值,s和d
msg = '%s今年%d岁' % (name, age)
print(msg)
msg = 'a:%s, b:%d, c:%f, d:%.3f' % ('abc', 345.23, 30, 3.1415926)
print(msg)    # a:abc, b:345, c:30.000000, d:3.142


# x先生/女生,你今年xx岁!
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
gender = input('请输入性别:')
# msg = '%s%s, 你今年%d岁!' % (name, gender, age)
# if 'gender' == '男':
#     msg = '%s先生, 你今年%d岁!' % (name, gender, age)
# else:
#     msg = '%s女士, 你今年%d岁!' % (name, gender, age)
#     print(msg)
# 以上思维复杂,简化
if gender == '男':
    msg = '%s先生, 你今年%d岁!' % (name, gender, age)
else:
    msg = '%s女生, 你今年%d岁!' % (name, gender, age)
print(msg)

五.邮件批量发送

data1 = [
    {'name': '周', 'gender': '男', 'score': 1000, 'email': '70xxxx70@qq.com'},
    {'name': '安', 'gender': '男', 'score': 567, 'email': '99xxxx67@qq.com'},
    {'name': '张', 'gender': '女', 'score': 478, 'email': '19xxxxxx14@qq.com'},
    {'name': '黄', 'gender': '女', 'score': 672, 'email': '126xxxxx863@qq.com'},
    {'name': '邓', 'gender': '女', 'score': 2304, 'email': '159xxxxxx220@163.com'}
]
1)基本功能:给上面data中所有客户发送购票邮件,如果积分在500以上的,在称呼加’尊敬的‘
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('12xxxxxx863@qq.com', 'jtjsxxxxxxbaga')
# 3.构建邮件对象(写信)
for info in data1:
    # 收件人邮箱地址
    to_email = info['email']
    # 收件人姓名
    name = info['name']
     # 称呼
    if info['gender'] == '女':
        call = '女士'
    else:
        call = '先生'
#         前缀
    if info['score'] >= 500:
        pre = '尊敬的'
    else:
        pre = ''

# 2)创建邮件
mail = MIMEMultipart()
mail['subject'] = Header('网上购票系统-用户购票成功通知', 'utf-8').encode()
mail['from'] = '12306 <12xxxxx863@qq.com>'
mail['To'] = to_email
# 占位符去定义
email_content = open('data.html', encoding='utf-8').read() % (pre+name[0], call, name)
msg = MIMEText(email_content, 'html')
mail.attach(msg)

# 3)发送邮件
connect.sendmail('12xxxxx63@qq.com', to_email, mail.as_string())

connect.close()

六. OS常见函数

import os

os是python提供的专门用来出来文件或者文件夹的模块。

# 路径
"""
1)绝对路径:文件或者文件夹在计算机中的全路径(windows从盘开始,而且程序写绝对路径的时候字符串的最前面要加r)
2)相对路径:
前提:需要操作的文件或者文件夹在工程里面的时候才可以使用相对路径
a.用 . 开头表示当前目录(当面目录指的是,当前代码文件所在的文件夹)
b.用 .. 开头表示当前目录的上层目录
"""
# path = 'D:\千峰Python作业\基础班作业\06-代码发送邮件\1234.jpg'
# print(path)
# open(文件路径)
# 1.创建文件夹
# os.mkdir(文件夹路径)
# 注意:创建文件夹的时候,文件夹不存在才能创建,如果存在还要创建就会报错
# os.mkdir('./names')   # 创建文件夹在当前目录下,文件夹名字叫names
# os.mkdir('./files/abc')  # 在files下创建一个文件夹叫abd

# 2.判断文件或者文件夹是否已经存在
# os.path.exists(文件或者文件夹路径)

# 在files下面创建img文件夹
# if not os.path.exists('./千峰Python作业/ng'):
#     os.mkdir('./ng')

# 3.罗列出指定文件夹中所有的内容
# os.listdir(文件夹路径)
content = os.listdir('./img')
print(content)

# 4.判断是否是文件或者文件夹
# 1)os.path.isfile(文件路径)    -    判断指定路径对应的内容是否是文件
# 2) os.path.isdie(路径)     -      判断指定路径对应的内容是否是文件夹
result = os.path.isfile('./img/1234.jpg')
print(result)
print('-----------------------------------------专属分割线----------------------------------------------------')
for name in content:
    if os.path.isfile('./img/%s' % (name)):
        print(name)

七.作业

data1 = [
    {'name': '周',  'gender': '男', 'email': '709xxxx70@qq.com'},
    {'name': '安', 'gender': '男', 'email': '993xxxx67@qq.com'},
    {'name': '张', 'gender': '女', 'email': '195xxxx914@qq.com'},
    {'name': '黄',  'gender': '女', 'email': '126xxxx863@qq.com'},
    {'name': '邓', 'gender': '女', 'email': '1592xxxx220@163.com'}
]

给多个客户同时发送多个附件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
# 连接邮箱网站
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 登录自己的邮箱账号
connect.login('126xxxx863@qq.com', 'jtxxxxbaga')

# 创建邮件内容(因为要措辞发送给很多人,所以需要用到for循环)
# 拿到发送邮件的对象和姓名
for i in data:
    name = i['name']
    to_email = i['email']
    if i['gender'] == '女':
        call = '女士'
    else:
        call = '先生'
# 开始写邮件的正文内容
    # 点击写邮件按钮、写邮件的标题、寄件人邮箱、收件人邮箱
    email = MIMEMultipart()
    email['Subject'] = Header('附件同步', 'utf-8').encode()
    email['From'] = 'DIDI <126xxxxx63@qq.com>'
    email['To'] = to_email
# 写邮件的正文
    msg1 = MIMEText('尊敬的%s%s,\n\t下面是多个附件,请注意查收!' % (name, call), 'plain')  # msg20 = '%s今年%d岁' % (name,age)
    email.attach(msg1)
# 添加邮件的附件进去   # 罗列出指定文件夹中所有的内容 os.listdir(文件夹路径),需要用到for循环
    # print(os.listdir('./img'))
    for x in os.listdir('./img'):
        url = 'img/%s' % x
        file_data = open(url, 'rb').read()
        file = MIMEText(file_data, 'base64', 'utf-8')
        file['Content-Disposition'] = 'attachment; filename="%s"' % (x)
        email.attach(file)
    # 以下如果附件中有中文字符,想发送且需要字符不乱码的时候可以使用
    # for x in os.listdir('./img'):  # 在文件夹中获取文件,需要循环遍历文件夹中的文件内容,每个邮件都需要遍历一遍,所以放在上面的循环里面
    #     file = open('./img/' + x, 'rb').read()
    #     msg2 = MIMEText(file, 'base64', 'utf-8')
    #     msg2['Content-Disposition'] = 'attachment; filename="%s"' % (x)
    #     email.attach(msg2)
    #     msg2['content-Type'] = 'application/octet-stream'
    #     msg2.add_header('Content-Disposition', '', filename=('gbk', '', '{}'.format(x)))
    # # 发送邮件及附件给上面所有人
    connect.sendmail('126XXXX63@qq.com', to_email, email.as_string())

# 全部发完,关闭邮件网页
connect.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值