/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

Pythonでメールを送る方法

f:id:yatta47:20210503114029p:plain

今、Pythonでサイトに変更があったらメールを送るようにしてるんだけど、Linuxでのmailコマンドを使っていると、どうも件名が文字化けする場合がある。

Pythonで検出しているんだったら、Pythonでメール送るようにすればいいんじゃね?」

ってことで、Pythonでメールを送る方法を調べてみました。

簡単にできるんだね。先駆者の方々、ありがとう。

Google先生に聞いてみたらすぐ答えが出てきました。

Pythonの標準ライブラリでもメールを送ることが出来るらしい。

コードは以下の様な感じ。

# -*- coding: utf-8 -*- 

import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

if __name__ == "__main__":

    from_address = "sample@test.test"
    to_address   = "XXXXXXX@gmail.com"

    charset = "ISO-2022-JP"
    subject = u"メールの件名です"
    text    = u"メールの本文です"

    msg = MIMEText(text.encode(charset),"plain",charset)
    msg["Subject"] = Header(subject,charset)
    msg["From"]    = from_address
    msg["To"]      = to_address
    msg["Date"]    = formatdate(localtime=True)

    smtp = smtplib.SMTP("localhost")
    smtp.sendmail(from_address,to_address,msg.as_string())
    smtp.close()

自分で変更したのは

smtp = smtplib.SMTP("localhost")

のところ。

"localhost"のところはサーバのドメインとかを入れるらしいんだけど、メール送信にはPostfixを使っていて、何も設定していないからlocalhostから送ることになるらしい。ここだけがハマったところ。

ちなみに、省略するとlocalhost:25で送られるとのこと。明示的に書かなくても良かったんだ・・・・

Postfixの勉強にもなった。確かに不思議だったんだよね。mailコマンドで送った場合、データとしてはどこを参考にしていたのかよくわかってなかったから。

Postfix 基本設定

いや〜。便利だ便利だ。すでにあるコードと結合させよう。

参考にしたサイト

unoh.github.com by unoh