Skip to content

hama-caffeine/SMTPy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

About

SMTP mail sender on python

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages