Проверка почты на наличие новых сообщений

Модератор: Модераторы

Проверка почты на наличие новых сообщений

Сообщение flowdoc » 18.02.2015 13:38:02

Здравствуйте! Подскажите, как реализовать проверку почты на наличие новых сообщений? Отправка удаётся с помощью пакета LNET (пакет SMTP). А вот как проверить почту?
Lazarus
Ubuntu 12.04
flowdoc
новенький
 
Сообщения: 22
Зарегистрирован: 17.12.2014 17:26:45

Re: Проверка почты на наличие новых сообщений

Сообщение Padre_Mortius » 19.02.2015 22:01:22

flowdoc, почтовый сервер с какими протоколами умеет работать?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проверка почты на наличие новых сообщений

Сообщение flowdoc » 20.02.2015 07:06:39

pop3 на 110 (без шифрования) и 995 и (с шифрованием)

Добавлено спустя 23 минуты 22 секунды:
скачал пакет Synapse. пытаюсь использовать так:

Код: Выделить всё
var POP: TPOP3Send;
begin
  POP:=TPOP3Send.Create;
  Pop.AutoTLS := False;

  POP.AuthType:=Pop3AuthLogin;
  POP.Password:='pass';
  POP.UserName:='123@mail.ru';
  POP.TargetHost:='pop.mail.ru';
  POP.TargetPort:='995';
  POP.FullSSL:=True;
  Pop.Sock.SSL.SSLType := Pop.Sock.SSL.SSLType.LT_SSLv3;

if POP.Login then
    begin
     //успешно зашли на почту
    end
  else
  begin
   //ошибка подключения
  POP.Free;
  end;                                       \0


Этот код не работает, почему?
flowdoc
новенький
 
Сообщения: 22
Зарегистрирован: 17.12.2014 17:26:45

Re: Проверка почты на наличие новых сообщений

Сообщение Снег Север » 20.02.2015 09:37:09

Что значит "не работает"? Какие ошибки? libeay32.dll и ssleay32.dll лежат рядом с .exe ?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Проверка почты на наличие новых сообщений

Сообщение *Rik* » 20.02.2015 09:42:13

flowdoc писал(а):pop3 на 110 (без шифрования) и 995 и (с шифрованием)

Добавлено спустя 23 минуты 22 секунды:
скачал пакет Synapse. пытаюсь использовать так:

Код: Выделить всё
var POP: TPOP3Send;
begin
  POP:=TPOP3Send.Create;
  Pop.AutoTLS := False;

  POP.AuthType:=Pop3AuthLogin;
  POP.Password:='pass';
  POP.UserName:='123@mail.ru';
  POP.TargetHost:='pop.mail.ru';
  POP.TargetPort:='995';
  POP.FullSSL:=True;
  Pop.Sock.SSL.SSLType := Pop.Sock.SSL.SSLType.LT_SSLv3;

if POP.Login then
    begin
     //успешно зашли на почту
    end
  else
  begin
   //ошибка подключения
  POP.Free;
  end;                                       \0


Этот код не работает, почему?


Чтобы работал SSL, надо к своему проекту подключить модуль ssl_openssl(из synapse) в раздел uses любого модуля.
В папке с вашей программой или системном каталоге должны быть:
для windows - ssleay32.dll, libssl32.dll или libeay32.dll
для Linux - libssl.so, libcrypto.so (под Linux имена библиотек обычно отличаются, там ещё версия дописана, поэтому надо создавать симлинки, если либа обновится и будет под новым именем, надо процесс создания симлинков повторить)

Эта строка лишняя, у меня яндекс и майл.ру без неё работают
Pop.Sock.SSL.SSLType := Pop.Sock.SSL.SSLType.LT_SSLv3;
Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Проверка почты на наличие новых сообщений

Сообщение flowdoc » 20.02.2015 11:12:32

*Rik* писал(а):Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.

что то не могу найти такую настройку в mail.ru
flowdoc
новенький
 
Сообщения: 22
Зарегистрирован: 17.12.2014 17:26:45

Re: Проверка почты на наличие новых сообщений

Сообщение *Rik* » 20.02.2015 12:32:50

flowdoc писал(а):
*Rik* писал(а):Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.

что то не могу найти такую настройку в mail.ru

Походу такая настройка только в яндекс почте...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Проверка почты на наличие новых сообщений

Сообщение flowdoc » 20.02.2015 13:10:37

*Rik* писал(а):Чтобы работал SSL, надо к своему проекту подключить модуль ssl_openssl(из synapse) в раздел uses любого модуля.
В папке с вашей программой или системном каталоге должны быть:
для Linux - libssl.so, libcrypto.so (под Linux имена библиотек обычно отличаются, там ещё версия дописана, поэтому надо создавать симлинки, если либа обновится и будет под новым именем, надо процесс создания симлинков повторить)
Эта строка лишняя, у меня яндекс и майл.ру без неё работают
Pop.Sock.SSL.SSLType := Pop.Sock.SSL.SSLType.LT_SSLv3;
Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.


всё сделал, всё равно не работает
flowdoc
новенький
 
Сообщения: 22
Зарегистрирован: 17.12.2014 17:26:45

Re: Проверка почты на наличие новых сообщений

Сообщение Снег Север » 20.02.2015 20:34:28

Специально, для проверки, завел себе аккаунт на mail.ru
Код: Выделить всё
uses
... 
blcksock, smtpsend, pop3send, ssl_openssl;

...
pop3 := TPOP3Send.Create();
  try
    pop3.AutoTLS := false;
    pop3.Username := LabeledEdit1.Text;
    pop3.Password := LabeledEdit2.Text;
    pop3.TargetHost := 'pop.mail.ru';
    pop3.TargetPort := '995';
    pop3.FullSSL := true;
    pop3.Sock.SSL.SSLType := LT_SSLv3;

    pop3.Sock.SSLDoConnect();
    if not pop3.Login() then
    begin
      showmessage('login error'+sLineBreak+pop3.Username+sLineBreak+pop3.Password);
      exit;
    end
       else
    begin
      if pop3.Stat then
        begin
          Label2.Caption:=IntToStr(pop3.StatCount);
          Label4.Caption:=IntToStr(pop3.StatSize);
        end;
        if pop3.Capability then
           Memo1.Lines.Assign(pop3.FullResult);
    end;

  finally

  end;


всё работает, никаких дополнительных настроек не потребовалось.

для подробностей роботы с почтой рекомендую статью
http://www.webdelphi.ru/2010/10/synapse ... tka-pisem/

Добавлено спустя 18 минут 47 секунд:
flowdoc писал(а):всё сделал, всё равно не работает

похоже вы забыли выполнить:
pop3.Sock.SSLDoConnect();
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Проверка почты на наличие новых сообщений

Сообщение *Rik* » 20.02.2015 23:58:17

У меня вот этот код работает через синапс (но тут не паскаль)

Код: Выделить всё
method TMainForm.Button1Click(Sender: TObject);
var
  PP3: TPOP3Send;
begin
  PP3 = TPOP3Send.Create;
  try
    PP3.FullSSL = True;
    PP3.AuthType = POP3AuthLogin;
    PP3.UserName = '123@mail.ru';
    PP3.Password = '123';
    PP3.TargetHost = 'pop.mail.ru';
    PP3.TargetPort = '995';
    PP3.Sock.OnStatus = @OnStatus;
    if PP3.Login then
      if PP3.Stat then
        ShowMessage('Всего сообщений' + IntToStr(PP3.StatCount));
      end;
      PP3.Logout;
    else
      ShowMessage('Не удалось соединиться с сервером');
    end;

  finally
    PP3.Free;
  end;
end;

method TMainForm.AddMsg(S: string);
var
  I: Integer;
begin
  I = ListBox1.Items.Add(S);
  ListBox1.ItemIndex = I;
end;

method TMainForm.OnStatus(Sender: TObject; Reason: THookSocketReason; const Value: String);
begin
  case Reason of
    HR_ResolvingBegin: AddMsg(Value + ': Reason = HR_ResolvingBegin');
    HR_ResolvingEnd: AddMsg(Value + ': Reason = HR_ResolvingEnd');
    HR_SocketCreate: AddMsg('сокет создан');
    HR_SocketClose: AddMsg('сокет закрыт');
    HR_Bind: AddMsg(Value + ': Reason = HR_Bind');
    HR_Connect: AddMsg(Value + ': Reason = HR_Connect');
    HR_CanRead: AddMsg(Value + ': Reason = HR_CanRead');
    HR_CanWrite: AddMsg(Value + ': Reason = HR_CanWrite');
    HR_Listen: AddMsg(Value + ': Reason = HR_Listen');
    HR_Accept: AddMsg(Value + ': Reason = HR_Accept');
    HR_ReadCount: AddMsg(Value + ': Reason = HR_ReadCount');
    HR_WriteCount: AddMsg(Value + ': Reason = HR_WriteCount');
    HR_Wait: AddMsg(Value + ': Reason = HR_Wait');
    HR_Error: AddMsg(Value + ': Reason = HR_Error');
  end;
end;        \0


Добавьте событие OnStatus, хоть видно будет, чего он не коннектится...
Я предполагаю, у него поди Windows64 и криптолибы по какой-то причине не грузятся...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Проверка почты на наличие новых сообщений

Сообщение flowdoc » 25.02.2015 07:16:04

всем спасибо, всё получилось!
flowdoc
новенький
 
Сообщения: 22
Зарегистрирован: 17.12.2014 17:26:45


Вернуться в Сети

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru