之前的文章里有一個用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小時按指定的時間間隔給收信人列表發段子啦。
