1. ホーム
  2. python

[解決済み] pythonからsendmailでメールを送信する

2023-08-08 01:09:11

質問

SMTPではなく、sendmailでメールを送信したい場合、この処理をカプセル化するpythonのライブラリはありますか?

もっと良いのは、全体の 'sendmail -versus- smtp' の選択を抽象化する良いライブラリはありますか?

私はこのスクリプトを多くの unix ホストで実行する予定ですが、そのうちのいくつかは localhost:25 をリッスンしています。

グッドプラクティスの一部として、私は本当にライブラリがヘッダインジェクションの脆弱性自体をケアするようにしたいと思います。 popen('/usr/bin/sendmail', 'w') に文字列をダンプすることは、私が望むよりも少し金属に近いです。

もし答えが「ライブラリを書いてこい」なら、そうしてください ;-)

どのように解決するのですか?

ヘッダーインジェクションは、メールの送り方ではなく、メールの組み立て方に要因があります。 以下の メール パッケージをチェックし、それを使ってメールを作成し、シリアライズし、それを /usr/sbin/sendmail を使って サブプロセス モジュールを使っています。

import sys
from email.mime.text import MIMEText
from subprocess import Popen, PIPE


msg = MIMEText("Here is the body of my message")
msg["From"] = "[email protected]"
msg["To"] = "[email protected]"
msg["Subject"] = "This is the subject."
p = Popen(["/usr/sbin/sendmail", "-t", "-oi"], stdin=PIPE)
# Both Python 2.X and 3.X
p.communicate(msg.as_bytes() if sys.version_info >= (3,0) else msg.as_string()) 

# Python 2.X
p.communicate(msg.as_string())

# Python 3.X
p.communicate(msg.as_bytes())