Получение почты по IMAP (Synapse.ImapSend)

Вопросы программирования и использования среды Lazarus.

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

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение alaken » 14.02.2012 09:15:21

Ism писал(а):Здесь чтото про ssl ,

Как и в предыдущем посте, решение использовать не стандартный порт 993 вместо 143 стандартного, с включенным SSL/TLS

Пробовал в коде модуля synapse.imapsend присваивать константе значение порта:
Код: Выделить всё
const
  cIMAPProtocol = '993';


Не соединяется...

Ism писал(а):Может надо установить вот это http://www.slproweb.com/products/Win32OpenSSL.html как у меня viewtopic.php?f=10&t=7406

Буду пробовать.
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение alaken » 15.02.2012 09:25:25

alaken писал(а):
Ism писал(а):Может надо установить вот это http://www.slproweb.com/products/Win32OpenSSL.html как у меня viewtopic.php?f=10&t=7406

Буду пробовать.


Не соединяется даже с установленным пакетом Win32OpenSSL...

Код: Выделить всё
IMAPSnd.ResultString

Ничего не выдает...

Подкинте идею, очень нужно.
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение Ism » 15.02.2012 17:36:01

Может файрвол или антивирус мешает
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение alaken » 16.02.2012 09:01:26

Фаервол и антивирус отключены, через POP3 соединяется и работает...
Thunderbird через IMAP работает на этой машине...
Настройки Thunderbird:
Порт: 143
Защита соединения: STARTTLS
Метод аутентификации: Обычный пароль
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение Ism » 26.05.2012 02:08:25

Надо было
imapsnd.FullSSL:=true;

Часть инфы отсюда
http://developers.do.am/publ/delphi/bib ... g/9-1-0-37

Пример извлечения аттачей и текста по imap gmail
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
   imapsnd: TImapSend;
   n,i: integer;
   sl: TStringList;
   mime:TMimemess;
   part: TMimepart;
begin
   sl := TStringList.Create;
   imapsnd := TImapSend.Create;
   mime:=TMimemess.create;
   imapsnd.Username := 'mybox@gmail.com';
   imapsnd.Password := 'pass';
   imapsnd.TargetHost := 'imap.googlemail.com';
   imapsnd.AutoTLS:=true;
   imapsnd.TargetPort:='993';
   imapsnd.FullSSL:=true;
   Memo1.Lines.Assign(imapsnd.FullResult);
   if imapsnd.Login then
   begin
     imapsnd.List('', Listbox1.Items);
     if imapsnd.SelectFolder('inbox') then
     begin
       for i:=1 to 10 do
       begin
         imapsnd.FetchMess(i,mime.Lines);
         mime.DecodeMessage;
         Memo2.Lines.Add(mime.Header.From);
         Memo2.Lines.Add(DateTimeToStr(mime.Header.Date));
         Memo2.Lines.Add('');
         for n := 0 to mime.MessagePart.GetSubPartCount-1 do
         begin
           part:=mime.MessagePart.GetSubPart(n);
           part.DecodePart;
           Memo2.Lines.Add(part.Charset);
           if (LowerCase(part.Primary)='text') and (LowerCase(part.FileName)='') then //Проверим , данный блок - текст сообщения
           begin
             if LowerCase(part.Secondary)='plain' then
             begin
               //Memo1.Lines.LoadFromStream(part.DecodedLines)
               part.DecodedLines.SaveToFile('.\attaches\'+IntToStr(i)+'_'+part.Charset+'.txt')
             end
             else
             begin
               part.DecodedLines.SaveToFile('.\attaches\'+IntToStr(i)+'_'+part.Charset+'.html')
             end;
           end;
           if part.FileName<>'' then
           begin
             part.DecodedLines.SaveToFile('.\attaches\'+IntToStr(i)+'_'+part.FileName) ;
             Memo3.Lines.Add(IntToStr(i)+' '+part.FileName);
             Application.ProcessMessages;
           end;
         end;
       end;
       imapsnd.CloseFolder;
     end;
     imapsnd.Logout;
   end
   else
       Memo1.Lines.Add('Соединение с сервером не установлено' );
   mime.Free;
   imapsnd.Free;
   sl.Free;
end;           
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Ism 26.05.2012 13:26:28, всего редактировалось 1 раз.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение Vadim » 26.05.2012 08:05:25

Ism
Хороший примерчик. Мне как раз нужно сваять консольную утилитку для выковыривания аттачей из писем.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Получение почты по IMAP (Synapse.ImapSend)

Сообщение Ism » 30.05.2012 00:17:00

Оказалось этот пример криво работает со сложными письмами, так как может быть много вложенных субчастей
Из ссылки рекурсивная функция выбирает все

Код: Выделить всё
unit Unit1;

interface

uses
... mimemess, mimepart, ActiveX;

type
TForm1 = class(TForm)
...
procedure Button1Click(Sender: TObject);
procedure GetParts(const part: TMimepart);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
IdMes:TMimeMess;
implementation

{$R *.dfm}
procedure TForm1.GetParts(const part: TMimepart);
var
  s: string;
  i: integer;
begin
if (LowerCase(part.Primary)='text') and (LowerCase(part.FileName)='') then //Проверим ÷то данный блок - текст сообщения
begin
   part.DecodePart;
   if LowerCase(part.Secondary)='plain' then // Определяем что это простой текст
   Memo1.Lines.LoadFromStream(part.DecodedLines) // Загружаем раскодированные данные
else // о, нашелся еще и альтеративный метод отображения, я предположил что у меня всегда формат html
begin
   // загрузим в браузер, не обязательно, можно и просто сохранить как страницу html
   WebBrowser1.Navigate('html.htm');
   while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
   Application.ProcessMessages;
   (WebBrowser1.Document as
   IPersistStreamInit).Load(TStreamAdapter.Create(part.DecodedLines));
end;
end;
if LowerCase(part.FileName)<>'' then begin // а вдруг это вложение
   part.DecodePart;
   part.DecodedLines.SaveToFile('c:\'+part.FileName) ;
   Memo3.Lines.Add('Сохранено в '+'c:\'+part.FileName)
end;
for i := 0 to part.GetSubPartCount - 1 do GetParts( part.getsubpart(i)); // проверяем наличие следующего блока
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
if OpenDialog1.Execute then
begin
   IdMes:=TMimeMess.Create;
   IdMes.Lines.LoadFromFile(OpenDialog1.FileName);
end;
IdMes.DecodeMessage; // Раскодируем сообщение, обязательно
LabeledEdit2.Text:=IdMes.Header.From;
LabeledEdit1.Text:=trim(IdMes.Header.ToList.Text); // Получатели сообщения
LabeledEdit3.Text:=IdMes.Header.Subject;
Memo2.Lines.Assign(IdMes.Header.CustomHeaders); // Заголовки, не спицифичные для формата MIME
GetParts(IdMes.MessagePart); // рекурсивная процедура обхода блоков сообщения

end;
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Пред.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 226

Рейтинг@Mail.ru
cron