• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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. Его участь - только мигать светодиодом.
У кого нет других задач, как мигать светодиодом, тот любым супер компьютерам уготовил такую участь.
 
Сверху Снизу