Raspberry Pi で メール送信

Rapberry Pi は、いわゆるIoT機器としての代表格です。

インターネットに簡単に接続できます。

 

ということは、Eメールを送れると、使い道が一気に広がります。

・人感センサーに何かが反応したら写真を撮影、メールに添付して送る

・温度センサーが異常な数値を示したらメールでお知らせ

・玄関に置いておいて、子供が帰ったらスイッチボタンを押すようにルールを決めたら、メールでお知らせ

 

今回は、ごくごく単純に、件名と本文だけのメールを送信する方法です。

画像ファイルの添付とか、あまり欲張らずに、テキストだけです。

 

なお、インターネットへの接続は必須です。

有線LAN、Wifiによる無線など、方法はなんでもOK。

 

 

1. メールアドレスの準備

  メールを送る先のメールアドレスはもちろんですが、その特性上、

  ・宛先メールアドレス

  ・送り元(要するに、自分)のメールアドレス

  ・送り元の送信メールサーバー(SMTPサーバー)

  が必要です。

  宛先はともかく、簡単にメールアドレスを取得できる方法としてGmailGoogle)が便利でしたが、いろいろとセキュリティ対策が取られるようになり、

  プログラムから送り元として使うのは難しくなりました。

  これらについては自前でSMTPサーバーを建てるなどの方法があると思いますが、今回はそこまでは立ち入りません。

2. Pythonプログラミング

  下記プログラム中の、

  ・自分のメールアドレス

  ・自分のメールサーバーへのパスワード

  ・自分のメールアドレスのSMTPサーバー名

  ・送信先メールアドレス

  ・件名、本文

  は、適宜書き換えてください。

  このままでは動きません。

 

# -*- coding: utf-8 -*-
# 日本語コメントをエラーとしないように、UTF-8で保存

# 使用するライブラリのインポート
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate

# 定数の定義
SELF_MAIL_ADDRESS = '*****@*****'   # 自分のメールアドレス
SELF_MAIL_PASSWORD = '*****'        # 自分のメールサーバーへのパスワード
SELF_SMTP_SERVER = '***.**.*.'      # 自分のメールアドレスのSMTPサーバー名
SELF_SMTP_PORT = 587                # SMTPサーバーのポート番号(おそらくは、このままでOK)

def create_mail(mail_subject, mail_from, mail_to):
    """
    送信メールを生成、返却
    """

    mail_message = MIMEText(mail_body)
    mail_message['Subject'] = mail_subject
    mail_message['From'] = mail_from
    mail_message['To'] = mail_to
    mail_message['Date'] = formatdate()

    # デバッグ用に送信メールの内容を出力
    print(mail_message)

    return mail_message

def send_mail(mail_message):
    """
    メールを送信する
    """
    smtp = smtplib.SMTP(SELF_SMTP_SERVER, SELF_SMTP_PORT)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login(SELF_MAIL_ADDRESS, SELF_MAIL_PASSWORD)
    
    smtp.sendmail(SELF_MAIL_ADDRESS, mail_to, mail_message.as_string())
    smtp.close()


# 継承した場合など、実行されないようにする(現状、意味は特にない)
if __name__ == "__main__":
    # メールの内容
    # 送信先メールアドレス
    mail_to = "***@***"
    # メールの件名
    mail_subject = "件名テスト"
    # メールの本文
    mail_body = "本文テスト"

    # 送信メールを作成する
    mail_message = create_mail(mail_subject, SELF_MAIL_ADDRESS, mail_to)

    # メールを送信する
    send_mail(mail_message)