精华内容
下载资源
问答
  • 主要为大家详细介绍了python实现自动发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Python实现自动发送邮件 由于工作中每天需要定时跑模型,结果文档需每天邮件发送给业务同学,所以学习了如何使用python进行自动发送邮件,并设置成定时任务。 1.主要用到的包: smtplib,email,apscheduler 2.SMTP...

    Python实现自动发送邮件

    由于工作中每天需要定时跑模型,结果文档需每天邮件发送给业务同学,所以学习了如何使用python进行自动发送邮件,并设置成定时任务。

    1.主要用到的包:

    smtplib,email,apscheduler

    2.SMTP简介:

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

    3.APScheduler简介

    APScheduler(Advanced Python Scheduler)是一个轻量级的Python定时任务调度框架(Python库)

    APScheduler有三个内置的调度系统,其中包括:
    1).cron式调度(可选开始/结束时间)
    2).基于间隔的执行(以偶数间隔运行作业,也可以选择开始/结束时间)
    3).一次性延迟执行任务(在指定的日期/时间内运行作业一次)

    4.代码部分

    # -*- coding: utf-8 -*-
    
    
    import smtplib
    from email.mime.text import MIMEText
    import datetime
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    from apscheduler.schedulers.blocking import BlockingScheduler
    import numpy as np
    
    
    def my_job():
        def create_email(email_from, email_to, email_Subject, email_text, annex_path, annex_name):
            # 输入发件人昵称、收件人昵称、主题,正文,附件地址,附件名称生成一封邮件
            # 生成一个空的带附件的邮件实例
            message = MIMEMultipart()
            # 将正文以text的形式插入邮件中
            message.attach(MIMEText(email_text, 'plain', 'utf-8'))
            # 生成发件人名称(这个跟发送的邮件没有关系)
            message['From'] = Header(email_from, 'utf-8')
            # 生成收件人名称(这个跟接收的邮件也没有关系)
            message['To'] = Header(",".join(email_to), 'utf-8')
            # 生成邮件主题
            message['Subject'] = Header(email_Subject, 'utf-8')
            # 读取附件的内容
            att1 = MIMEText(open(annex_path, 'rb').read(), 'base64', 'utf-8')
            att1["Content-Type"] = 'application/octet-stream'
            # 生成附件的名称
            att1.add_header("Content-Disposition", "attachment", filename=annex_name)
            # 将附件内容插入邮件中
            message.attach(att1)
            # 返回邮件
            return message
    
        def send_email(mailto, msg):
            try:
                print('connecting ', mail_host)
                s = smtplib.SMTP_SSL(mail_host, 465)
                s.connect(mail_host)
                print('login to mail_host')
                s.login(mail_user, mail_pwd)
                print('send email')
                s.sendmail(mail_user, mailto, msg.as_string())
                print('close the connection between the mail server')
                s.close()
            except Exception as e:
                print('Exception: ', e)
    
        mail_host = '发信服务器'
        mail_user = '邮箱账号'
        mail_pwd = '邮箱密码'
        to_list = '接收方邮箱列表'
        my_msg = create_email(mail_user, to_list, '正文内容',annex_path='文件地址', annex_name='正文内容')
        send_email(to_list, my_msg)
        return
    
    
    if __name__ == '__main__':
        sched = BlockingScheduler()
        time = datetime.datetime.now()
        hour = time.hour
        minute = int(np.where(time.minute == 59, 0, time.minute + 1))
        sched.add_job(my_job, "cron", day_of_week='mon-sun', hour=hour, minute=minute) # 将每天的任务设置成运行时间的后一分钟
        print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))
        sched.start()
        try:
            sched.start()
        except (KeyboardInterrupt, SystemExit):
            pass
    
    
    展开全文
  • Python实现自动发送邮件 -- 自动发送资料到博客/网站中留言的邮箱背景脚本要解决的问题:实现方法代码及解析1. AutoSendEmailByBlogComments.py2. FileOperation.py3. SendEmail.py 背景 在各大论坛、博客上,大部分...

    背景

    在各大论坛、博客上,很多User通过留言邮箱获取相关资料,但是留言人数过多了,对于博主来说一个一个发送相关邮件太繁琐了,同时也经常不能及时发现新评论,效率太低。。。我是个懒人, 这当然也不能忍,所以想到通过Python脚本将上述流程自动化。

    例如我有一篇博客:嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划),里面会分享很多资料,小伙伴们通过留言邮箱来获取资料,通过这个Python脚本自动化将资料发送到各小伙伴们的邮箱中,非常方便,我再也不必要每天刷博客新留言,再手动点开邮箱发送邮件啦。

    脚本要解决的问题:

    脚本需要自动找到评论区中留言的新邮箱留言内容,然后将相关资料整合成一封邮件,通过SMTP发送到对方邮箱。注意是新邮箱,之前发送过的脚本当然不能再给人家发一次啦。
    通过Python脚本各类成型的库函数,就可以简单完美的解决这类问题:

    实现方法

    实现方法大致就是:通过Python抓取我的Blog网页中的评论数据,通过正则表达式筛选出网页中的邮箱数据,并将发现的新邮箱写入到文件中,然后将资料信息组成一封标准邮件,通过SMTP发送。

    代码目录结构如下:
    其中record.txt就是记录所有新邮件的文件,
    在这里插入图片描述
    最后将脚本打包成一个exe, 并通过Windows系统中的TaskScheduler ,每天定时的调用该程序一次,那么,每天新留言的小伙伴,就能自动收到资料啦。

    在这里插入图片描述

    代码及解析

    1. AutoSendEmailByBlogComments.py

    负责抓取数据,然后通过正则表达式筛选出邮件数据,通过历史数据判断是否是新邮箱,然后调度发送邮件。。。代码如下:

    import time
    import urllib.request
    import re
    from SendEmail import SendEmailtoAddr
    from FileOperation import RecordEmail, isNewEmail
    
    HasNewEmail = False
    
    
    def handleEmailAddr(EmailAddr):
        isNew = isNewEmail(EmailAddr)
        if isNew == True:
            print('Get New Email addr:' + EmailAddr)
            isSuccess = SendEmailtoAddr(EmailAddr)
            if isSuccess == True:
                RecordEmail(EmailAddr)
            	global HasNewEmail
            	HasNewEmail = True
            	print('Send email to '+EmailAddr+': success!')
            else:
            	print('Send email to '+EmailAddr+': Failed, Pls. retry...')	
    
    
    def SendEmailByBlogComments(url):
        rsp = urllib.request.urlopen(url)
        html = rsp.read().decode("utf-8")
        #以列表的形式返回所有匹配邮箱格式的子串
        emaillist = re.findall("[A-Za-z0-9_]+@\w+\.\w+", html)
    
        print('Get Email list from CSDN: ')
        print(emailList)
    
        for emailFromBlog in emailList:
            handleEmailAddr(emailFromBlog)
    
    #我的博客网址
    url = "https://blog.csdn.net/howiexue/article/details/76696316#comments"
    
    
    SendEmailByBlogComments(url)
    
    if HasNewEmail == False:
        print("No New email found, do nothing... this window will close after 10s")
    else:
        print("Done! this window will close after 10s")
    
    time.sleep(10)
    
    
    

    这里正则表达式是通过[A-Za-z0-9_]+@\w+.\w+匹配所有邮箱格式的数据。

    2. FileOperation.py

    主要是做一些文件类的操作,RecordEmail() 写入邮箱数据到record.txt、isNewEmail() 读取record.txt判断是否是新的邮箱。

    
    def RecordEmail(EmailAddr):
        fileName= 'record.txt'
        with open(fileName,'a') as record:
            record.write(EmailAddr+"\n")
    
    
    def isNewEmail(EmailAddr):
        fileName = 'record.txt'
        with open(fileName) as record:
            lines = record.read().splitlines()
            #print(lines)
            if EmailAddr in lines:
                return False
            else:
                return True
    
    

    3. SendEmail.py

    这个文件主要是通过MIME来Build邮件数据,然后通过smtplib 发送

    # coding:utf-8
    # smtplib模块负责连接服务器和发送邮件
    # MIMEText:定义邮件的文字数据
    # MIMEImage:定义邮件的图片数据
    # MIMEMultipart:负责将文字图片音频组装在一起添加附件
    import smtplib  # 加载smtplib模块
    from email.mime.text import MIMEText
    from email.utils import formataddr
    from email.mime.application import MIMEApplication
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    
    sender = 'howiexue@163.com'  # 我的邮箱,即发件人邮箱账号
    passwd = '' #这里填的授权码,注意不是邮箱密码,这么Secret的数据当然隐去啦
    mailserver = 'smtp.163.com'
    port = '25'
    sub = 'CSDN资料密码 By HowieXue' #用于邮箱的subject
    
    def SendEmailtoAddr(receive):
    	try:
    		msg = MIMEMultipart('related')
    		msg['From'] = formataddr(["Howie", sender])  # 发件人邮箱昵称、发件人邮箱账号
    		msg['To'] = formataddr(["BlogUser:"+receive, receive])  # 收件人邮箱昵称、收件人邮箱账号
    		msg['Subject'] = sub
    
    		#正文,html格式
    		body = """
    		<b>资料密码请查收,谢谢关注我的CSDN博客~    </b> 
    		<p>博文地址:https://blog.csdn.net/HowieXue/article/details/76696316</p>
    		<br><img src="cid:passowrd"><br>
    		<br><img src="cid:reward"><br>
    		
    		<p>Best Regards,</p>
    		<p>HowieXue(薛永浩)</p>
    		
    		<p>send by script of <a href="http://www.python.org">Python3</a>...</p>
    		
    		"""
    		#链接图片,资料实际内容通过图片显示,这样做为了避免163 Server误判为垃圾邮件,图片上是相关资料的网盘地址和密码
    		text = MIMEText(body, 'html', 'utf-8')
    		f = open(r'C:\**\password.png', 'rb') #所插入的图片
    		pic = MIMEImage(f.read())
    		f.close()
    		pic.add_header('Content-ID', '<passowrd>')
    		
    		msg.attach(text)
    		msg.attach(pic)
    		
    		rew = open(r'C:\**\reward.png', 'rb')
    		rewPic = MIMEImage(rew.read())   
    		rew.close()
    		rewPic.add_header('Content-ID', '<reward>')
    		
    		msg.attach(rewPic)
    
    
    		server = smtplib.SMTP(mailserver, port)  # 发件人邮箱中的SMTP服务器,端口是25
    		server.login(sender, passwd)  # 发件人邮箱账号、邮箱密码
    		server.sendmail(sender, receive, msg.as_string())  # 发件人邮箱账号、收件人邮箱账号、发送邮件
    		server.quit()
    	
    		return True
    	except Exception as e:
    		print(e)
    		return False
    
    

    Record.txt内容是这样的:
    在这里插入图片描述

    发送的邮件是这样的:
    在这里插入图片描述

    备注:邮箱SMTP设置

    要开启邮箱的SMTP服务,才能通过第三方Client发送邮件,一般邮箱默认是关闭该服务的,需要打开,并设置授权码。
    针对·163邮箱,通过设置中修改:
    在这里插入图片描述

    在这里插入图片描述
    同时开启并设置客户端授权码(在脚本中连接邮箱用):
    在这里插入图片描述

    其它好玩的Python脚本

    Python实现自动发送邮件 --自动抓取博客/网站中留言的邮箱并发送相应邮件

    Python自动生成代码 - 通过tkinter图形化操作并生成代码框架

    Python解析CSV数据 - 通过Pandas解析逻辑分析仪导出的CSV数据

    Python通过Django搭建网站执行Lua脚本 (实现数据解析)


    博主热门文章推荐:

    一篇读懂系列:

    LoRa Mesh系列:

    网络安全系列:

    嵌入式开发系列:

    AI / 机器学习系列:


    在这里插入图片描述

    展开全文
  • 主要为大家详细介绍了Python实现自动发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 本文是用Python写的一个自动发送邮件的脚本,调用函数时,直接把件人邮箱地址、密码、收件人邮箱地址、邮件标题、内容等信息传递给函数,即可实现自动发送邮件功能。脚本代码如下:# -*- coding: UTF-8 -*-import ...

    自动发送邮件功能是我们经常要用到的,比如每天定时统计报表信息,然后自动发送给运营人员,协助运营人员进行业务数据分析。本文是用Python写的一个自动发送邮件的脚本,调用函数时,直接把发件人邮箱地址、密码、收件人邮箱地址、邮件标题、内容等信息传递给函数,即可实现自动发送邮件功能。

    脚本代码如下:

    # -*- coding: UTF-8 -*-

    import sys, os, re, urllib, urlparse

    import smtplib

    import traceback

    from email.mime.text import MIMEText

    from email.mime.multipart import MIMEMultipart

    def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):

    '''''

    @subject:邮件主题

    @msg:邮件内容

    @toaddrs:收信人的邮箱地址

    @fromaddr:发信人的邮箱地址

    @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com

    @password:发信人的邮箱密码

    '''

    mail_msg = MIMEMultipart()

    if not isinstance(subject,unicode):

    subject = unicode(subject, 'utf-8')

    mail_msg['Subject'] = subject

    mail_msg['From'] =fromaddr

    mail_msg['To'] = ','.join(toaddrs)

    mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))

    try:

    s = smtplib.SMTP()

    s.connect(smtpaddr) #连接smtp服务器

    s.login(fromaddr,password) #登录邮箱

    s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件

    s.quit()

    except Exception,e:

    print "Error: unable to send email"

    print traceback.format_exc()

    if __name__ == '__main__':

    fromaddr = "xxxxxxxx@163.com"

    smtpaddr = "smtp.163.com"

    toaddrs = ["xxxxxxxx@qq.com","xxxxxxxxx@163.com"]

    subject = "测试邮件"

    password = "xxxxxxxx"

    msg = "测试一下"

    sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。SMTP通讯的基本流程可以概括为以下几点:1.连接SMTP服务器2.登陆用户名和密码3.发送...

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。

    SMTP通讯的基本流程可以概括为以下几点:

    1.连接SMTP服务器

    2.登陆用户名和密码

    3.发送指定邮件内容

    4.退出SMTP连接

    一、发送纯文本格式邮件

    #coding:utf-8

    import sys

    reload(sys)

    sys.setdefaultencoding('utf8')

    import smtplib

    from smtplib import SMTP

    from email.mime.text import MIMEText

    from email.header import Header

    #构造纯文本邮件内容

    msg = MIMEText('hello,send by Python.....','plain','utf-8')

    #发送者邮箱

    sender = 'xxxxx@XXXXX.com.cn'

    #发送者的登陆用户名和密码

    user = 'xxxxx@XXXX.com.cn'

    password = 'xxxxxx'

    #发送者邮箱的SMTP服务器地址

    smtpserver = 'xxxx'

    #接收者的邮箱地址

    receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一个list

    smtp = smtplib.SMTP() #实例化SMTP对象

    smtp.connect(smtpserver,25) #(缺省)默认端口是25 也可以根据服务器进行设定

    smtp.login(user,password) #登陆smtp服务器

    smtp.sendmail(sender,receiver,msg.as_string()) #发送邮件 ,这里有三个参数

    '''

    login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文

    是一个str,as_string()把MIMEText对象变成str。

    '''

    smtp.quit()

    运行之后就会收到邮件:

    但是仔细观察会发现:

    1.邮件没有主题

    2.看不到收件人的信息

    这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:

    msg = MIMEText('hello,send by Python.....','plain','utf-8')

    msg['From'] = Header('Python测试','utf-8')

    msg['To'] = Header('管理员','utf-8')

    subject = 'python SMTP 测试邮件'

    msg['Subject'] = Header(subject,'utf-8')

    二、发送HTML格式的邮件

    如果我们要发送HTML邮件,而不是普通的纯文本文件怎么办?方法很简单,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了:

    msg = MIMEText('

    你好!

    ','html','utf-8')

    #发送HTML格式邮件就只需要把对应的第二个参数改为html即可

    三、发送带附件的邮件

    发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

    #coding:utf-8

    import sys

    reload(sys)

    sys.setdefaultencoding('utf8')

    import smtplib

    from email.mime.text import MIMEText

    from email.mime.multipart import MIMEMultipart

    from email.header import Header

    #发送邮件服务器

    smtpserver = 'xxxxx'

    #发送邮箱用户名和密码

    user = 'xxxxxx'

    password = 'xxxxxx'

    #发送邮箱

    sender = 'xxxxx'

    #接受邮箱

    receiver = 'xxxxxxx'

    #创建一个带附件的实例

    message = MIMEMultipart()

    message['From'] = Header('Python 测试','utf-8')

    message['To'] = Header('测试','utf-8')

    subject = 'Python SMTP邮件测试'

    message['Subject'] = Header(subject,'utf-8')

    #邮件正文内容

    message.attach(MIMEText('这是测试Python发送附件功能....','plain','utf-8'))

    #构造附件1,传送当前目录下的test.txt文件

    att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8')

    att1['Content-Type'] = 'application/octet-stream'

    #这里的filename可以任意写,写什么名字 邮件中就显示什么名字

    att1['Content-Disposition'] = 'attachment;filename:"123.txt"'

    message.attach(att1)

    smtp = smtplib.SMTP()

    smtp.connect(smtpserver,25)

    smtp.login(user,password)

    smtp.sendmail(sender,receiver,message.as_string())

    smtp.quit()

    小结

    使用Python的smtplib发送邮件十分简单,只要掌握了各种邮件类型的构造方法,正确设置好邮件头,就可以顺利发出。

    构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

    Message

    +- MIMEBase

    +- MIMEMultipart

    +- MIMENonMultipart

    +- MIMEMessage

    +- MIMEText

    +- MIMEImage

    这种嵌套关系就可以构造出任意复杂的邮件。你可以通过email.mime文档查看它们所在的包以及详细的用法。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    展开全文
  • Python实现自动发送邮件(详解)

    千次阅读 多人点赞 2020-12-16 12:21:21
    Python实现自动发送邮件 1.开启SMTP服务 为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务: 这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 。然后你还需要点击下面生成...
  • Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。SMTP通讯的基本流程可以概括为以下几点:1.连接SMTP服务器2.登陆用户名和密码3.发送...
  • PYTHON实现自动发送邮件

    千次阅读 2018-12-18 17:26:16
    smtp.set_debuglevel(1) #显示发送过程 smtp.connect(mail_host) smtp.login(sender,psd) smtp.sendmail(sender,to_addrs,msg.as_string()) smtp.quit() print('发送成功') except Exception as result: ...
  • 使用Python实现自动邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。邮件发送...
  • 本文是用Python写的一个自动发送邮件的脚本,调用函数时,直接把件人邮箱地址、密码、收件人邮箱地址、邮件标题、内容等信息传递给函数,即可实现自动发送邮件功能。脚本代码如下:# -*- coding: UTF-8 -*-import ...
  • 终于到这里了,在我们执行完自动化脚本后生成测试报告文件,并且将测试报告文件自动打包后,后面就需要将测试报告压缩包发送出去,网上呢可以关于python实现自动发送邮件的文章很多,这里博主要吐槽一下其实绝大多数...
  • 使用Python实现自动邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。 Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。 邮件发送...
  • 利用python实现自动发送邮件

    千次阅读 2019-01-25 20:35:17
    今天跟着视频学了一个小的知识点,如何利用python写一个小程序实现自动发送邮件。 首先我们需要有一个163邮箱(什么邮箱都可以)然后我们登录自己的邮箱,点击设置-&gt;POP3/SMTP/IMAP出现下图: 默认画红框里...
  • Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件
  • 1、最近公司实现部分数据统计、分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用python实现该...
  • 使用Python实现自动邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。 Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。 邮件发送...
  • 使用Python实现自动邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间。 Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。 邮件发送需要...
  • 使用Python实现自动邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。邮件发送...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,629
精华内容 17,451
关键字:

python实现自动发送邮件

python 订阅