1

ソケットから情報を完璧に送受信する以下のような関数があるとしましょう..

結果は次のとおりです。

Connected to: 65.55.96.11 Port: 25
220 BLU0-SMTP374.blu0.hotmail.com Microsoft ESMTP MAIL Service, Version: 6.0.3790.4675 ready at  Mon, 31 Dec 2012 19:52:22 -0800 

250 BLU0-SMTP374.blu0.hotmail.com Hello [50.100.44.155]

220 2.0.0 SMTP server ready

Exception: Socket Error 10054: Connection reset by peer

例外が発生するのはなぜですか? 「DATA」文字列を送信すると、例外がスローされます。

ログイン方法を教えてください。オンラインでどこにいてもわからないようです。私はそれを検索し、AUTHコマンドしか表示しませんが、使用法や例はまったくありません。

コードは以下のとおりです。

void SendEmail(std::string Username, std::string Password, std::string IP, std::string Port)
{
  Socket = CreateSocket;
  ConnectSocket(Socket, IP, Port);
  SetTimeout(Socket, 10000);
  SocketInfo(Socket, IP, Port);

  writeln("Connected to: " + IP + " Port: " + Port);
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "HELO");    //SendSocketEx automatically adds \r\n to the end of a line..
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "STARTTLS");
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "MAIL FROM: mehwtfbleh@hotmail.com");
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "VRFY mehwtfbleh@hotmail.com");
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "RCPT TO: mehwtfbleh@hotmail.com");
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "DATA");
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "This Is The Body..");
  writeln(RecvSocket(Socket));

  SendSocketEx(Socket, "QUIT");
  writeln(RecvSocket(Socket));

  CloseSocket(Socket);
  FreeSocket(Socket);
}

int main()
{
    SendEmail("", "", "smtp.live.com", "25", "localhost");
}
4

1 に答える 1

6

問題は、このサーバーが TLS プロトコルを介して通信を行う必要があることです。STARTTLSコマンドは、以降のすべての通信が Secure Sockets Layer (SSL/TLS) 経由で行われることをサーバーに伝えます。この接続が確立されると、2 つの側の間の以降の通信はすべて暗号化されます。

これを実現する最も簡単な方法は、SSL/TLS を実装するライブラリを使用することです。最も有名なライブラリは OpenSSL です。

端末/コンソールから OpenSSL を使用して簡単なテストを実行できます。

openssl s_client -connect smtp.live.com:25 -starttls smtp -crlf

次に、コマンドを送信できます。

EHLO hotmail.com
AUTH LOGIN (this depends on the methods supported by the server)
...
MAIL FROM: <your email>
RCPT TO: <recipient email>
DATA
All your SMTP are belong to us.
.
于 2013-01-01T04:40:16.750 に答える