554 exim4と私のコードでのSMTP同期エラー

exim4 smtp
554 exim4と私のコードでのSMTP同期エラー

私はexim4からこの拒否エラーに真っ先に走りました:

2010-02-15 01:46:05 SMTPプロトコル同期エラー(グリーティングを待たずに送信された入力):H = enderからの接続を拒否しました
[192.168.20.49] input=”HELO 192.168.20.49\r\n”

次のように、同期を強制しないようにexim4の設定を変更しました。

 smtp_enforce_sync='false'
 acl_smtp_connect = nosync nosync:
         control = no_enforce_sync
         accept

しかし、それは問題ではないようです。 私にとってあまり意味がないのは、そもそも554を取得している理由です。 私はHELOを送信し、応答を待ちます。そしてその中の何とかして、なんとか「554エラー」を生成します。

以下のコードで私が間違っているのは、99%の確率でこれが失敗することです(はい、2回動作しました)。 はい、ソケットはブロックされています。拒否されるまで5秒間待機します。 動作した2回は、まったく停止しませんでした。

HELOの代わりにEHLOを送信しようとしましたが、うまくいきません。 私は、接続してHELOを言うためにtelnetセッションを取得するという悲しみさえありました。 ただし、Python smtp(別のマシンから)を使用して、この同じサーバーに対してうまくメールを送信できます!

        hSocket = _connectServerSocket(server, port);
    if (hSocket != INVALID_SOCKET) {
        BYTE        sReceiveBuffer[4096];
        int            iLength = 0;
        int            iEnd = 0;
        char        buf[4096];

        strcpy(buf, "HELO ");
        strcat(buf, "192.168.20.49");
        strcat(buf, "\r\n");
        printf("%s", buf);
        if (send(hSocket, (LPSTR)buf, strlen(buf), NO_FLAGS) == SOCKET_ERROR) {
            printf("Socket send error: %d\r\n", WSAGetLastError());
            return (false);
        }
        iLength = recv(hSocket,
                       (LPSTR)sReceiveBuffer+iEnd,sizeof(sReceiveBuffer)-iEnd,
                        NO_FLAGS);
        iEnd += iLength;
        sReceiveBuffer[iEnd] = '\0';

  3  1


ベストアンサー

コードは、HELOメッセージを送信する前にsmtpサーバーからの「220」行を待つ必要があります。 RFC 2821のセクション3.1を参照してください。 それはおそらくPythonライブラリが行うことです。

libsmtpのように、これに役立つ無料のライブラリがいくつか用意されているはずです。 独自のソリューションにパッチを適用するのではなく、これらのいずれかを学習することに時間を費やすことを検討してください(プロジェクトが独自のメールソリューションを作成する場合を除く)。

5


タイトルとURLをコピーしました