Python如何实现自动发送邮件

目录
  • 自动发送邮件
  • 使用邮箱的第一步
  • 一份邮件的组成
  • 正式发送一份邮件
  • 批量发送邮件

自动发送邮件

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

使用邮箱的第一步

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

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

一份邮件的组成

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

如何发送邮件

在发送邮件之前首先需要与服务器进行连接,在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:

姓名 收件人 抄送人
张俊红1 zhangjunhong11@163.com zhangjunhong@163.com
张俊红2 zhangjunhong22@163.com zhangjunhong@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中的所有人发送邮件的需求。

以上就是 Python如何实现自动发送邮件的详细内容,更多关于 Python发送邮件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python自动发送邮件的方法实例总结

    本文实例讲述了Python自动发送邮件的方法.分享给大家供大家参考,具体如下: python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容). email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等

  • 基于python SMTP实现自动发送邮件教程解析

    最近工作中的一个项目需要自动发送一些信息邮件到指定邮箱的需求,那么如何实现Python自动发送邮件的功能呢?接下来我们就来简单的介绍下如何利用Python来实现自动发送邮件的功能. Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 ,说白了就是发送邮件的协议,python的smplib库对SMTP协议进行了简单的封装,提供了对SMTP的支持,可以发送纯文本邮件.HTML文件以及带附件的邮件. 首先我们构建一个SendEmai

  • python使用QQ邮箱实现自动发送邮件

    最近用到Python自动发送邮件,主要就是三步,登录邮件.写邮件内容.发送,用到的库是 smtplib 和 email,直接使用pip安装即可 我使用的是QQ邮箱,首先需要设置QQ邮箱POP3/SMTP服务 记住这个授权码,这个授权码就是Python脚本中登录邮箱时的密码,而不是你平时登录邮箱时的那个密码 一.发送普通文本邮件 #发送多种类型的邮件 from email.mime.multipart import MIMEMultipart msg_from = '1508691067@qq.c

  • python自动化发送邮件实例讲解

    在python中,通过如下两个模块可以实现邮件的自动化操作 smtplib email smtplib模块是对SMTP协议的封装,用于发送邮件:email模块用于构建邮件内容,支持以下3种形式的邮件 纯文本 html 带附件 首先来看下邮件的构建,对于一封邮件,需要指定发件人,收件人,主题,正文等内容,以最简单的纯文本邮件为例,构建方式如下 >>> from email.mime.text import MIMEText >>> from email.header im

  • Python如何实现自动发送邮件

    目录 自动发送邮件 使用邮箱的第一步 一份邮件的组成 正式发送一份邮件 批量发送邮件 自动发送邮件 我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助Python来自动发送邮件. 使用邮箱的第一步 一般我们在使用QQ邮箱.163邮箱.126邮箱等这些比较常用的邮箱时,只需要输入账号和密码就可以.但是在使用手机端的企业邮箱的时候,一般都需要配置一下,常规的配置界面如下所示: 就是除了在输入账号密码以外,还需要输入一个服务器链接地

  • Python实战之自动发送邮件的实现

    目录 1.开启SMTP服务 2.准备 3.编写脚本 4.小例子 自动发送邮件能应用于许多场景,比如我想要知道股票策略中的股票池是否有实时的更新,这时候如果再拉一遍数据,跑一遍脚本,实在是太浪费时间了.为什么不把这一套流程放到服务器上,然后到点自动运行并发送邮件呢? 类似的应用场景还有很多,不仅仅是在股票策略提醒上,比如定时向某些人发送邮件:网站宕机了,实时发送邮件提醒:网站负载过高,发送邮件提醒......等等. 下面就来讲讲怎么用Python构建一个自动发送邮件的脚本. 1.开启SMTP服务

  • python实现自动发送邮件发送多人、群发、多附件的示例

    1.最近公司实现部分数据统计.分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用python来实现该功能,不过发现网上各种文档都是未经过整理,代码写的很不友善,比如发送多人的只能发送前一个邮箱,附件写死不灵活等等,故特写一遍比较记录. 主要会遇到的几个问题: 1.smtplib.SMTPAuthenticationError: (550, b'User has no permissi

  • python自动发送邮件脚本

    本文实例为大家分享了python自动发送邮件的具体代码,供大家参考,具体内容如下 #coding=utf8 ''''' 该模块使自动发送邮件的模块 模块初始化时需要设置: sender:发送人 reciver:接收者 smtpServer:发送人的服务器类型 password:登录命令 subject:邮件标题 datafile:数据文件 文件包含六个函数: senderLogin():连接服务并登录服务 setSubject():设置邮件标题 SendMessage():邮件发送的信息 sen

  • python实现自动发送邮件

    自动发送邮件功能是我们经常要用到的,比如每天定时统计报表信息,然后自动发送给运营人员,协助运营人员进行业务数据分析.本文是用Python写的一个自动发送邮件的脚本,调用函数时,直接把发件人邮箱地址.密码.收件人邮箱地址.邮件标题.内容等信息传递给函数,即可实现自动发送邮件功能. 脚本代码如下: # -*- coding: UTF-8 -*- import sys, os, re, urllib, urlparse import smtplib import traceback from emai

  • 用Python写一个自动木马程序

    电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不能百分之百的好用,但是也能够发挥一定的效果. 小编本次是基于Linux下的展示,之所以基于Linux,是因为需要电脑在启动的时候,需要自动启动程序,做到出其不意,原因我会在最后给出. 程序是这样的,程序执行会首先调用笔记本的摄像头,拍摄笔记本面前的照片,然后,会给我们的预设邮箱,发送邮件,提醒我们电

  • python smtplib模块自动收发邮件功能(二)

    接上篇python smtplib模块自动收发邮件功能(一) ,用python smtplib模块实现了发送邮件程序了,那么接下来我们需要现在要解决的问题如何在 test_report\目录下找到最新生成的报告,只有找到了才能把发邮件功能,然后将其集成到我们的自动化测试应用中. 一.获取最新的test_report #coding=utf-8 import smtplib from email.mime.text import MIMEText from email.header import

随机推荐