簡単なテキストメールを自分のメールアカウントに送信しようとしていますが、何らかの理由でコードが機能していません。これは私がこれまでに持っていたものです...
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要求アクションが中止されました:処理中のローカルエラー