python笔记 基础语法·第17课 【发邮件,smtplib模块,email模块,群发邮件的三种方式】

发邮件

【smtplib】用来发邮件
【email】用来构建邮件内容
以上两个模块同属于python内置模块

smtplib 模块

点击查看官方文本说明
点击查看百度教程汇总

smtplib模块使用方法

使用方法说明

import smtplib

server = smtplib.SMTP()
server.connect(host, port)
#host:发邮件服务器
#port:服务器端口
server.login(username, password) 
#username:登录邮箱的用户名
#password:登录密码/授权码
server.sendmail(sender, to_addr, msg.as_string()) 
#from_addr:邮件发送地址,就是上面的username
#to_addr:邮件收件人地址
#msg.as_string():为一个字符串类型 
server.quit() 
#退出服务器,结束SMTP会话

示例1(以QQ邮箱为例):

# smtplib 用于邮件的发信动作
import smtplib

# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = 'xxx.qq@com'
password = '你的授权码数字'

# 收信方邮箱
to_addr = 'xxx.qq@com'

# 发信服务器
smtp_server = 'smtp.qq.com'

# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL()
server.login(smtp_server,465)
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()

email 模块

点击查看官方文本说明
点击查看百度教程汇总

email模块使用方法

email模块:用来写邮件内容的模块
MIMEText:内容形式为纯文本、HTML页面。
MIMEImage:内容形式为图片。
MIMEMultipart:多形式组合,可包含文本和附件。
对应导入代码如下:

from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

email模块,只需导入部分函数。
如:

from email.mime.text import MIMEText
# 引入email包中构建文本内容的方法

【MIMEText()方法】需要输入三个参数:文本内容、文本类型和文本编码。

MIMEText(msg,type,chartset)
# msg:文本内容,可自定义
# type:文本类型,默认为plain(纯文本)
# chartset:文本编码,中文为“utf-8”

完整发邮件

1.导入模块:stmplib,email模块
2.定义变量:发件人,密码,收件人,正文内容,服务器
3.使用方法:链接、登录、发送、推出
示例2【初级邮件】(以QQ邮箱为例完整信息发送代码)

# smtplib 用于邮件的发信动作
import smtplib
from email.mime.text import MIMEText
# email 用于构建邮件内容

# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = '[email protected]'
password = '你的授权码数字'

# 收信方邮箱
to_addr = '[email protected]'

# 发信服务器
smtp_server = 'smtp.qq.com'

# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
msg = MIMEText('send by python','plain','utf-8')

# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL()
server.connect(smtp_server,465)
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()

丰富邮件头部信息
使用标准示例:

from email.header import Header

msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')

示例3【完整邮件发送】:

import smtplib
from email.mime.text import MIMEText
from email.header import Header


from_addr = '[email protected]'
password = 'jspajpipqqew'
to_addr = '[email protected]'
smtp_server = 'smtp.qq.com'

server = smtplib.SMTP_SSL()
server.connect(smtp_server, 465)
server.login(from_addr, password)

text = '''亲爱的学员,你好!
​    希望学习Python对你不是一件困难的事情!

人生苦短,我用Python
'''
msg = MIMEText(text,'plain','utf-8')

msg['From'] = Header('老师')
msg['To'] = Header('学生')
msg['Subject'] = Header('来自老师的问候')

server.sendmail(from_addr,to_addr, msg.as_string())
server.quit()

丰富正文部分信息
原始正文内容如下:

msg = MIMEText('send by python','plain','utf-8')

如果文案内容较长,正文部分用text变量来做正文。

text = 'send by python'
msg = MIMEText(text,'plain','utf-8')

群发完整邮件

1.设置一个列表形式的变量进行群发
2.用while循环进行群发
3.调用csv模块进行群发

设置列表

书写方式

to_addrs = ['[email protected]','[email protected]']
msg['To'] = Header(",".join(to_addrs))

注意:
Header接受的第一个参数的数据类型必须要是字符串或者字节,因此书写方式为【Header(",".join(to_addrs))】

用while循环

采用询问是否继续输入邮件地址的方式,并用while循环实现多个收件人的功能。
【to_addrs】:需要定义空列表,来存放收件人的邮箱地址。
书写方式:

to_addrs = []
while True:
    a=input('请输入收件人邮箱:')
    #输入收件人邮箱
    to_addrs.append(a)
    #写入列表
    b=input('是否继续输入,n退出,任意键继续:')
    #询问是否继续输入
    if b == 'n':
        break
print(to_addrs)

示例4:

# smtplib 用于邮件的发信动作
import smtplib
from email.mime.text import MIMEText
# email 用于构建邮件内容
from email.header import Header
# 用于构建邮件头
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = input('请输入登录邮箱:')
password = input('请输入邮箱授权码:')
​
# 收信方邮箱
to_addrs = []
while True:
    a=input('请输入收件人邮箱:')
    to_addrs.append(a)
    b=input('是否继续输入,n退出,任意键继续:')
    if b == 'n':
用csv模块读取方式

write()方式:
1.引入csv模块
2.提供需要写入csv文件的数据
3.建文件并写入数据
书写示例:

import csv      #引用csv模块。

data = [['wufeng ', '[email protected]'],['kaxi', '[email protected]']]
#待写入csv文件的内容

with open('to_addrs.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)

read()方法:
1.引入csv模块
2.打开csv文件
3.读取需要的数据
书写示例:

import csv             #引用csv模块。

with open('to_addrs.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader: 
        to_addrs=row[1]   

示例5【完整csv发邮件】

import smtplib
# smtplib 用于邮件的发信动作
from email.mime.text import MIMEText
# email 用于构建邮件内容
from email.header import Header
# 用于构建邮件头
import csv
# 引用csv模块,用于读取邮箱信息

# 发信方的信息:发信邮箱,QQ邮箱授权码
# 方便起见,你也可以直接赋值
from_addr = input('请输入登录邮箱:')
password = input('请输入邮箱授权码:')

# 发信服务器
smtp_server = 'smtp.qq.com'

# 邮件内容
text='''亲爱的学员,你好!
希望学习python对你不是一件困难的事情!

人生苦短,我用Python
'''

# 待写入csv文件的收件人数据:人名+邮箱
# 记得替换成你要发送的名字和邮箱
data = [['wufeng ', '[email protected]'],['kaxi', '[email protected]']]

# 写入收件人数据
with open('to_addrs.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)

# 读取收件人数据,并启动写信和发信流程
with open('to_addrs.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader: 
        to_addrs=row[1]
        msg = MIMEText(text,'plain','utf-8')
        msg['From'] = Header(from_addr)
        msg['To'] = Header(to_addrs)
        msg['Subject'] = Header('python test')
        server = smtplib.SMTP_SSL()
        server.connect(smtp_server,465)
        server.login(from_addr, password)
        server.sendmail(from_addr, to_addrs, msg.as_string())

# 关闭服务器
server.quit()

你可能感兴趣的:(python学习笔记)