0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonでのメール送信を関数にしてみた

0
Posted at

SPFの設定見直しなんかをやっていると
メールの試送が増えるんですが、
そのときにあったら便利っぽい関数を作りました。

必要最小限の仕様ですが、
関数でメールを送信できるようになると
思った以上に便利だったので共有します。

たぶん、他の方の環境でも動くかと思います。
万が一動かなかった場合には一報ください。
サポートは難しいですが、原因解消には結びつけたく思います。

ソース本体

SMTPy

SMTP mail sender on python

SMTP サーバを利用してメールを送信する Python ユーティリティです。
標準ライブラリのみで構築されており、本コードはポン付けで利用できます(たぶん)。

作ろうと思った経緯

複数のドメインに対して、それぞれのサブドメインでSPFの設定をしています。

SPFの設定自体は慣れてしまっているので難なくできるのですが、
念のために確認をしようと思うと、
あれこれメーラーの設定をしたりとめんどくさかったりします。

そこで、Python上で送信できる関数ができると楽ちんだなと考えて作りました。

本質的なコードは数行なのですが、試行用や他の関数と組み合わせて使うときに
あったら良さげな挙動(少なくとも私が欲しいと思う挙動)に対応させてあります。

機能的には最小限、テキストメールを送るというぐらいのものです。

TSLのみに対応させてありますので、SSLに対応させたいなどがありましたら、
このコードに適宜変更を加えていただいてご利用ください。

手元でのテストはレンタルサーバーのSMTPのみですが、
Gmail等でも動くと思います。きっと。

機能

  • テキストメールの送信
  • STARTTLS による暗号化通信
  • CcBcc を含む複数宛先対応
  • 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()

関数仕様

send(...)

引数 説明
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 等を利用してください)。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?