Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Не могу подключиться к smtp.google используя SSL


Автор: bomberman 10.6.2008, 17:33

Приветствую!

Имеется код одного исходника почтового клиента Althea (althea.sourceforge.com) для подключения к серверу, который поддерживает SSL.
Но почему-то SSL-часть не хочет соединяться (может не правильно указываю доменное имя или через smtp это все делать?).
Made in... Visual C++ 6.0 (Заранее спасибо за ответ!):

#include "StdAfx.h"

#include <winsock2.h>
#include <iostream.h>

#include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <conio.h>

#include <strings.h>

int main()
{
  
WSAData WSAData1;
  int rc = WSAStartup(MAKEWORD(1,1), &WSAData1);
  if (rc)
  {
      MessageBox(NULL, "Ioeaea auciaa WSAStartup", "Error", MB_OK);
      return (FALSE);
  }

  struct sockaddr_in        remoteAddress;
  const char *hostName = "google.com";  
  const int  port      = 25; 
  bzero( (char *)(&remoteAddress), sizeof(remoteAddress) );
  remoteAddress.sin_family = AF_INET;
  remoteAddress.sin_port = htons( (u_short)port );

  struct hostent *hostInfo = gethostbyname( hostName );
  
  if( hostInfo )
    bcopy( hostInfo->h_addr, (char *)(&remoteAddress.sin_addr), hostInfo->h_length );
  
  else
    {
      remoteAddress.sin_addr.s_addr = inet_addr( hostName );
      if( remoteAddress.sin_addr.s_addr == INADDR_NONE )
    return( NULL );
    }
  
  int sock = socket( PF_INET, SOCK_STREAM, 0 );
  if( sock < 0 )
    return( NULL );
  
  if( connect( sock, (struct sockaddr *)&remoteAddress, sizeof(remoteAddress) ) < 0 )
    return( NULL );

    SSLeay_add_ssl_algorithms();
    SSL_load_error_strings();
    SSL_library_init();
    char qrandomstring[15];
    srand(time(0));
    sprintf(qrandomstring,"%d",rand());
    RAND_seed(qrandomstring, strlen(qrandomstring));
    SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method());    
    SSL *ssl=SSL_new(ctx);
    SSL_set_fd(ssl, sock);
    if (SSL_connect(ssl)<=0) {
      cout << "SSL connection failed" << endl;
      return NULL;
    }

  WSACleanup();
  closesocket (sock);
  SSL_free (ssl);
  SSL_CTX_free (ctx);
  return 0;

 

Автор: jonie 10.6.2008, 22:23
а smtp у гугла не такой потому что.
TCP25 порт на google.com не открыт.

использйте smtp.gmail.com

Автор: v2v 10.6.2008, 22:37
разве порт 25 у smtp с SSL ?

Автор: Cyril 10.6.2008, 23:15
А где/как можно узнать другие реально работающие доменные-smtp-имена + порт серверы почты, поддерживающие ssl? Или как в gmail узнать порт для smtp?

Автор: nirburg 11.6.2008, 06:24
Cyril, для gmail - в настройках почтового ящика. 
smtp.gmail.com - 587
pop.gmail.com - 995

Автор: bomberman 11.6.2008, 10:57
Все отлично. Данный код подключается к почтовым ssl-серверам! Зашел в настройки gmail и yahoo.

Для gmail настройки следующие:

smtp:
"smtp.gmail.com"
465 

pop:
"pop.gmail.com"
995


Для yahoo настройки следующие:

smtp:
"smtp.mail.yahoo.com"
465 

pop:
"pop.mail.yahoo.com"
995



Автор: yosi 3.5.2010, 17:01
а у меня не проходит authentication клиента . после connect'a  в проге:

// wait logon from SMTP Server
  read_socket(); 
  // said hello to server
  send_socket(HELO);    //earlier  in program : #define HELO "EHLO google.mail.com\r\n"
  // read reply
  read_socket();

 send_socket("VRFY "); 
  send_socket(from_email);
  send_socket("\r\n");
  read_socket(); 
 // authentication
 send_socket("AUTH LOGIN\r\n"); 
 // read answer
 read_socket();
 // send login
 send_socket(login);    //login - base64 encoded string :   [email protected]
 send_socket("\r\n");
 // read answer
 read_socket();
  // send password
 send_socket(password);   //password - base64 encoded string  : mypassword 
 send_socket("\r\n");
 read_socket(); 
// end of authentication


последнее дает 535 error.
Help,please.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)