0

簡単なテキストメールを自分のメールアカウントに送信しようとしていますが、何らかの理由でコードが機能していません。これは私がこれまでに持っていたものです...

int SendStartUpMail(char* mailserver, int port, char* user, char* pass)
{
     SOCKET sslSock;
     SOCKADDR_IN sslInfo;
     SSL_CTX *ctx;
     SSL *ssl;

     char bufferRecv[BUFFER_LEN];
     char bufferSend[BUFFER_LEN];
     int byte;

     sslSock = openConnection(mailserver, port);
     memset( bufferRecv, '\0', BUFFER_LEN );
     byte = recv(sslSock,bufferRecv,BUFFER_LEN,0);
     if(byte == SOCKET_ERROR)
         return -1;
     printf("%s\n",bufferRecv);

     strcpy(bufferSend,"HELO\r\n");
     send(sslSock,bufferSend,strlen(bufferSend),0);
     memset( bufferRecv, '\0', BUFFER_LEN );
     byte = recv(sslSock,bufferRecv,BUFFER_LEN,0);
     if(byte == SOCKET_ERROR)
         return -1;
     printf("%s",bufferRecv);

     strcpy(bufferSend,"STARTTLS\r\n");
     send(sslSock,bufferSend,strlen(bufferSend),0);
     memset( bufferRecv, '\0', BUFFER_LEN );
     byte = recv(sslSock,bufferRecv,BUFFER_LEN,0);
     if(byte == SOCKET_ERROR)
          return -1;
     printf("%s",bufferRecv);

     SSL_library_init();
     ctx = SSL_CTX_new(SSLv3_client_method());
     if ( ctx == NULL )
         return -1;
     ssl = SSL_new(ctx);
     if ( ssl == NULL )
         return -1;
     SSL_set_fd(ssl, sslSock);  

     if ( SSL_connect(ssl) == 1 )
     {
         strcpy(bufferSend,"HELO\r\n");
         SSL_write(ssl,bufferSend,strlen(bufferSend));
         memset( bufferRecv, '\0', BUFFER_LEN );
         SSL_read(ssl,bufferRecv,BUFFER_LEN);
         printf(">%s\n",bufferRecv);

         strcpy(bufferSend,"AUTH LOGIN\r\n");
         SSL_write(ssl,bufferSend,strlen(bufferSend));
         memset( bufferRecv, '\0', BUFFER_LEN );
         SSL_read(ssl,bufferRecv,BUFFER_LEN);
         printf(">%s\n",bufferRecv);

         strcpy(bufferSend,"USER c29tZXVzZXJuYW1lQGdtYWlsLmNvbQ==\r\n");         
         SSL_write(ssl,bufferSend,strlen(bufferSend));
         memset( bufferRecv, '\0', BUFFER_LEN );
         SSL_read(ssl,bufferRecv,BUFFER_LEN);
         printf(">%s\n",bufferRecv);

         strcpy(bufferSend,"PASS c29tZXBhc3N3b3Jk\r\n");         
         SSL_write(ssl, bufferSend,strlen(bufferSend));
         memset( bufferRecv, '\0', BUFFER_LEN );
         SSL_read(ssl,bufferRecv,BUFFER_LEN);
         printf(">%s\n",bufferRecv);
     }
     else
     {
         printf("Error on SSL_connect\n");  
         SSL_free(ssl);
         SSL_CTX_free(ctx);
         close(sslSock); 
         return -1; 
     }
     SSL_free(ssl); 
     SSL_CTX_free(ctx);
     close(sslSock);

}

このコードを実行すると、SMTPサーバーからいくつかのメッセージが表示されます。

> 220 mx.google.com ESMTP 
> 250 mx.google.com at your service
> 220 2.0.0 Ready to Start TLS
> Conected with RC4-SHA encryption
> 250 mx.google.com at your service
> 334
> 334
> 535-5.7.1 Useername and Password not accepted

ご覧のとおり、私のパスワードとユーザー名は間違っていると言われていますが、間違いではありません。送信する前にbase64エンコーディングを使用してユーザー名とパスワードをエンコードし、このサイトを使用してエンコードしましたhttp://base64-encoder-online.waraxe.us/ ポート587を使用します。

私の質問は私がしなければならない他の何かがありますか?ありがとう。

また、アプリケーション固有のパスワードにGoogleの2段階認証プロセスを使用しようとしましたが、それでもログインできません。

代わりにhotmailに接続しようとしましたが、エラー535ではなく別のエラーが発生しました

451要求アクションが中止されました:処理中のローカルエラー

4

1 に答える 1

1

自分のアカウントでのテストはAUTH LOGIN機能しませんが、問題なくAUTH PLAIN機能します。

250 ENHANCEDSTATUSCODES
auth plain
334 
c29tZXVzZXJAZ21haWwuY29tAHNvbWV1c2VyQGdtYWlsLmNvbQBzb21lcGFzc3dvcmQ=
235 2.7.0 Accepted

これは、base64でエンコードされたバージョンのですsomeuser@gmail.com\x00someuser@gmail.com\x00somepassword

于 2012-05-26T00:53:54.937 に答える