之前的文章里有一个用python—SMTP发信的程序,利用爬虫随机爬下段子网站的一则段子然后发送给指定收件人。
在本地计算机上运行这个程序只有及时性的功能(一直挂着也不太现实),所以现在将它放置在服务器端上。
需要将源程序稍微修改加上定时语句,如下列的每小时一则黄段子,拓展收件人列表。
#coding:UTF-8 import sys import re import urllib import smtplib import random from email.mime.text import MIMEText #放置服务器上设置时间 import datetime import time to=[‘[email protected]‘,‘[email protected]‘,‘[email protected]‘,[email protected]‘,‘[email protected]‘] host="smtp.163.com" #smtp服务器 user="******" #用户名 password="*" #密码 postfix="163.com" #后缀 def gethtml(url): page=urllib.urlopen(url) html=page.read() return html def getmessage(html): p=re.compile(r‘<div class="content">(.*)</div><script type="text/javascript">‘) #对段子内容进行正则匹配 message=re.findall(p,html)#返回正则匹配的结果 return message def send_mail(to_list,sub,content): me="Jokes Sending!"+"<"+user+"@"+postfix+">" msg = MIMEText(content,_subtype=‘plain‘,_charset=‘utf-8‘) msg[‘Subject‘] = sub msg[‘From‘] = me msg[‘To‘] = ";".join(to_list) try: server = smtplib.SMTP() server.connect(host) server.login(user,password) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False def task(): i=random.randint(1,500) i=str(i) web=gethtml(‘http://ishuo.cn/subject/‘+i) #该网站段子的链接特点 message=getmessage(web) message2=‘‘.join(message)#将结果转换为字符串类型 #message2=message2.decode(‘utf8‘) message2=str(message2) print message2 for m in range(0,5):#对收信人列表中的每个发邮件 if send_mail(to[m],"Laugh !guys!",message2): print "Suceed!" else: print "Failed!" def timer(n): while True: task() time.sleep(n) if __name__ == ‘__main__‘: while(1): timer(60*60) #延时一小时
接下来将它到服务器端,这里我们利用pscp.exe进行上传
pscp C:\Python27\smtp\smtp.py [email protected]*****:/home/
两个分别是本地路径和服务器路径,接下来输入password后就传输完成。
在服务器端,用SSH连接后,我们有多种定时执行此任务的方法
如crontab指令(本程序不用,因为代码里已经自带延迟了,若使用crontab使用上篇文章(未更改前)的代码即可)
crontab -e
编辑cron文件,设置执行间隔时间(自行设定)和执行命令,可利用crontab -l 查看是否添加成功。
后
sudo service cron start
ps: service start命令需要root权限才可以执行。
ps2:若无python环境需要搭建,上述程序为python2.7版本,或缺少运行的库自行在服务器上安装配置pip。
完成后,该程序就能全天24小时按指定的时间间隔给收信人列表发段子啦。
时间: 2024-10-12 21:36:27