• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Авторизация на почтовом сервере (POP3).

ruswest1

New member
Приветствую всех. Столкнулся с проблемой - решил написать скетч для проверки количества писем в почтовом ящике. За основу взял код из статьи на гиктаймсе. Во время работы, ESP конектится с POP сервером на 995 порту, проходит проверку сертификата, проходит проверку логина и застревает на пароле (не возвращает ОК). Логин и пароль отправлял в закодированном dbase64 виде. Если кто знает, либо сталкивался с этой проблемой подскажите пожалуйста. Пробовал и gmail(включен pop) и mail.ru не получается ничего.
Код:
/*
*/

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "********";
const char* password = "********";

//const char* host = "pop.gmail.com";//google host
const char* host = "pop3.mail.ru";//mail.ru host

//const char* mailuser = "********";//google user
const char* mailuser = "********";//mail.ru user

//const char* mailpass = "********";//google
const char* mailpass = "********";//mail.ru


const int httpsPort = 995;
const char* fingerprint = "5B 26 79 14 A9 F7 A0 D4 FB 83 B5 98 67 0D EA 90 39 63 AD 73"; // Отпечаток SHA1 Сертификата pop3.mail.ru:995
//const char* fingerprint = "3A E5 78 41 AD 05 D0 9D 8B A0 60 A6 13 B4 B3 0D 3F 24 63 68"; // Отпечаток SHA1 Сертификата pop.gmail.com:995
String line;
void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
//--------------------------TLS--------------------------------------------------
  // Use WiFiClientSecure class to create TLS connection
  WiFiClientSecure client;
  Serial.print("connecting to ");
  Serial.println(host);
  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
    return;
  }
//--------------------------FINGEPRINT-----------------------------------------------------
  if (client.verify(fingerprint, host)) {
    Serial.println("certificate matches");
  } else {
    Serial.println("certificate doesn't match");
  }
//-----------------------------------------------------------------------------------

line = client.readStringUntil('\n');
Serial.println("Otvet 1:");
Serial.println(line);
//--------------------------USER-----------------------------------------------------
client.print(String("USER ")+mailuser+"\r\n");
line = client.readStringUntil('\n');
Serial.println("Answer After USER:");
Serial.println(line);
//--------------------------PASS-----------------------------------------------------
client.print(String("PASS ")+mailpass+"\r\n");
line = client.readStringUntil('\n');
Serial.println("Answer After PASS:");
Serial.println(line);

if (line==String("+OK Welcome!\r"))
{
client.print(String("STAT\r\n"));
line = client.readStringUntil('\n');
Serial.println("Answer After command STAT:");
Serial.println(line);

client.print(String("QUIT\r\n"));
line = client.readStringUntil('\n');
Serial.println("Answer After command QUIT:");
}
else { Serial.println("MAIL#ERA"); }

client.flush();
client.stop();
}

void loop() {
}
 

Сергей_Ф

Moderator
Команда форума
@ruswest1 gmail работать не будет, там свой протокол. Mail.ru у меня работал и на отправку и на прием. Остальные отходят от ssh-1 и там тоже такой подход не работает, к сожалению. Здесь есть мой черновой вариант библиотеки, посмотрите. Но там только передача была реализована.
 
Последнее редактирование:

ruswest1

New member
Сергей_Ф, я попробовал библиотеку, 3 раза пытался отправить, удалось со второй попытки. Сервер с IP <217.69.139.160:465> в логах пишет что отправил, а сам не отправляет. Во второй раз отфутболивает. Сервер с IP <94.100.180.160:465> сразу отправил письмо.
Не осталось ли у тебя кодов на получение писем, хотелось бы попробовать. Мои на прием не работают, сервера выдают такие логи:
MAIL.RU-----------------------------------------------------------------------------------
connecting to pop3.mail.ru
certificate matches
Otvet 1:
+OK

Answer After USER:
+OK

Answer After PASS:

MAIL#ERA

GOOGLE--------------------------------------------------------------------------------------
connecting to pop.gmail.com
certificate matches
Otvet 1:
+OK Gpop ready for requests from 109.238.**.** t128mb146807592lfe

Answer After USER:
+OK send PASS

Answer After PASS:
-ERR [SYS/TEMP] Temporary system problem. Please try again later. t128mb14680
--------------------------------------------------------------------------------------------
Через OpenSSL все прекрасно работает.
 

Сергей_Ф

Moderator
Команда форума
@ruswest1 у меня кода получения нет. Я его не делал и не отлаживал. Пробовал через OpenSSH - все работало. На gmail не работало не только у меня, там нестандартная авторизация.
 

pvvx

Активный участник сообщества
Отказ от SHA1. Переход на SHA256 в SSL сертификатах
ESP8266 не имеет ресурсов для поддержки новых SSL соединений и никто писать ужатую до предела версию не будет, т.к. есть другие чипы по той-же (и уже ниже в опте) стоимости, но с полной поддержкой SSL/TSL.
Смысл тут в том, что то, что вы сегодня напишите и отладите – уже завтра утром может не работать. И так будет продолжаться с поддержкой старых систем ещё пару лет – будут вводить изменения каждый день и вам придется править всё это время в ручном режиме каждый день, пока не надоест и полностью не исчезнут устаревшие системы. :)
Закрылся данный кластер IoT для ESP8266. Его участь - только мигать светодиодом.
 
Последнее редактирование:

view24

Member
Отказ от SHA1. Переход на SHA256 в SSL сертификатах
ESP8266 не имеет ресурсов для поддержки новых SSL соединений и никто писать ужатую до предела версию не будет, т.к. есть другие чипы по той-же (и уже ниже в опте) стоимости, но с полной поддержкой SSL/TSL.
Смысл тут в том, что то, что вы сегодня напишите и отладите – уже завтра утром может не работать. И так будет продолжаться с поддержкой старых систем ещё пару лет – будут вводить изменения каждый день и вам придется править всё это время в ручном режиме каждый день, пока не надоест и полностью не исчезнут устаревшие системы. :)
Закрылся данный кластер IoT для ESP8266. Его участь - только мигать светодиодом.
У кого нет других задач, как мигать светодиодом, тот любым супер компьютерам уготовил такую участь.
 
Сверху Снизу