Отправка сообщение на email
Модератор: Модераторы
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Проверил нативный socket. ЗАпустил. Пишет, что отправил, но до адресата не доходит. Попробую чуть позже разобраться лучше в чем причина
Нативный сокет и winsock примеры без ssl, они только через серверы, не требующие обязательного шифрования смогут отправлять и это не боевые примеры, а просто пруф оф концепт, без проверок ошибок.Ichthyander писал(а):Пишет, что отправил, но до адресата не доходит
Строже всего в этом плане пример через cryptlib, но он транспилированный и заточенный напильником, поэтому могут быть тоже проблемы...
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
А как подключить cryptlib модуль?delphius писал(а):Строже всего в этом плане пример через cryptlib, но он транспилированный и заточенный напильником, поэтому могут быть тоже проблемы...
Долил на гитхаб необходимое...Ichthyander писал(а):А как подключить cryptlib модуль?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Спасибо. Пока дает ошибку, сразу после ответа SMTP server 220. Видимо лучше ответ-вопросы продолжить на гит? Позже потестю еще. Спасибо за репу.delphius писал(а):Долил на гитхаб необходимое...
Код: Выделить всё
SERVER_NAME: smtp.mail.ru
SERVER_PORT: 465
Session established.
Data to send: EHLO fpmail
220 smtp56.i.mail.ru ESMTP ready (Looking for Mail for your domain? Visit https://biz.mail.ru)
Server responce code: 220
Error sending mail.Этот код тестировался только на отправке с gmail, собственно, как и писался исходный на c++.Ichthyander писал(а):сразу после ответа SMTP server 220
Но в целом, не должно быть проблем ни с каким сервером, выполняющим rfc. Я проверю на mail.ru, но из лога мне не очень понятно, почему ehlo перед приветом от mail.ru, должно быть наоборот, после установления защищённого соединения сервер высылает 220 и после этого уже клиент говорит привет Я такой-то, на что получает 250 и возможности сервера.
Но в коде есть затык со считыванием ответов из сокета, я думаю проблема где-то там кроется. Вот это вот приветствие сервера, не нужное для клиента, смывается очисткой входящего буфера сокета чтением, перед посылкой нового запроса. Видимо где-то там что-то идёт не так в адаптации для паскаля
Вот лог отправки через gmail
Код: Выделить всё
SERVER_NAME: smtp.gmail.com
SERVER_PORT: 465
Session established.
Data to send: EHLO fpmail
250-smtp.gmail.com at your service
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
Server responce code: 250
EHLO ok
Data to send: AUTH LOGINБанально была нужна временная задержка между установлением защищенного соединения и очисткой буфера от приветственного сообщения сервера, которое он просто не успевает отдать во входящий буфер сокета на стороне клиента, при этом гугл получается отдает быстрее:
Код: Выделить всё
// Activate the session
RetVal := cryptSetAttribute(hSess, CRYPT_SESSINFO_ACTIVE, 1);
if RetVal <> CRYPT_OK then
begin
sErr := 'SESSINFO_ACTIVE ERROR: ' + Err2Str(RetVal) + ' ' + ErrExStr(hSess);
FuncRet := -10;
Break;
end
else writeln('Session established.');
Sleep(100); // Вот тут нужно немного подождать! Думаю 100 мс вполне достаточно!
// Discard initial response created by connecting
RetVal := TLSPop(hSess, sErr, sReply, 0);
if RetVal < 0 then
begin
FuncRet := -12;
Break;
end;Наверное, имеет смысл переписать все в виде подключаемых модулей с одной "торчащей функцией", унифицировать их максимально, чтобы проще было комбинировать, потому что во всех нативных модулях будет одинаковая реализация протокола smtp, разниться будут только "надстройки" шифрования.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Да, теперь работает. Могу я предложить пуллреквесты? Первое для удобства сбокри демо приложения. И подключения функций через uses
Отлично!Ichthyander писал(а):Да, теперь работает.
Конечно!Ichthyander писал(а):Могу я предложить пуллреквесты?
