Como posso enviar e-mails via Gmail SMTP via OpenSSL (no Windows)?

0

Eu sei que o servidor SMTP requer TLS, então estou usando o OpenSSL (no Windows).

openssl s_client -connect smtp.gmail.com:465 -crlf

Agora, eu sei que tenho que codificar uma string (basicamente \x00myemail\x00password ) que tem minha conta e senha usando base64. As coisas funcionam muito bem:

AUTH PLAIN <encodedString>
235 2.7.0 Accepted

O problema é quando tento escrever minha mensagem:

MAIL FROM:<myemail>
250 2.1.0 OK qwertyzxcv.1 - gstmp
RCPT TO:<myemail>
RENEGOTIATING
depth=1 C = US, O = Google Inc, CN = Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0

A verdade é que não entendo essa mensagem de erro. Eu tenho que gerar algum certificado? Em caso afirmativo, como faço (novamente, no Windows)?

EDIT [0]: Eu finalmente resolvi o problema. Você tem que escrever o comando rcpt em letras minúsculas porque R faz o OpenSSL renegociar. Mas agora eu tenho um novo problema. Parece que o servidor SMTP não pode reconhecer o comando de DATA :

DATA
502 5.5.1 Unrecognized command qwertyzxcv.1 -gsmtp
    
por user3680 18.04.2013 / 23:33

1 resposta

3

OK, finalmente resolvi meus dois problemas:.

  1. O primeiro problema foi sobre a coisa RENEGOTIATING . A solução é escrever os comandos (ou pelo menos os que começam com R ) em letras minúsculas. O OpenSSL interpreta um R maiúsculo como um comando para renegociação do TLS .

  2. O segundo problema foi que o servidor "não reconheceu o comando DATA". Esse problema está no começo:

    openssl s_client -connect smtp.gmail.com:465 -crlf

Todos os tutoriais na internet dizem que você deve usar a opção -crlf e é verdade, para o Linux . Se você estiver usando o Windows, NÃO use essa opção. Essa opção é de acordo com a documentação :

this option translated a line feed from the terminal into CR+LF as required by some servers.

Eu pensei que mesmo que o Windows use CR + LF, o OpenSSL forçou a nova linha a ser LF apenas para ter consistência com a implementação do Unix. Eu estava errado. Na verdade, agora, eu não sei o que a opção -crlf faz no Windows . Talvez traduza CR + LF em LF? Isso seria muito estranho, dado o nome da opção.

    
por 19.04.2013 / 16:42