qmail+vpopmailの環境でDjangoからメールをSMTP認証で送信する

vpopmailを使ってqmailでバーチャルドメイン運用している場合、困った問題がひとつあります。vpopmailがCRAM-MD5に未対応なんですね。

まぁMTAとして運用するにはたいして問題ないんですが、Djangoでメール送信しようとすると大問題、DjangoはSMTP認証のときにパスワードをMD5で暗号化してqmailに送っているようです。よって、qmailから「SMTP認証にコケました。」と叱られてしまうわけです。

ので、PLAINでSMTP認証をする方法です。

PythonインストールディレクトリのLibフォルダに「smtplib.py」があるはずです。その562行目付近、

preferred_auths = [AUTH_CRAM_MD5, AUTH_PLAIN, AUTH_LOGIN]

preferred_auths = [AUTH_PLAIN, AUTH_LOGIN,AUTH_CRAM_MD5]

に変更します。認証の優先順位ですね。優先順位を入れ替えているだけなのでCRAM_MD5が使えなくなるわけでもなく、vpopmailの困った仕様にも対応可能です。

MTA変えただけでメールが送信できなくなり、しかもMUAからは無事に送信で来ちゃっていたのでまったくわからず、一晩悩みました。