之前的文章里有一個用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=['1@qq.com','2@qq.com','3@qq.com',4@qq.com','5@qq.com'] 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 root@*****:/home/
兩個分別是本地路徑和服務器路徑,接下來輸入password后就傳輸完成。
在服務器端,用SSH連接后,我們有多種定時執行此任務的方法
如crontab指令(本程序不用,因為代碼里已經自帶延遲了,若使用crontab使用上篇文章(未更改前)的代碼即可)
crontab -e
編輯cron文件,設置執行間隔時間(自行設定)和執行命令,可利用crontab -l 查看是否添加成功。
后
sudo service cron start
ps: service start命令需要root權限才可以執行。
ps2:若無python環境需要搭建,上述程序為python2.7版本,或缺少運行的庫自行在服務器上安裝配置pip。
ps3:在關掉session后Linux服務器上的命令會終端,這時候就需要保持服務器上的命令執行,下面提供兩個方法:
1.nohup指令,(忽略掛斷信號),如 root#nohup python smtp.py & (&號表示為后台執行)
2.screen 需要install,輸入screen,鍵入space跳過,回到命令行
執行命令如 python smtp.py
ctrl+a+d 將session與screen斷開即可
完成后,該程序就能全天24小時按指定的時間間隔給收信人列表發段子啦。