2015年07月08日

RaspberryPiからメールを送信してみた。【Python】【Postfix】を使用。


◆今日のゴール

RaspberryPiからメールを送信します。

今回は、SMTPサーバーにPostfixを使います。

また、メール送信プログラムはPythonを使って作ります。

mysza.gif

それでは、やっていきましょう!!

スポンサードリンク


◆Postfixのインストール

メールの送信サーバー(SMPTサーバー)をRaspberryPiにインストールします。今回はPostfixを使います。

まずはPostfixで使用するmailコマンドを使えるようにするため、
mailutilsをインストール
$ sudo apt-get install mailutils
続いて、Postfixをインストール
$ sudo apt-get install postfix
いろいろ質問が出てきますが、デフォルトのままインストールを進めます。

まず、メールサーバー設定形式を聞かれるので、「インターネットサイト」を選択しEnterクリック。
postfix01.png

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

あとは自動で、インストールが進み完了します。
基本的には、特に設定を変更する必要はないですが、下記の「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です。

センサーで取得した値などを送信するなど活用ができます。



posted by Raspberry Pi at 07:00 | Raspberry Pi | このブログの読者になる | 更新情報をチェックする