(进阶)如何用Python实现群发邮件

很多人说我qq,为什么还要用这个群发,这不是在学习嘛,学完群发qq邮箱,你对python的学习会了解更多哦,想要学习更多关于python知识的,可以点击此链接

目录

群发邮件

登录邮箱

设置邮件信息及正文文本

设置附件

发送邮件并关闭邮箱服务

项目总结

完整代码:


我们需要将【小组销量排名表.xlsx】通过邮件发送给【组长邮箱.xlsx】中的各个组长。

这里会学一个新的知识点——str.join(),通过它实现群发邮件的功能。

群发邮件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

from openpyxl import load_workbook

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

# 设置邮箱账号

account = input('请输入邮箱账户:')

# 设置邮箱授权码

token = input('请输入邮箱授权码:')

# 设置邮箱服务器,端口

smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录qq邮箱

smtp.login(account, token)

# 打开工作表

wb = load_workbook('./04_月考勤表.xlsx')

sheet = wb.active

# 编写正文内容

content = '四月的考勤表已出,其中迟到时长超出 45 分钟的人员如下:\n'

for row_data in sheet.iter_rows(min_row=2, values_only=True):

    # 获取迟到时长超过45分钟的人员

    if row_data[2] > 45:

        content += '姓名:{name} 迟到总时长:{time} \n'.format(name=row_data[1], time=row_data[2])

content += '详情见附件内容'

# 创建简单邮件对象

email_content = MIMEText(content, 'plain', 'utf-8')

# 读取工作表文件数据

with open('./04_月考勤表.xlsx', 'rb') as f:

    file_data = f.read()

# 设置内容类型为附件

attachment = MIMEText(file_data, 'base64', 'utf-8')

# 设置附件标题以及文件类型

attachment.add_header('Content-Disposition', 'attachment', filename='04_月考勤表.xlsx')

# 创建复合邮件对象

msg = MIMEMultipart()

# 添加正文到复合邮件对象中

msg.attach(email_content)

# 添加附件到复合邮件对象里

msg.attach(attachment)

# 设置发送者信息

msg['From'] = '陈知枫'

# 设置接受者信息

msg['To'] = '闪光金融的各位同事们'

# 设置邮件标题

msg['Subject'] = '04_月考勤表'

# 发送邮件

smtp.sendmail(account, 'example@mail.com', msg.as_string()) 

# 关闭邮箱服务

smtp.quit()

 接下来我们只要基于这份代码进行调整,就可以实现批量发送邮件的功能啦。

登录邮箱

只要注意登录时要用到邮箱授权码而不是邮箱密码。

1

2

3

4

5

6

7

8

9

10

import smtplib

  

# 设置邮箱账号

account = input('请输入邮箱账户:')

# 设置邮箱授权码

token = input('请输入邮箱授权码:')

# 设置邮箱服务器,端口

smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录qq邮箱

smtp.login(account, token)

设置邮件信息及正文文本

先定义一个空列表用于存放组长邮箱,遍历【组长邮箱.xlsx】,获取每一行第二列,即邮箱地址,使用append() 添加进列表。

但有一个问题,存放邮箱地址的列表是不能作为收件人的,可以打开邮箱看一下,群发邮件时,收件人的格式实际上是“aaa@qq.com;bbb@qq.com;ccc@qq.com”这样的,也就是以 ; 作为连接符。

因此需要先将所有单个的邮箱拼接成符合群发格式的收件人邮箱,这里就要用到str.join()

str.join() 的作用是连接可迭代对象中的所有字符串,举个例子:

1

2

3

4

5

6

7

# 定义列表

list1 = ["a", "b", "c"]

  

# 以'-'作为字符串连接符

print('-'.join(list1))

# 以'+'作为字符串连接符

print('+'.join(list1))

可以看到字符串 'a','b','c'分别被 '-' 和 '+' 连接起来了。

1

2

3

4

5

# 定义列表

email_list = ["aaa@qq.com", "bbb@qq.com", "ccc@qq.com"]

  

# 以';'作为字符串连接符,将email_list中各邮箱拼接成"aaa@qq.com;bbb@qq.com;ccc@qq.com"

print( ';'.join(email_list)  )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

from openpyxl import load_workbook

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import smtplib

  

# 打开《组长邮箱》

email_wb = load_workbook('./组长邮箱.xlsx')

email_sheet = email_wb.active

  

# 创建邮件列表

email_list = []

  

# 读取所有邮件地址

for row in email_sheet.iter_rows(min_row=2, values_only=True):

    email_list.append(row[1])

  

# 设置邮箱账号

account = input('请输入邮箱账户:')

# 设置邮箱授权码

token = input('请输入邮箱授权码:')

# 设置邮箱服务器,端口

smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录qq邮箱

smtp.login(account, token)

  

# 设置邮件内容

msg = MIMEMultipart()

# 设置发送者信息

msg['From'] = account

# 设置接受者信息

msg['To'] = ';'.join(email_list)

# 设置邮件标题

msg['Subject'] = '销售等级排名汇报'

  

# 设置邮件正文

content = '本月销售数据排名结果已计算完成,请各组长查收。'

  

# 将正文添加到邮件内容里

email_content = MIMEText(content, 'plain', 'utf-8')

msg.attach(email_content)

设置附件

接下来就是把【等级一销售表.xlsx】和【小组销量排名表.xlsx】设置为附件,先读取【等级一销售表.xlsx】和【小组销量排名表.xlsx】,创建字典存放文件数据。

1

2

3

4

5

6

7

8

9

10

11

12

13

# 读取"等级一销售表"数据

with open('./等级销售表/等级一销售表.xlsx', 'rb') as f:

    rank_first_data = f.read()

  

# 读取"小组销量排名表"数据

with open('./小组销量排名表.xlsx', 'rb') as f:

    group_rank_data = f.read()

  

# 文件数据字典

file_dict = {

    '等级一销售表.xlsx': rank_first_data,

    '小组销量排名表.xlsx': group_rank_data

}

遍历文件数据字典,设置附件,这里需要使用email模块再创建一个MIMEText对象,用以承载附件信息并添加入MIMEMultipart对象中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# 读取"等级一销售表"数据

with open('./等级销售表/等级一销售表.xlsx', 'rb') as f:

    rank_first_data = f.read()

  

# 读取"小组销量排名表"数据

with open('./小组销量排名表.xlsx', 'rb') as f:

    group_rank_data = f.read()

  

# 文件数据字典

file_dict = {

    '等级一销售表.xlsx': rank_first_data,

    '小组销量排名表.xlsx': group_rank_data

}

for file in file_dict:

    # 设置内容类型为附件

    attachment = MIMEText(file_dict[file], 'base64', 'utf-8')

  

    # 设置附件标题以及文件类型

    attachment.add_header('Content-Disposition', 'attachment', filename=file)

    # 将附件添加到邮件内容里

    msg.attach(attachment)

发送邮件并关闭邮箱服务

这一步就很简单啦,只需要两行代码。

1

2

3

4

# 发送邮件

smtp.sendmail(account, email_list, msg.as_string())

# 关闭邮箱服务

smtp.quit()

到这里,我们的群发邮件的代码也完成了,来看一下整合后的思维导图吧。

项目总结

终于,我们将项目的四个功能块逐一实现了,还记得四个功能块分别是什么吗?

1)功能一,我们先统计了全国各个销售部的销售数据,并进行排序。

2)功能二,我们根据排序后的结果,对全体销售人员按销量划分了等级。

3)功能三,对九个销售小组进行优秀频次和平均销量的排序。

4)功能四,将等级1的销售数据和排名数据以邮件形式发送给各地区销售部主管。

完整代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

from openpyxl import load_workbook

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

  

email_wb=load_workbook('./static/组长邮箱.xlsx')

email_sheet=email_wb.active

email_list=[]

for row in email_sheet.iter_rows(min_row=2,values_only=True):

    email_list.append(row[1])

print(email_list)

# 设置邮箱账号

account = input('请输入邮箱账户:')

# 设置邮箱授权码

token = input('请输入邮箱授权码:')

# 设置邮箱服务器,端口

smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录qq邮箱

smtp.login(account, token)

msg=MIMEMultipart()

  

# 设置发送者信息

msg['From'] = account

# 设置接受者信息

msg['To'] = ';'.join(email_list)

# 设置邮件标题

msg['Subject'] = '销售等级排名汇总'

content='本月销售数据排名结果已经完成,请各位组长查收'

email_content=MIMEText(content,'plain','utf-8')

msg.attach(email_content)

  

# 读取"等级一销售表"数据

with open('./static/等级销售表/等级一销售表.xlsx', 'rb') as f:

    rank_first_data = f.read()

  

# 读取"小组销量排名表"数据

with open('./static/小组销量排名表.xlsx', 'rb') as f:

    group_rank_data = f.read()

  

# 文件数据字典

file_dict = {

    '等级一销售表.xlsx': rank_first_data,

    '小组销量排名表.xlsx': group_rank_data

}

for file in file_dict:

    # 设置内容类型为附件

    attachment = MIMEText(file_dict[file], 'base64', 'utf-8')

  

    # 设置附件标题以及文件类型

    attachment.add_header('Content-Disposition', 'attachment', filename=file)

    # 将附件添加到邮件内容里

    msg.attach(attachment)

# 发送邮件

smtp.sendmail(account, email_list, msg.as_string())

# 关闭邮箱服务

smtp.quit()

运行效果:

可以自行设置邮箱进行验证。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值