SMTP mail sender on python
SMTP サーバを利用してメールを送信する Python ユーティリティです。
標準ライブラリのみで構築されており、本コードはポン付けで利用できます(たぶん)。
複数のドメインに対して、それぞれのサブドメインでSPFの設定をしています。
SPFの設定自体は慣れてしまっているので難なくできるのですが、 念のために確認をしようと思うと、 あれこれメーラーの設定をしたりとめんどくさかったりします。
そこで、Python上で送信できる関数ができると楽ちんだなと考えて作りました。
本質的なコードは数行なのですが、試行用や他の関数と組み合わせて使うときに あったら良さげな挙動(少なくとも私が欲しいと思う挙動)に対応させてあります。
機能的には最小限、テキストメールを送るというぐらいのものです。
TSLのみに対応させてありますので、SSLに対応させたいなどがありましたら、 このコードに適宜変更を加えていただいてご利用ください。
手元でのテストはレンタルサーバーのSMTPのみですが、 Gmail等でも動くと思います。きっと。
- テキストメールの送信
STARTTLSによる暗号化通信Cc・Bccを含む複数宛先対応Message-Idヘッダの自動生成Return-Pathの指定smtplib.set_debuglevel(2)のデバッグログをキャプチャして出力
このリポジトリをクローンするだけで利用可能です。
git clone https://github.com/hama-caffeine/SMTPy.git
cd SMTPy外部ライブラリは不要です(Python 標準ライブラリのみ使用)。
もしくは、コードを直接コピペして関数を呼び出しても利用可能です。
import smtpy
def main():
mail_text, mail_log = smtpy.send(
smtp_server = "smtp.example.com",
smtp_port = 587,
smtp_user = "your-username",
smtp_pwd = "your-password",
from_address = "username@example.com",
to_list = ["recipient@example.com"],
subject = "テストメール",
body = "これはテストメールです。",
)
print("=== Mail Text ===")
print(mail_text)
print("=== SMTP Log ===")
print(mail_log)
if __name__ == '__main__':
main()| 引数 | 型 | 説明 |
|---|---|---|
smtp_server |
str |
SMTP サーバアドレス |
smtp_port |
int |
ポート番号(例: 587) |
smtp_user |
str |
SMTP 認証ユーザー |
smtp_pwd |
str |
SMTP 認証パスワード |
from_address |
str |
実際の送信元(envelope-from, Return-Path) |
from_display |
str |
表示用の差出人名(例: "山田太郎") |
return_path |
str |
Return-Path を明示指定(省略時は from_address) |
to_list |
list |
宛先アドレス(To) |
cc_list |
list |
CC 宛先(省略可) |
bcc_list |
list |
BCC 宛先(省略可) |
subject |
str |
件名 |
body |
str |
本文 |
mail_text: 設定された要素で組み立てたメールのテキストmail_log: SMTP 通信ログ(デバッグ情報を含む)
Return-Pathヘッダは受信サーバ側で上書きされる場合があります。sendmail()の envelope-from 引数によって決まるのが本来の挙動ですが、ここは私が使いやすい挙動にて。set_debuglevel(2)の出力は通常標準出力/標準エラーに流れますが、本ユーティリティではStringIOにキャプチャし、mail_logとして返り値にしています。- HTML メールや添付ファイルの送信は未対応です(拡張する場合は
email.mime.multipart等を利用してください)。