特定のメールアドレスでメールを受信して、それをトリガーとしてPythonスクリプトを起動します。
1.ファイル「.mailfilter」を次のように設定します。
- .mailfilterのパーミッションは「600」。
- wakeup.pyのパーミッションは「744」。
- コマンドやファイル名等はフルパスで記述します。
- 「;」を用いて1行に複数シェルを記述できます。
to “| cd /home/test;/usr/local/bin/python /home/test/wakeup.py”
2.Pythonスクリプト「wakeup.py」を作成します。
Pythonスクリプト「wakeup.py」は、受け取ったメールアドレスに応答します。本文はそのまま返します。
- 受信したメールの内容は標準入力から受け取ります。
- メールのヘッダ部分と本文は「0xA」で区切られています。
- 本文は、標準入力「read」関数で読み込みます。
【wakeup.py】
# /usr/local/bin/python # coding=utf8 import sys from email.Header import decode_header from email.Parser import Parser from email.mime.text import MIMEText import smtplib # read Mail Header f = open('header.txt', 'w') while True: input_line1 = sys.stdin.readline() if len(input_line1)== 1: break f.write(input_line1) f.close() # read Mail Body body = sys.stdin.read() msg=Parser().parse(open('header.txt')) header_from =msg.get('From') header_to =msg.get('To') header_subject=msg.get('Subject').decode('iso-2022-jp') result="From: %s, To: %s, Subject: %s"%( header_from, header_to, header_subject, ) f = open('text.txt', 'w') f.write(msg.get('From') + '\n' + result.encode('utf-8') + '\n') f.close() # 本文 mail_body = body.decode('cp932').encode('iso-2022-jp') msg = MIMEText( mail_body , 'plain', 'iso-2022-jp') # 件名、宛先 msg['Subject'] = 're:' + header_subject msg['From'] = header_to msg['To'] = header_from # Send the message via our own SMTP server, but don't include the envelope header. s = smtplib.SMTP() s.connect() s.sendmail( header_to, header_from, msg.as_string() ) s.close()
connect関数は、動作環境でメールサーバが動いていなければ、接続不可のエラーとなりmailコマンドは使えません。この場合、SMTPでサーバのアドレスとポートを指定しユーザIDとパスワードをパラメータにしてlogin関数を呼び出し、ログインします。参考:Amazon Dash ButtonでIoTボタンの作成
3.メールを送信します。
設定したメールアドレスに対して、次のようにメールを送信します。
次のメールが受信されます。