python邮件定时发送短信_python实现自动定时给女朋友发手机短信,每天一个笑话!...

news/2025/1/15 15:37:50/

加小编QQ群:832339352 即可自动获取大量Python视频教程以及各类PDF!

大四的生活就是这么无聊,我琢磨着也学了这么多东西了,为啥不能用自己的知识来给生活找点乐子呢?我想反正每天都要给Ta问候一声早安,为何不同时讲个笑话呢?如果能写个程序每天早上定时给Ta发一条问候早安同时讲一个笑话的短信该多好。说干就干,走起~

笑话准备

笑话从哪里来?自己写肯定是不现实的。在这个“云”的时代,各种云都有,自然是不缺开放API的(大部分都是免费的)。随意一搜,果然被我找到一个接口:易源_笑话大全

http://apistore.baidu.com/apiworks/servicedetail/864.html

根据它给的API可以获取它所有的笑话,关键代码如下:appkey = "你自己申请的appkey"url = 'http://apis.baidu.com/showapi_open_bus/showapi_joke/joke_text?page=1'#API地址req = urllib2.Request(url) #初始化请求req.add_header("apikey", appkey) #添加 http请求的headerresp = urllib2.urlopen(req) #发起请求content = resp.read()#获得返回内容,json格式字符串if(content):json_result = json.loads(content) #转换为字典对象# 下面从这个字典中获得笑话的标题和正文content_list = json_result['showapi_res_body']['contentlist']# 只取第一条笑话的标题和正文 first_title = content_list[0]['title'].encode('utf8') first_text = content_list[0]['text'].encode('utf8') print '标题:'+first_title print '内容:'+first_textelse: print "error"

这里简单做一下介绍:urllib2是Python的一个获取URL的组件。他以urlopen函数的形式提供了一个非常简单的接口,具有利用不同协议获取URL的能力,同样提供了一个比较复杂的接口来处理一般情况。urllib2可用来完成以下功能:

1、获取Web页面

2、在远程http服务器上验证

3、额外数据请求,如表单提交(GET和POST)

4、异常处理

5、非http协议通信(如FTP)

它的详细操作可以查看官方文档https://docs.python.org/2/library/urllib.html

发短信

笑话准备好了,那么怎么发短信到手机呢?类似上面小节,我想着肯定也有开放的API,但是这次就没那么幸运了,短信API都是要付费的~, 对于一个学生党来说有点不现实。怎么办??苦思冥想不得其解,这个时候突然收到移动服务号的短信如图:

这提醒了我,移动的139邮箱要给用户收到的邮件发送短信提醒!!这就妙了,因为发邮件是不需要钱的,我只需要发邮件到Ta的139邮箱就可以了,哈哈。关键代码如下:import smtplib,sysfrom email.mime.text import MIMETextmail_host="smtp.qq.com" #设置服务器mail_user="你的qq邮箱 " #用户名mail_pass="你的qq邮箱密码" #密码def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容;me="笑话来了"+"" #这里的hello可以任意设置,收到信后,将按照设置显示 msg = MIMEText(content,_subtype='html',_charset='utf-8') #创建一个邮件消息实例,这里设置为html格式邮件 msg['Subject'] = sub #设置主题 msg['From'] = me msg['To'] = ";".join(to_list) try: s = smtplib.SMTP #实例化python邮件的smtp类 s.connect(mail_host) #连接smtp服务器 s.login(mail_user,mail_pass) #登陆服务器 s.sendmail(me, to_list, msg.as_string()) #发送邮件 s.close() return True except Exception, e: print str(e) return False

我是用的是qq邮箱,一般的邮件服务器都会开放smtp,pop3,imap服务的端口给用户,让用户可以查询邮件或者发送邮件。我们这里发送邮件,所以使用smtp服务。Python 的smtplib库可以实现这一功能。

整合代码尝试,效果如下图:

可见不能完全显示,这是因为139邮箱免费版具有140字限制如图:

有两种办法解决,一是付费5块钱(还是不愿意!),二是把一个笑话分成三部分,分别放在发件人,主题和正文中,如下图:

还是不行,字数限制是个硬伤。那就从原来的从笑话列表里选择第一个笑话改为选择字数最少的一个。代码如下:json_result = json.loads(content)content_list = json_result['showapi_res_body']['contentlist']minlen = 10000for item in content_list: if len(item['text'])

如下图:

基本可行了,不过发多了过后腾讯会认为是垃圾邮件(汗),主要是发件人名字太奇怪了,大家有什么好主意可以告诉我一下啊,多多交流。

完整代码(joke.py)如下:# -*- coding: utf-8 -*-'''Created on 2016年1月22日@author: 邱康'''import urllib2, json,sys,smtplibfrom email.mime.text import MIMETextreload(sys)sys.setdefaultencoding('utf-8')#避免中文编码问题mail_host="smtp.qq.com" #设置服务器mail_user="************" #用户名mail_pass="*********" #口令 mailto_list=['*******'] #邮件接受者def send_mail(to_list,part1,sub,content): #to_list:收件人;sub:主题;content:邮件内容; me=part1+"" #hello msg = MIMEText(content,_subtype='plain',_charset='utf-8')#创建一个实例,这里设置为纯文字格式邮件编码utf8 msg['Subject'] = sub #设置主题 msg['From'] = me #设置发件人 msg['To'] = ";".join(to_list) try: s = smtplib.SMTP() #实例化 s.connect(mail_host) #连接smtp服务器 s.login(mail_user,mail_pass) #登陆服务器 s.sendmail(me, to_list, msg.as_string()) #发送邮件 s.close() return True except Exception, e: print str(e) return Falseif __name__ == '__main__': appkey = "e2376cfbe3b27dff923ed61698839a67" url = 'http://apis.baidu.com/showapi_open_bus/showapi_joke/joke_text?page=1' req = urllib2.Request(url) req.add_header("apikey", appkey) resp = urllib2.urlopen(req) content = resp.read() if(content): json_result = json.loads(content) content_list = json_result['showapi_res_body']['contentlist'] minlen = 10000 for item in content_list: if len(item['text'])

定时任务

现在准备工作齐全了,就差最后一步定时发送了。Linux 提供了一个定时任务工具crontab,windows提供了一个定时任务工具叫做任务计划,不过我的笔记本又不是随时连上网的,所以把这个脚本放在实验室的虚拟机上了(debian)。一般linux都预装有python环境所以只需以下命令:Vi /etc/crontab

在文件最后一行添加30 7 * * * root python /root/joke.py

这样就能达到每天早上7:30 发送给Ta发短信的目的啦!


http://www.ppmy.cn/news/512322.html

相关文章

腾讯手机号码获取验证码功能

腾讯短信平台申请ID https://cloud.tencent.com/document/product/382 Maven导入包&#xff1a; <dependency><groupId>com.github.qcloudsms</groupId><artifactId>qcloudsms</artifactId><version>1.0.5</version></dependenc…

微信申请流程

微信申请流程 申请所需相关资料&#xff1a; o 可以收发邮件的电子邮箱 o 医院事业单位法人证书&#xff08;原件的拍照件&#xff09; o 医院组织机构代码证&#xff08;原件的拍照件&#xff0c;或复印件加盖医院公章后的拍照件&#xff09; o 医院法人身份证&#xff0…

安卓开发系列 之如何获取手机短信内容

1 手机中短信数据库相关字段包括&#xff1a; _id&#xff1a;短信序号&#xff0c;如100    address&#xff1a;发件人地址&#xff0c;即手机号&#xff0c;如8613811810000&#xff0c;这里需要注意的是手机号是否加86&#xff0c;可以加上86和不加86分别测试下   pers…

Spring Boot入门教程(三十九):微信支付集成-申请服务号和微信支付

分享一个朋友的人工智能教程。比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看。 一:简介 I: 只有服务号才具备微信支付功能 订阅号即使是认证的,也没有微信支付的申请的权限,登陆微信公众平台,在左侧列表没有申请微信支付这一搜索栏目。订阅号的主要功能是作为自媒体,发…

C#简单实现发送手机短信

编写一个从电脑向手机发送短信的程序&#xff0c;从网上查找到有三种方式&#xff1a; (1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备…

引入短信服务发送手机验证码进行安全校验

其他方案>引入QQ邮箱发送验证码进行安全校验 相对短信验证码&#xff0c;操作更简单而且免费 最近想给自己的项目在注册时加点安全校验&#xff0c;准备使用免费的邮箱验证来着&#xff0c;在上一篇引入QQ邮箱进行安全校验时&#xff0c;看有朋友说阿里云会送一些短信服务免…

微信小程序 获取 手机验证码 短信验证码 后端功能实现解析

本文原创首发CSDN&#xff0c;链接 https://mp.csdn.net/console/editor/html/106041472 &#xff0c;作者博客https://blog.csdn.net/qq_41464123 &#xff0c;转载请带上本段内容&#xff0c;尤其是脚本之家、码神岛等平台&#xff0c;谢谢配合。 目录 前言 第一步&#x…

用户注册调用短信服务接口实现手机号注册

一般现在平台的用户在注册时都是使用手机号注册&#xff0c;所以就需要用到手机介绍短信验证码实现注册&#xff0c;在这里我调用的是榛子云短信平台第三方提供的短信服务发送验证码。 短信验证码实现流程 1、构造手机验证码&#xff0c;生成一个6位的随机数字串&#xff1b; 2…