Pythonでメールを送信するための「smtplib」と「email」パッケージを紹介します。
Pythonでメール送る際には基本的にこの2つを使用すれば、
基本的なメール送信は可能ですのでしっかりマスターしましょう。
目次
smtplibとは?
「smtplib」とは、SMTPまたはESMTPのリスナーデーモンを備えており、
メールサーバーにメールを送るためのSMTPクライアント・セッション・オブジェクトです。
基本的には、
- メールサーバーとの接続の「SMTP()」
- メール送信の「sendmail()」
- メール接続終了の「quit()」
を覚えておけばメールを送ることができます。
import smtplib
smtp = smtplib.SMTP(<メールサーバーホスト>,<接続先ポート>)
smtp.sendmail(<Fromアドレス>, <Toアドレス>,送信メール)
smtp.quit()
参考マニュアル:smtplib — SMTP プロトコルクライアント
emailパッケージとは?
「email」パッケージは電子メールとMIME処理のためのパッケージです。
電子メールメッセージを管理ライブラリで、
電子メールメッセージの表現や国際化されたヘッダや多方面のユーティリティなど多くの機能が利用出来ます。
今回は以下のクラスオブジェクトを利用します。
from email.mime.text import MIMEText # メールとMIMEオブジェクト
from email.header import Header # 国際化ヘッダー
from email.utils import formatdate # RFC 2822 形式
参考マニュアル:email — 電子メールと MIME 処理のためのパッケージ
smtplibとemailパッケージを使ったメール送信
今回使用するメールサーバーはCentOS上で「Postfix」を使用します。
まだCentOS上でメールサーバーを準備出来ていない場合は以下の手順を参考にしてみてください。
CentOS/RHELにPostfixをインストール~CUIを使用した簡易メール送信
メールサーバーの「Postfix」のインストールからCUIコマンドを利用したメール送信(初期構築確認)の方法を紹介します。 最近はクラウドベンダーの「AmazonのAWS」や、 ...
以下が今回用意したサンプルコードになります。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formatdate
from_address = test@test-server.com
to_address = shimidai2100@gmail.com
charset = UTF-8
subject = テスト
message = これはテストです。これはテストです。
msg = MIMEText(message, 'plain', charset)
msg['Subject'] = subject
msg['From'] = Header(subject, charset)
msg['To'] = to_address
msg['Date'] = formatdate(localtime=True)
smtp = smtplib.SMTP('localhost')
smtp.sendmail(from_address, to_address, msg.as_string())
smtp.quit()
サーバー上で上記のスクリプトを実行してみますと「/var/log/maillog」にログが出力され、
メールが送信されたことが分かります。
$ tail 8 /var/log/maillog
Sep 6 00:20:20 test-server postfix/smtpd[24663]: connect from localhost[::1]
Sep 6 00:20:23 test-server postfix/smtpd[24663]: D2814209C856: client=localhost[::1]
Sep 6 00:20:23 test-server postfix/cleanup[24666]: D2814209C856: message-id=<20180905152023.D2814209C856@test-server.localdomain>
Sep 6 00:20:23 test-server postfix/qmgr[21934]: D2814209C856: from=<test@test-server.com>, size=585, nrcpt=1 (queue active)
Sep 6 00:20:25 test-server postfix/smtp[24667]: D2814209C856: to=<shimidai2100@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.204.26]:25, delay=1.6, delays=0.01/0.01/0.55/0.99, dsn=2.0.0, status=sent (250 2.0.0 OK 1536160842 s125-v6si2281922pfb.335 - gsmtp)
Sep 6 00:20:25 test-server postfix/qmgr[21934]: D2814209C856: removed
Sep 6 00:20:28 test-server postfix/smtpd[24663]: disconnect from localhost[::1]