Проверка почты на наличие новых сообщений
Модератор: Модераторы
Проверка почты на наличие новых сообщений
Здравствуйте! Подскажите, как реализовать проверку почты на наличие новых сообщений? Отправка удаётся с помощью пакета LNET (пакет SMTP). А вот как проверить почту?
Lazarus
Ubuntu 12.04
Lazarus
Ubuntu 12.04
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
flowdoc, почтовый сервер с какими протоколами умеет работать?
pop3 на 110 (без шифрования) и 995 и (с шифрованием)
Добавлено спустя 23 минуты 22 секунды:
скачал пакет Synapse. пытаюсь использовать так:
Этот код не работает, почему?
Добавлено спустя 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
Этот код не работает, почему?
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Что значит "не работает"? Какие ошибки? libeay32.dll и ssleay32.dll лежат рядом с .exe ?
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
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* писал(а):Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.
что то не могу найти такую настройку в mail.ru
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
flowdoc писал(а):*Rik* писал(а):Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.
что то не могу найти такую настройку в mail.ru
Походу такая настройка только в яндекс почте...
*Rik* писал(а):Чтобы работал SSL, надо к своему проекту подключить модуль ssl_openssl(из synapse) в раздел uses любого модуля.
В папке с вашей программой или системном каталоге должны быть:
для Linux - libssl.so, libcrypto.so (под Linux имена библиотек обычно отличаются, там ещё версия дописана, поэтому надо создавать симлинки, если либа обновится и будет под новым именем, надо процесс создания симлинков повторить)
Эта строка лишняя, у меня яндекс и майл.ру без неё работают
Pop.Sock.SSL.SSLType := Pop.Sock.SSL.SSLType.LT_SSLv3;
Да, в настройках почтовых ящиков на яндексе и майл.ру надо включать обцию "Разрешить использование внешних программ", чтобы вы не только браузером туда ломиться могли, иначе не пустит.
всё сделал, всё равно не работает
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Специально, для проверки, завел себе аккаунт на mail.ru
всё работает, никаких дополнительных настроек не потребовалось.
для подробностей роботы с почтой рекомендую статью
http://www.webdelphi.ru/2010/10/synapse ... tka-pisem/
Добавлено спустя 18 минут 47 секунд:
похоже вы забыли выполнить:
pop3.Sock.SSLDoConnect();
Код: Выделить всё
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();
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
У меня вот этот код работает через синапс (но тут не паскаль)
Добавьте событие OnStatus, хоть видно будет, чего он не коннектится...
Я предполагаю, у него поди Windows64 и криптолибы по какой-то причине не грузятся...
Код: Выделить всё
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 и криптолибы по какой-то причине не грузятся...
всем спасибо, всё получилось!
