2

会社のSMTPサーバーを介してメールを送信する簡単なPythonスクリプトを作成しようとしています。次のコードを使用しています。

#! /usr/local/bin/python

import sys,re,os,datetime
from smtplib import SMTP

#Email function
def sendEmail(message):
        sender="SENDERID@COMPANY.com"
        receivers=['REVEIVER1@COMPANY.com','RECEIVER2@COMPANY.com']
        subject="Daily Report - " + datetime.datetime.now().strftime("%d %b %y")
        header="""\
                From: %s
                To: %s
                Subject: %s

                %s""" % (sender, ", ".join(receivers), subject, message)
        smtp = SMTP()
        smtp.set_debuglevel(1)
        smtp.connect('X.X.X.X')
        smtp.ehlo()
        smtp.starttls()
        smtp.ehlo()
        try:
                smtp.login('SENDERID@COMPANY.com', '********')
                smtp.sendmail(sender,receivers,header)
                smtp.quit()
        except Exception, e:
                print e

#MAIN
sendEmail("HAHHAHAHAHAH!!!")

このプログラムを実行すると、この結果が得られます。

connect: ('X.X.X.X', 25)
connect: ('X.X.X.X', 25)
reply: '220 COMPANY.com [ESMTP Server] service ready;ESMTP Server; 05/25/11 15:59:27\r\n'
reply: retcode (220); Msg: COMPANY.com [ESMTP Server] service ready;ESMTP Server; 05/25/11 15:59:27
connect: COMPANY.com [ESMTP Server] service ready;ESMTP Server; 05/25/11 15:59:27
send: 'ehlo SERVER1.COMPANY.com\r\n'
reply: '250-COMPANY.com\r\n'
reply: '250-SIZE 15728640\r\n'
reply: '250-8BITMIME\r\n'
reply: '250 STARTTLS\r\n'
reply: retcode (250); Msg: COMPANY.com
SIZE 15728640
8BITMIME
STARTTLS
send: 'STARTTLS\r\n'
reply: '220 Ready to start TLS\r\n'
reply: retcode (220); Msg: Ready to start TLS
send: 'ehlo SERVER2.COMPANY.com\r\n'
reply: '250-COMPANY.com\r\n'
reply: '250-SIZE 15728640\r\n'
reply: '250 8BITMIME\r\n'
reply: retcode (250); Msg: COMPANY.com
SIZE 15728640
8BITMIME
send: 'quit\r\n'
reply: '221 [ESMTP Server] service closing transmission channel\r\n'
reply: retcode (221); Msg: [ESMTP Server] service closing transmission channel
ERROR: Could not send email! Check the reason below.
SMTP AUTH extension not supported by server.

この「サーバーでサポートされていないSMTPAUTH拡張機能」のデバッグを開始するにはどうすればよいですか。エラー?

PS:正確な詳細を備えたJavaクラスが機能しているので、SMTPの詳細と資格情報が正しいことはわかっています。

4

1 に答える 1

8

表示されるエラーは、通信している SMTP サーバーが認証をサポートしていないと主張していることを意味します。デバッグ出力を見ると、 への応答に にEHLO必要な宣言が含まれていないことがわかりますAUTH。認証が (適切に) サポートされている場合、応答の 1 つは次のようになります。

250 AUTH GSSAPI DIGEST-MD5 PLAIN

(少なくとも のEHLO後のへのSTARTTLS応答では。) その応答が含まれていないため、smtplib はサーバーがAUTHコマンドを処理できないと想定し、送信を拒否します。あなたのSMTPサーバーがAUTHコマンドをアドバタイズしていなくてもサポートしていると確信している場合は、一連の機能に明示的に追加することで、smtplibがサポートしていることをこっそり納得させることができます. AUTHサポートされている認証スキームの種類を知る必要があります。そうすれば、次のことができます。

smtp.starttls()
smtp.ehlo()
# Pretend the SMTP server supports some forms of authentication.
smtp.esmtp_features['auth'] = 'LOGIN DIGEST-MD5 PLAIN'

...しかし、もちろんSMTPサーバーを仕様に従って動作させる方が良い考えです:)

于 2011-05-25T10:47:55.677 に答える