ESP8266: Como enviar e-mail por uma conexão criptografada (SSL/TLS).

Em um post anterior eu mostrei como se enviava e-mail e adverti para o fato de que a conexão não era segura e as credenciais podiam ser interceptadas (além do fato óbvio do e-mail poder ser lido). Eu achei que enviar por uma conexão segura fosse muito complicado, mas descobri que não é. O problema é que usa muita RAM. O email sem criptografia te deixa com 46KB livres para o resto do seu programa enquanto este aqui te deixa com “apenas” 18KB. Lembre-se de que isso ainda é 9x a RAM total de um Arduino UNO.

Sobre fingerprints e validação de certificado

Se você usa um servidor de e-mail numa conta compartilhada, como é o caso da hostgator, o certificado não vai validar se você colocar o nome do seu domínio como servidor. Você tem que obter o nome correto do servidor de e-mail que atende a sua conta. Na hostgator isso pode ser visto no cPanel.

Por exemplo, meu servidor de e-mail normal seria: meudominio.com.br ou mail.meudominio.com.br mas para validar o certificado eu preciso colocar gator1234.hostgator.com.

O exemplo abaixo é uma adaptação simples do exemplo que não usa criptografia.

Por alto, as diferenças são 4:

1)Acrescente: #include <WiFiClientSecure.h>

2)Acrescente: const char* fingerprint = “fingerprint_aqui”;

3)Mude: WiFiClient client; para WiFiClientSecure client; 

4)Acrescente a validação de certificado logo após a conexão:

 

This entry was posted in Informação and tagged , . Bookmark the permalink.

3 Responses to ESP8266: Como enviar e-mail por uma conexão criptografada (SSL/TLS).

  1. Boa noite Jefferson.
    Não sei se ainda ve este post mas mesmo assim pergunto:
    Usei seu programa de enviar email quando muda status da GPIO0 , SEM criptografia.
    Usei porta 465 e um servidor de email particular (host UAI). Ele informa que foi conectado mas da TIME OUT.
    Aumentei de 10 para 30 segundos mas ainda assim deu alarme. Alguma sugestão ?
    Obs: Tentei usar seu programa de enviar email normalmente COM criptografia e deu FALHA DE CONEXÃO.
    Agradeço qualquer resposta.
    Obrigado. Olinto

    • Jefferson says:

      Eu estou usando o exemplo desta página (com criptografia) em um projeto que comecei no mês passado e está funcionando normalmente. Mas eu só usei até hoje o gmail, que eu considero um exemplo de servidor “complicado”. Outros deveriam criar ainda menos problemas. O exemplo sem criptografia é ainda mais garantido.

      Como eu não esbarrei nesses problemas eu não sei o que pode ser.

  2. Jefferson says:

    Quando a função sendEmail() é chamada pela primeira vez provoca uma redução de cerca de 15KB na RAM livre, que não é devolvida. Eu conseguir resolver isso usando ponteiros, da seguinte forma:

    Mude
    WiFiClientSecure client;
    para
    WiFiClientSecure *client;

    delete
    WiFiClientSecure client;

    Acrescente no início de sendEmail():
    client = new WiFiClientSecure;

    Acrescente no final de sendEmail():
    delete client;

    Troque todas as ocorrências de “client.” por “client->”. Por exemplo, client.stop() vira client->stop();

    Desta forma o objeto “client” é criado no início de sendEmail() e destruído no final.

    Mas atente para o fato de que ainda assim a função precisa de 15KB livres para funcionar. Se você não tiver essa RAM livre o programa vai travar ao executar sendEmail();

Deixe uma resposta para Jefferson Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *