2013-01-01 361 views
0

连接复位可以说我有一个功能,像下面发送和从完美套接字接收到的信息..发送电子邮件:通过对

的结果是:

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: [email protected]"); 
    writeln(RecvSocket(Socket)); 

    SendSocketEx(Socket, "VRFY [email protected]"); 
    writeln(RecvSocket(Socket)); 

    SendSocketEx(Socket, "RCPT TO: [email protected]"); 
    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"); 
} 
+1

“我有一个函数像下面发送和接收信息从一个插座完美无瑕..“ - 呃,如果它抛出一个异常,它怎么会是无瑕的? –

+0

因为它发送和接收数据就好了。我只是无法弄清楚如何登录..它会抛出一个异常,因为无法发送。我认为这是认证是原因?它发送了第一对夫妇的命令,并收到了答复:l – Brandon

回答

3

的问题是,此服务器要求的通信通过TLS协议发生。 STARTTLS命令告诉服务器所有进一步的通信将通过安全套接字层(SSL/TLS)进行。建立此连接后,双方之间的所有进一步通信都将被加密。最简单的方法是使用library that implements 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. 
.