IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 利用Python自动发送邮件 -> 正文阅读

[系统运维]利用Python自动发送邮件

自动发送邮件

我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助Python来自动发送邮件。

使用邮箱的第一步

一般我们在使用QQ邮箱、163邮箱、126邮箱等这些比较常用的邮箱时,只需要输入账号和密码就可以。但是在使用手机端的企业邮箱的时候,一般都需要配置一下,常规的配置界面如下所示:

6zyR39.png

就是除了在输入账号密码以外,还需要输入一个服务器链接地址,这个地址每个公司都会不太一样。

一份邮件的组成

下图是outlook中发送一份邮件的界面,主要包含发件人、收件人、抄送人、主题、正文、附件这几部分。这也是一般邮件比较通用的组成部分。

6zyWcR.png

如何发送邮件

在发送邮件之前首先需要与服务器进行连接,在Python中主要利用smtplib模块来建立服务器连接接、服务器断开的工作。

不同邮箱的服务器链接地址不一样,大家根据自己使用的邮箱设置相应的服务器链接。下表为常见邮箱对应的服务器链接:

邮箱服务器地址
新浪邮箱smtp.sina.com
搜狐邮箱smtp.sohu.com
126邮箱smtp.126.com
139邮箱smtp.139.com
163网易邮箱smtp.163.com

在与163邮箱服务器进行连接之前,需要先登陆自己的163邮箱进行授权设置,授权码设置如下:

点击设置中的POP3/SMTP/IMAP,勾选SMTP服务,根据提是进行授权码设置,设置授权成功后,在Python中利用授权码进行登陆,而不是你本来的邮箱密码,如果使用本来的邮箱密码登陆,会报错。

连接设置好以后就可以使用账户密码进行登录了,登录成功以后就可以对邮件内容进行编辑,编辑完成以后就可以点击发送了,发送完成后断开服务器链接。

如下展示了发送一份邮件的简短流程代码:

import smtplib

smtp = smtplib.SMTP()
smtp.connect(host, port)  # 与服务器进行连接
smtp.set_debuglevel(1) #显示出交互信息
smtp.login(username, password)  # 登陆邮箱
smtp.sendmail(sender, receiver, msg.as_string())  # 发送邮件
smtp.quit()  # 断开连接

正式发送一份邮件

如下以163邮箱为例,展示了发送一份邮件完整的Python代码:

import smtplib
from email.mime.multipart import MIMEMultipart 
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.mime.application import MIMEApplication

#发件人邮箱
asender="zhangjunhongdata@163.com"
#收件人邮箱
areceiver="zhangjunhong@163.com"
#抄送人邮箱
acc = 'zhangjunhong@qq.com'
#邮件主题
asubject = '这是一份测试邮件'  

#发件人地址
from_addr = "zhangjunhongdata@163.com"
#邮箱密码(授权码)
password="123data"

#邮件设置
msg = MIMEMultipart()
msg['Subject'] = asubject  
msg['to'] = areceiver  
msg['Cc'] = acc 
msg['from'] =  "张俊红"

#邮件正文
body = "你好,这是一份测试邮件"

#添加邮件正文:
msg.attach(MIMEText(body, 'plain', 'utf-8'))

#添加附件
#注意这里的文件路径是斜杠
xlsxpart = MIMEApplication(open('C:/Users/zhangjunhong/Desktop/这是附件.xlsx', 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename='这是附件.xlsx')
msg.attach(xlsxpart)    

#设置邮箱服务器地址以及端口
smtp_server ="smtp.163.com"
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)

#登陆邮箱
server.login(from_addr, password)

#发送邮件
server.sendmail(from_addr, areceiver.split(',')+acc.split(','), msg.as_string())

#断开服务器链接
server.quit()

最后的结果如下图:

关于自动发送邮件还有一些进阶的内容,比如定时发送,正文显示html内容等,大家有兴趣的可以自行上网搜索学习。

批量发送邮件

如果是需要同时发送多份邮件,可以把收件人整理成一个表格进行循环遍历,挨个进行发送。

比如我们现在需要给销售部门好几百销售人员分别发送本月各自的销售任务,在发送邮件的时候主题需要命名成xxx任务明细,在正文中的称呼也需要改成对应的收件人,附件中需要添加各自的任务明细表,而且需要抄送给各自的直属上级。

根据上述的需要,我们整理了如下收件人信息相关的表格df:

姓名收件人抄送人
张俊红1zhangjunhong11@163.comzhangjunhong@163.com
张俊红2zhangjunhong22@163.comzhangjunhong@163.com

只需要写一个for循环去遍历这个df表格中的信息,然后就可以分别发送出去,具体实现代码如下:

import smtplib
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication

host = "smtp.163.com"
port = 25
username = "zhangjunhong1227@163.com"
password = "123zjh"

smtp = smtplib.SMTP() #声明一个链接对象
smtp.connect(host, port)  # 与服务器进行连接
smtp.set_debuglevel(1) #显示出交互信息
smtp.login(username, password)  # 登陆邮箱

sender = username

for i in zip(df["姓名"],df["收件人"],df["抄送人"]):
    
    receiver = i[1] #收件人
    acc = i[2] #抄送人


    msg = MIMEMultipart() #声明一个邮件对象
    msg['from'] = username #发件人
    msg['to'] = receiver#收件人
    msg['Cc'] = acc #抄送人
    msg['Subject'] = i[0] + "任务明细" #主题

    # 编写正文
    text = MIMEText(i[0]+"您好,这是您这个月的任务明细",'plain', 'utf-8') 
    msg.attach(text)

    # 添加表格附件
    f = open('C:/Users/zhangjunhong/Desktop/任务明细/'+ i[0] + '.xlsx', 'rb').read()
    filepart = MIMEApplication(f)
    filepart.add_header('Content-Disposition','attachment',filename=i[0] + '任务明细.xlsx') #为附件添加一个标题
    msg.attach(filepart)

    smtp.sendmail(sender, receiver.split(',') + acc.split(','), msg.as_string())  # 发送邮件
smtp.quit()  # 断开连接    

通过运行上面的代码,就可以达到一次性给表格df中的所有人发送邮件的需求。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:31:26  更:2021-11-25 08:31:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:42:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码