2017-01-09 18 views
0

私はanacrontabを実行できる共有ホスティングを所有しています。私はそのサーバーで電子メールを受け取ったときにpythonスクリプトを実行したいと思います。 anacrontabは十分ですか? Gmailなどのクライアントを使用する方がよいでしょうか?電子メールの受信時にPythonスクリプトを実行

+0

ユーザーとして、procmailを使用してmいくつかの状態をパイプコマンドにアーチします。メールサーバーを管理する場合は、複数のアカウントの場合はmilter(メールフィルタ)を作成することができます。 – patthoyts

+0

ありがとう!このタスクにprocmailを使用する方法を知るためのソースの提案はありますか? –

+0

"filter mail with procmail"を検索すると、http://www.linux-mag.com/id/826/が有力候補になります。いくつかのスクリプトにパイプを使用するルールが必要です。 – patthoyts

答えて

0
import imapclient, pyzmail, html2text 

def latestMail(): 
    imapObj = imapclient.IMAPClient('imap.yourServer.com', ssl=False) 
    imapObj.login('imapUser', 'imapPass') 
    imapObj.select_folder('Inbox', readonly=False) 
    UIDs = imapObj.search(criteria='ALL', charset=None) 
    rawMessages = imapObj.fetch(UIDs[0], ['BODY[]', 'FLAGS']) 
    message = pyzmail.PyzMessage.factory(rawMessages[UIDs[0]]['BODY[]']) 
    return message 

def parser(message): 
    if message.text_part is not None and message.html_part is not None: 
     multipart = True 
    else: 
     multipart = False 

    if message.text_part is not None: 
     try: 
      body = message.text_part.get_payload().decode(message.text_part.charset) 
     except TypeError: 
      body = message.text_part.get_payload() 

    if message.html_part is not None and multipart is False: 
     try: 
      body = html2text.html2text(message.html_part.get_payload().decode(message.html_part.charset)) 
     except Exception: 
      raise Systemexit 
    return body 


try: 
    message = latestMail() 
    clean = parser(message) 
    print clean 
except IndexError: 
    print "No messages left" 
    raise os._exit(0) 
except Exception as e: 
    print e 

クローンタブの設定:

HOME=/var/www/html/whatever 
* * * * * root /var/www/html/whatever/myMailChecker.py 

結論:

これは毎分あなたのIMAPサーバの受信トレイに電話をかけて、自分のメールを谷とそれはコンテンツだパースパース、あなたが後にやりたいことができますメールコンテンツなどでmysqlテーブルに新しいエントリを作成するか、またはクリーンな場合は別のスクリプトを実行するis not Noneなど

+0

ありがとう!私は私のサーバ上にCrontabを持っていません、anacrontabだけなので、これが私のためにはうまくいかないのでしょうか。 –

+0

問題はありませんが、コードの10〜15行目に独自のCronバージョンを書くことで、完璧にCronをスキップできます –

+0

ああ、ありがとう!あなたは私が情報を見つけることができる場所を知っていますか/これについてもっと知るために何をすべきですか? –

関連する問題