当前位置: 移动技术网 > IT编程>脚本编程>Python > Python邮件自动定时发送(完整版)

Python邮件自动定时发送(完整版)

2020年07月20日  | 移动技术网IT编程  | 我要评论

参加数据分析实习的时候公司需要实行邮件自动发送预警,因此,这里做一个简单的总结,我也查看了网上的博客,大都有相应的方法,但是他们没有将代码做一个封装,我这里做出了一个封装补充,可以便于以后在本地进行各种直接调用,只需要输入参数即可!
以下是代码,并附上相应注释
注:
(1)这里需要输入你们自己的发送邮箱账号和授权密码,我就在代码中用*代替了
(2)出于隐私,我这里用QQ邮箱发送的,并没有用公司邮箱,如果想用其他邮箱也可以自行百度,方法一样的
(3)这里邮箱授权码不是邮箱密码,需要自行设置,也很简单,提供一个网址给你们参考
https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256
(4)本文代码实现的是两人邮件发送,要想实现更多人发送,只要在收件人邮箱中添加即可

import smtplib  # 负责发送邮件
from email.mime.text import MIMEText  # 构造文本
from email.mime.image import MIMEImage  # 构造图片
from email.mime.multipart import MIMEMultipart  # 将多个集合对象集合起来
from email.header import Header
import datetime
import warnings
warnings.filterwarnings('ignore')
# 输入发件人昵称、收件人昵称、主题,正文,附件地址,附件名称生成一封邮件
def create_email(sender_name, receiver_name, email_Subject, email_text, annex_file,annex_name):
    #生成一个空的带附件的邮件实例
    message = MIMEMultipart()
    #将正文以text的形式插入邮件中(参数1:正文内容,参数2:文本格式,参数3:编码方式)
    message.attach(MIMEText(email_text, 'plain', 'utf-8'))
    #生成发件人名称
    message['From'] = Header(sender_name, 'utf-8')
    #生成收件人名称
    message['To'] = Header(receiver_name, 'utf-8')
    #生成邮件主题
    message['Subject'] = Header(email_Subject, 'utf-8')
    #读取附件的内容
    att1 = MIMEText(open(annex_file, 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    #生成附件的名称
    att1["Content-Disposition"] = 'attachment; filename=' + annex_name
    #将附件内容插入邮件中
    message.attach(att1)
    #返回邮件
    return message
def send_email(sender, password, receiver, msg, mail_host = "smtp.qq.com"):
    # 一个输入邮箱、密码、收件人、邮件内容发送邮件的函数
    try:
        #找到你的发送邮箱的服务器地址,已加密的形式发送
        server = smtplib.SMTP_SSL()  # 发件人邮箱中的SMTP服务器
        server.connect(mail_host, 465)
        server.ehlo()
        #登录你的账号
        server.login(sender, password)  # 括号中对应的是发件人邮箱账号、邮箱密码
        #发送邮件
        server.sendmail(sender, receiver, msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号(是一个列表)、邮件内容
        print("邮件发送成功" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        # 关闭SMTP对象
        server.quit()
    except Exception:
        print('邮件发送失败'+ datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
if __name__ == '__main__':
    # SMTP服务器,这里使用qq邮箱
    # mail_host = "smtp.qq.com"
    # 发件人邮箱
    sender = "********@qq.com"
    sender_name = "zhansan<*********@qq.com>"
    # 邮箱授权码,注意这里不是邮箱密码!!
    mail_license = "vtzkhvxhbcry***"
    #收件人邮箱(前面的昵称一定要用英文的)
    receiver_name = "wangwu<*********@163.com>,lisi<*********@qq.com>"  #
    # 邮件主题
    subject_content = """Python自动邮件发送"""
    # 邮件正文
    body_content = """你好,这是一个自动发送邮件代码!"""
    annex_file = '/Users/jancy/Desktop/技术文档/Linux定时任务技术文档.docx'
    annex_name = "Linux_autoemail.docx"
    message = create_email(sender_name=sender_name,receiver_name=receiver_name,email_Subject=subject_content,
                 email_text=body_content,annex_file=annex_file,annex_name=annex_name)
	send_email(sender=sender,password=mail_license,receiver=receiver_name,msg=message)

运行结果展示:
在这里插入图片描述
直接将代码保存本地,然后调用相应的接口即可输出结果!
好了,以上便是利用python自动发送邮件的代码,这里再补充一个公司内部可以定时发送邮件任务的方法!
注: 这里只针对于Linux系统,倘若是windows的话,直接在本地点点点就可以了,或者远程连接公司的服务器
因为公司预警都是在仓库、数据库等出问题下,自动发送的,所以我们不可能自己时刻监管运行这样的代码,因此有必要了解linux系统的定时任务,其实也很简单啦
具体内容如下:
(1)如果是windows系统,需要连接远程服务器(这里不介绍windows自带的点点点定时任务),下面是在终端连接公司的远程服务器命令:
命令:ssh ***@192.168.188. 123 密码:1111

(2)如果是Linux/Unix系统,直接在终端输入: crontab -e
(i)进入编辑模式,输入执行定时任务命令
(ii)输入完成后,按照vim操作进行保存(即输入 :wq ),
(iii)如果需要终止定时任务需要注释命令,具体操作:进入编辑模式,依然类似vim操作( 输入i,进行编辑,在定时任务命令开头输入#,然后按ESC退出,按:wq保存修改
给出我的例子(每个月的17号的早上10点-11点每隔1分钟发送一次邮件):
注:我把这个定时任务给停止了,因此前面会有一个“#”
在这里插入图片描述
这里涉及定时任务的命令,前面的“*”有它特定的含义,我直接截图了,有想了解的可以自行百度:
在这里插入图片描述
这样的话就全部完成了,我用这个也是成功的在本地运行出结果了,自己的邮箱里出现了一大堆自己发送的邮件,如果喜欢的话并学到一点点知识的,就给个赞吧^ - ^
如有其他问题,欢迎评论讨论!

本文地址:https://blog.csdn.net/Jancydc/article/details/107450453

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网