Python实现自动发送邮件 - 自动抓取Blog中留言的邮箱并发送邮件

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

  • 背景
  • 脚本要解决的问题:
  • 实现方法
  • 代码及解析
    • 1. AutoSendEmailByBlogComments.py
    • 2. FileOperation.py
    • 3. SendEmail.py
  • 备注:邮箱SMTP设置
    • 其它好玩的Python脚本
  • 博主热门文章推荐:

背景

在各大论坛、博客上,很多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, isNewEmailHasNewEmail = Falsedef handleEmailAddr(EmailAddr):isNew = isNewEmail(EmailAddr)if isNew == True:print('Get New Email addr:' + EmailAddr)isSuccess = SendEmailtoAddr(EmailAddr)if isSuccess == True:RecordEmail(EmailAddr)global HasNewEmailHasNewEmail = Trueprint('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 Falseelse: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 MIMEMultipartsender = 'howiexue@163.com'  # 我的邮箱,即发件人邮箱账号
passwd = '' #这里填的授权码,注意不是邮箱密码,这么Secret的数据当然隐去啦
mailserver = 'smtp.163.com'
port = '25'
sub = 'CSDN资料密码 By HowieXue' #用于邮箱的subjectdef 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服务器,端口是25server.login(sender, passwd)  # 发件人邮箱账号、邮箱密码server.sendmail(sender, receive, msg.as_string())  # 发件人邮箱账号、收件人邮箱账号、发送邮件server.quit()return Trueexcept Exception as e:print(e)return False

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

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

备注:邮箱SMTP设置

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

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

其它好玩的Python脚本

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

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

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

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


博主热门文章推荐:

一篇读懂系列:

  • 一篇读懂无线充电技术(附方案选型及原理分析)
  • 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信
  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

LoRa Mesh系列:

  • LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
  • LoRa学习:信道占用检测原理(CAD)
  • LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)

网络安全系列:

  • ATECC508A芯片开发笔记(一):初识加密芯片
  • SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
  • 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
  • AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例

嵌入式开发系列:

  • 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
  • IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
  • Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
  • Android底层调用C代码(JNI实现)
  • 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
  • Android/Linux设备有线&无线 双网共存(同时上内、外网)

AI / 机器学习系列:

  • AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
  • AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
  • AI: 什么是机器学习的数据清洗(Data Cleaning)
  • AI: 机器学习的模型是如何训练的?(在试错中学习)
  • 数据可视化:TensorboardX安装及使用(安装测试+实例演示)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python自动发送邮件实现

目录 1 前言2 准备工作2.1 电子邮件的基础知识。2.2 python邮件库2.3 邮箱设置 3 python实现邮件自动发送3.1 SMTP()和send()方法介绍3.2 python实现实例 参考信息 1 前言 python功能强大&#xff0c;可以实现我们日常办公的很多任务。诸如批量处理word,excel,pdf等等文件&…

VBA使用Outlook自动发送邮件

↓↓↓欢迎关注我的公众号&#xff0c;在这里有数据相关技术经验的优质原创文章↓↓↓ 基础版本–能自动发送就是成功 利用VBA使用Outlook自动发送邮件&#xff0c;代码及注释如下&#xff1a; Sub send_mail()Dim ObjOL As Object Dim itmNewMail As Outlook.MailItem Dim…

Python实现自动发送邮件

最近比较闲的慌&#xff0c;在自己学习Python爬虫&#xff0c;学到了用Python发送邮件&#xff0c;觉得这个可能以后比较实用。以下项目用QQ邮箱为例。 需要用到的模块&#xff1a; smtplib&#xff0c;email 提醒&#xff01;QQ 邮箱一般默认关闭SMTP服务&#xff0c;我们得…

chatgpt赋能python:Python写模拟器脚本

Python写模拟器脚本 Python是一种强大的编程语言&#xff0c;适用于各种任务&#xff0c;包括模拟器编写。模拟器是一种软件程序&#xff0c;能够模拟硬件或软件系统的行为。这篇文章将介绍Python编写模拟器脚本时需要关注的一些关键点。 为什么选择Python编写模拟器脚本 Py…

chatgpt赋能python:Python在线模拟器:让编程变得更加轻松

Python 在线模拟器&#xff1a;让编程变得更加轻松 介绍 Python 在线模拟器是一个非常实用的工具&#xff0c;它可以帮助用户直接在浏览器中测试和运行 Python 代码。在线模拟器的出现简化了编程过程&#xff0c;不需要安装 Python IDE 等软件&#xff0c;只需要有一台连接互…

老子简介(函谷关道德经)

老子简介 老子(约前580~前500年之后)&#xff0c;姓李名耳。字聃&#xff0c;春秋时期楚国人&#xff0c;道家学派创始人。曾在东周国都洛邑(今河南洛阳)任守藏史(相当于国家图书馆馆长)。他博学多才&#xff0c;晚年乘青牛西去&#xff0c;在函谷关前写成《道德经》。 老子主…

【天天读书】《道德经》第十六章

《道德经》第十六章 [原文] 致虚极,守静笃①; 万物并作②,吾以观复③。 夫物芸芸④,各复归其根。 归根⑤曰静,静曰⑥复命⑦。 复命曰常⑧,知常曰明⑨。 不知常,妄作凶。 知常容⑩,容乃公, 公乃全⑾,全乃天⑿, 天乃道,道乃久, 没身不殆。 [译文] 尽力…

论文学习——VideoGPT

论文学习——VideoGPT: Video Generation using VQ-VAE and Transformers 原文链接&#xff1a;https://arxiv.org/abs/2104.10157 1. 设计思路 不同种类的生成模型在一下多个维度各有权衡&#xff1a;采样速度、样本多样性、样本质量、优化稳定性、计算需求、评估难易程度等…

拥抱变化 | SAM发布后,大模型时代的算法研发如何发展?

作者 | 刀刀宁 编辑 | 汽车人 原文链接&#xff1a;https://zhuanlan.zhihu.com/p/619797754 点击下方卡片&#xff0c;关注“自动驾驶之心”公众号 ADAS巨卷干货&#xff0c;即可获取 点击进入→自动驾驶之心【AIGC】技术交流群 大模型时代&#xff0c;是危机时代。 但危机&a…

【Midjourney实操】逼真到颤抖!保姆级教程教生成效果炸裂的图片

最近&#xff0c;许多由Midjourney V5创作的画作在网络上引起了热议&#xff0c;许多人惊呼&#xff1a;人类画师&#xff0c; 插画师&#xff0c; 设计师统统活不下去了&#xff01; 比如下面这张中国情侣的画作&#xff1a; 因为前段时间这个很火&#xff0c; 我跟着同样的p…

DDR5市场迎来拐点 Rambus再次先发制人

在数字化时代&#xff0c;行业用户对于算力的追求是无止境的。除了像CPU这样的核心部件以外&#xff0c;内存的容量与带宽也是提升算力不可忽视的重要一环。近日&#xff0c;Rambus率先推出6400MT/s DDR5寄存时钟驱动器&#xff0c;旨在进一步提升服务器内存性能。 算力驱动创新…

高质量WordPress下载站模板5play主题源码

介绍&#xff1a; 5play下载站是由国外站长开发的一款WordPress主题&#xff0c;主题简约大方&#xff0c;为v1.8版本&#xff0c; 该主题模板中包含了上千个应用&#xff0c;登录后台以后只需要简单的三个步骤就可以轻松发布apk文章&#xff0c; 我们只需要在WordPress后台…

当月薪3000变成万元进账,ChatGPT成就前女友视野中的闪耀新星

在生活的曲折丛林中&#xff0c;每个人都渴望抓住那一抹光明。突然&#xff0c;你发现了一个隐藏的秘密武器&#xff0c;它能让你趟过迷雾&#xff0c;瞥见成功的彼岸。ChatGPT&#xff0c;这个神秘的力量&#xff0c;将领导你跃过层层障碍&#xff0c;找到属于你的辉煌篇章。马…

【前端】vue学习5 : vue + ElementUI

vueelementUI 项目搭建 命令行需要管理员权限。 根据之前创建vue-cli项目一样再来一遍 创建项目。 1、创建一个名为 hello-vue 的工程 vue init webpack vue-element D:\IdeaProjects\vue>vue init webpack vue-element ‘git’ &#xfffd;&#xfffd;&#xfffd;&…

理解Window和WindowManager(一)

理解Window和WindowManager(一) Window是一个抽象类,它的具体实现是PhoneWindow,创建一个WindowManager就可以创建一个Window&#xff0c; Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService是一个IPC过程 为什么使用Window 首先就是Window…

最牛最全的 Postman 实现 API 自动化测试教程

【 文章末尾给大家留下了大量的福利】 背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉&#xff0c;对于开发人员和测试人员而言&#xff0c;使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式。但 postman 本身是一个图形化软件&#xff0c;相对较…

Python自动化办公文章,开放下载共97页PDF

发现很多读者对python自动化办公&#xff08;python操作Excel、Word、PDF、PPT&#xff09;的文章都很喜欢&#xff0c;并希望能够应用到工作中去。 因此&#xff0c;我直接写了一个文档《python自动化办公系列文章》供大家学习参考&#xff0c;已经整理成册(如下图所示)&…

RPA、低代码、流程挖掘纷纷引入生成式AI,超自动化迎来LLM时代

3月7日&#xff0c;有个名为Kognitos智能RPA厂商拿到了675万美元融资&#xff0c;自送绰号“生成式AI自动化”先驱。其主要业务&#xff0c;是提供类似ChatGPT的对话式功能&#xff0c;为客户提供更人性化的智能自动化服务。 对于Kognitos的绰号&#xff0c;业内人士看后呵呵一…

Win10、Win11跳过联网注册微软账户激活方法

第一次开机之后&#xff0c;跳过前面两个设置&#xff0c;我们来到联网界面&#xff0c;和win10不同的是&#xff0c;这个界面并没有预设跳过的按钮&#xff0c;开机重启也无法直接跳过这个步骤&#xff0c;所以需要通过特殊方式避过这个环节。大家可以先尝试使用下面的方法&am…

Android中水波纹效果的快速实现及使用

背景xml布局background属性资源文件代码实现foreground属性资源文件代码实现效果展示扩展使用及注意事项 背景 Android 5.0 以上引入了控件点击的水波纹效果&#xff0c;为了用户体验和相关需求需要。下面我们来一起实现。提前告知一下&#xff0c;实现起来相对是简单的&#…