◆今日のゴール
RaspberryPiからメールを送信します。
今回は、SMTPサーバーにPostfixを使います。
また、メール送信プログラムはPythonを使って作ります。

それでは、やっていきましょう!!
スポンサードリンク
◆Postfixのインストール
メールの送信サーバー(SMPTサーバー)をRaspberryPiにインストールします。今回はPostfixを使います。
まずはPostfixで使用するmailコマンドを使えるようにするため、
mailutilsをインストール。
$ sudo apt-get install mailutils続いて、Postfixをインストール。
$ sudo apt-get install postfixいろいろ質問が出てきますが、デフォルトのままインストールを進めます。
まず、メールサーバー設定形式を聞かれるので、「インターネットサイト」を選択しEnterクリック。

続いてドメイン名を入力します。デフォルトで、「host名.com」が入力されているので、そのままEnter。
(好きなドメイン名に変更してもOKです。)

あとは自動で、インストールが進み完了します。
基本的には、特に設定を変更する必要はないですが、下記の「main.cf」を編集することで、設定を変更することができます。
$ sudo vi /etc/postfix/main.cf
Postfixのサービス起動。
インストール完了と共に、Postfixのサービスが立ち上がります。
もし起動していない場合は下記コマンドでサービスを上げます。
$ sudo service postfix start
ちなみに、サービス起動時にIPv6の警告が出る場合がありますが、送信に影響はありません。ワーニングが出るのが嫌な場合は、上記のmain.cfのファイルの一番下の行に以下の文字列を追記すると警告が消えます。
inet_protocols = ipv4
◆Pythonのプログラムからメールを送る
適当なディレクトリにPythonのプログラムを作ります。
$ cd ~ $ sudo vi sendMail.py
「sendMail.py」という名前で新しくファイルを作り、以下のように編集します。
この際、日本語の件名・本文を送りたい場合は文字コードの指定とエンコードが必要なので、その処理を入れています。
#!/usr/local/bin/python # -*- coding: utf-8 -*- import smtplib from email.MIMEText import MIMEText from email.Header import Header def create_msg(from_address, to_address, subject, body, encode): msg = MIMEText(body, 'plain', encode) msg['Subject'] = Header(subject, encode) msg['From'] = from_address msg['To'] = to_address return msg def send_by_local(from_address, to_address, msg): # SMTPの引数省略の場合、SMTPサーバーは localhost:25になる s = smtplib.SMTP() s.connect() s.sendmail(from_address, [to_address], msg.as_string()) s.close() if __name__ == '__main__': from_addr = 'from_raspi@example.com' to_addr = 'to_raspi@example.com' subject = u'件名' body = u'本文です' encode = 'ISO-2022-JP' # 送信用のメッセージを作る msg = create_msg(from_addr, to_addr, subject, body, encode) # メール送信 send_by_local(from_addr, to_addr, msg)
保存したら、以下のように実行するとメールが送信されます。
$ sudo python sendMail.py
「to_addr」は送り先の実在するアドレスに書き換えてください。
「from_addr」は実在しないアドレスを入力しても送信可能です。
また、中継サーバーや外部のSMTPサーバーを使う場合は、17行目以降のSMTPの設定を変更すればOKです。
センサーで取得した値などを送信するなど活用ができます。