Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение почты через SSL протокол, Delphi 2006 + Indy10 
V
    Опции темы
killerbean
Дата 28.11.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



Необходимо получить письмо с ящика gmail. На форуме порылся и получил следующий код:
Код

procedure ReseiveMail(Host: string; Port: integer; User, Password: string);
var
  pop: TIdPOP3;
  m:   TIdMessage;
  mc,i: integer;
  SSLIO : TIdSSLIOHandlerSocketOpenSSL;
begin
  FileName := 'c:\!!!\123\mes.txt';
  pop := TIdPOP3.Create(nil);
  pop.Host:=Host; pop.Port:=Port;
  pop.Username:=User; pop.Password:=Password;
  try
    pop.Connect;
    mc:=pop.CheckMessages;
    while mc > 0 do
    begin
      m:=TIdMessage.Create(pop);
      pop.Retrieve(mc,m);
      for i:=0 to m.MessageParts.Count-1 do
        with m.MessageParts do
          if items[i].ClassType=TIdAttachment then
            with TIdAttachment(items[i]) do
              try
                if FileExists(FileName) then DeleteFile(FileName);
                SaveToFile(FileName);
              except
                ShowMessage('Не удается сохранить файл');
              end;
      m.Free; dec(mc);
    end;
    ShowMessage('Все в порядке');
  except
    general.e.Text :=SysErrorMessage(GetLastError);
  end;
  SSLIO.Free;
  pop.Free;
end;


вроде все понял правельно, но коннект все равно не происходит. В чем моя ошибка? Может я неправельные данные передаю, или еще где-то ошибочка?  Помогите

Это сообщение отредактировал(а) killerbean - 29.11.2006, 13:59
PM MAIL   Вверх
Snowy
Дата 28.11.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(killerbean @  28.11.2006,  15:02 Найти цитируемый пост)
но коннект все равно не происходит
А что говорит?
PM MAIL   Вверх
killerbean
Дата 28.11.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



на pop.Connect возвращает ошибку
Код

Запрос на отправку или получение данных  (when sending on a datagram socket using a sendto call) no address was supplied

PM MAIL   Вверх
killerbean
Дата 29.11.2006, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



Попробовал соединиться с mail.ru. Код тотже, только убрал SSL поддержку.

в функцию передаю следующие параметры:
Код

ReseiveMail('pop.mail.ru', 110, 'my_login', 'my_password');


в результате получаю "Host not found", может я чего-то не то передаю?


PM MAIL   Вверх
Snowy
Дата 29.11.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Открой телнет. Набери:
o pop.mail.ru 110
Подключается?
PM MAIL   Вверх
killerbean
Дата 29.11.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



нет, а что делать?  smile 
PM MAIL   Вверх
Snowy
Дата 29.11.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Значит ты не можешь напрямую подключиться со своего компьютера.
Вероятно ты за прокси и порты закрыты smile
PM MAIL   Вверх
killerbean
Дата 29.11.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



Спасибо Snowy. Проблема была с 110-м портом, но всеравно в данном коде не принимаеться аттач. Точнее никогда не выполняеться условие "m.MessageParts.items[i].ClassType=TIdAttachment", хотя письмо точно с аттачем (я проверял). В чем может быть проблема?
PM MAIL   Вверх
Matematik
Дата 29.11.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



ИМХО

Код

if m.MessageParts.items[0] is TIdAttachment then


Это сообщение отредактировал(а) Matematik - 29.11.2006, 16:10
PM MAIL WWW ICQ   Вверх
Snowy
Дата 29.11.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Почитай этот топ: http://forum.vingrad.ru/index.php?showtopi...72&view=all
Возможно у тебя та же проблема.
Там последним постом я дал код с обходом ошибки Indy.
PM MAIL   Вверх
killerbean
Дата 30.11.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



TO: Matematik если заменить на is, то даже не компилируеться с ошибкой 
Код

[Pascal Error] m_main.pas(158): E2015 Operator not applicable to this operand type


Snowy. Не получаеться. Письмо приходит, а условие "if (items[i].ClassType = TIdAttachment) then" не выполняеться. (Код взял с последнего поста)
PM MAIL   Вверх
Matematik
Дата 30.11.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Цитата(killerbean @ 30.11.2006,  11:11)
TO: Matematik если заменить на is, то даже не компилируеться с ошибкой 
Код

[Pascal Error] m_main.pas(158): E2015 Operator not applicable to this operand type

В indy 9 is работает 100%
Код

if IdMessage.MessageParts.Items[i] is TIdAttachment then


PM MAIL WWW ICQ   Вверх
Snowy
Дата 30.11.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



killerbean, отправь себе другое письмо для проверки.
Код полностью рабочий. Проверен.
Вероятно что-то не так в самом письме.
Что - не знаю. Его у меня нет smile
PM MAIL   Вверх
killerbean
Дата 30.11.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 18.5.2006

Репутация: нет
Всего: нет



Тогда я вышлю Вам тестовое письмо. Создаю его так:

Код

procedure Tgeneral.SendEmail(Email: string; AttachmentName: string);
begin
  smtp.Host := 'xxx';
  smtp.Port := 25;
  smtp.Password := 'xxx';
  smtp.Username := 'jj';
  smtp.HeloName := 'Info';
  mes.From.Text := '[email protected]';
  mes.Sender.Text := '[email protected]';
  mes.Recipients.EMailAddresses := Email;
  mes.Subject := 'testsubj';
  mes.Body.Text := 'testbody';
  //attachment creation
  mes.MessageParts.Clear;
  TIdAttachmentFile.Create(mes.MessageParts, AttachmentName);
  try
    smtp.Connect;
    smtp.Send(mes);
  except
    mess.MessageDlg2('Не могу отправить письмо для ' + ResipientEmail, 'Ошибка', mtwarning, [mbOk], 0);
    smtp.Disconnect;
  end;
  smtp.Disconnect;
end;

вызываю так:
Код

SendEmail(ResipientEmail, 'c:\!!!\test.zip');


PM MAIL   Вверх
Snowy
Дата 30.11.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Получил письмо.
Нарисовал код для проверки:
Код
var m: TIdMessage;
begin
  m := TIdMessage.Create(nil);
  try m.LoadFromFile('testsubj.mbs'); except end;
  ProcessMessage(m);
  m.Free;
end;
Проглотил твоё письмо без проблем, создал 2 файла - текст и test.zip
ProcessMessage брал из топа по той самой ссылке.
Единственное, что я не сам забирал, а мой почтовик. Я только в файл сохранил.
Но не думаю, что это имеет какое-либо значение. Цель была - разбор мессаги.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0909 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.