Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 12:10   #1
stalker_1894
Новичок
Джуниор
 
Регистрация: 03.03.2010
Сообщений: 1
По умолчанию [Delphi] Парсинг ссылки из письма с email'а

Здравствуйте ув. форумчане,
у меня такое задание зайти на почту, найти письмо по заголовку, открыть его и спарсить текст. Проблема в том, что программа иногда не подключается к ящику, и не находит правильного заголовка...
Еще, изначально компонент IdPOP3 прогоняет письма от самого старого до последнего присланного, а спец. функция не определяет письма с меткой "Непрочитанное".

Я старался сделать, как можно проще, но видимо где-то получился нелогичный алгоритм, что и стало причиной неполадок.

Посмотрите свежим взглядом код, наверняка, что-то где-то не так. Последний раз писал это ночью, мб что-то забыл.

Спасибо.

Вот исходник:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3;

type
  TForm1 = class(TForm)
    IdMessage: TIdMessage;
    Memo1: TMemo;
    POP3: TidPOP3;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  numm:integer;

implementation

{$R *.dfm}

function getmail(word:string; host:string; port:integer; login:string; pass:string): TStrings;
var
i,numofmsgs:integer;
checkword:string;
begin
Form1.IdMessage.Clear;
checkword:=word;
Form1.POP3.Host:=host; // адрес почтового сервера
Form1.POP3.Port:=port; // порт по которому будет осуществляться подключение
Form1.POP3.Username:=login; // Логин пользователя
Form1.POP3.Password:=pass; // пароль пользователя
Form1.IdMessage.Clear; // очистка буфера для сообщения
Form1.POP3.Connect; // подключение по протоколу POP3, по настройкам в компоненте IdPOP3, с именем POP3
//result.Clear; // очистка компонента memo для отображения текста письма.
numofmsgs:=Form1.POP3.CheckMessages;
if numofmsgs = 0 then
   begin
  //  ShowMessage('Писем нет');
    Form1.POP3.Disconnect;
  result.Strings[1]:='no';
   end else
   begin
  for i:=0 to numofmsgs do
  begin
   Form1.POP3.Retrieve(numofmsgs-i,Form1.IdMessage);
   //CHKWORD
    if Pos(checkword,Form1.IdMessage.Body.Text) > 0 then
     begin
      result:=Form1.IdMessage.Body;
     end;
    Form1.POP3.Disconnect; // разрыв связи
   end;
    end;
end;

function getlink(memo:TStrings; len:integer):string;
var
current:string;
num, i:integer;
begin
for i := 1 to memo.Count-1 do
 begin
   num:=Pos('http://',memo.Strings[i]);
   if num > 0 then
   begin
    current:=Copy(memo.Strings[i],num,150);
    Delete(current,LastDelimiter(' ',current),Length(current)-LastDelimiter(' ',current));
    if Length(current) = len
    then begin
    result:=current;
    break;
    end;
   end else result:='ERROR'; // Error - nothing found
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
qwe:TStrings;
begin

qwe:=getmail('http://','pop.mail.ru',110,'login','pass');
if qwe.Strings[1] = 'no' then ShowMessage('No')
else
Edit1.Text := getlink(qwe,98);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(IntToStr(Pos('http://',Memo1.Text)));
end;

end.
7. Специально для студентов и учащихся!
Как бы вы ни назвали свою тему, как бы вы ни ухищрялись, если в тексте будет ваша учебная задачка, которую вам ну позарез нужно решить - такие темы или вопросы будут моментально удаляться, а нарушитель - получать нарушение №1 - "Флуд" и штраф 2 очка.
Халявщики будут моментально переправлены в раздел "Фриланс".
Ну, а в лучшем случае - будут перемещены в раздел "Помощь студентам", который для вас и создан.
Так что не стоит испытывать терпение модеров, а лучше сразу писать подобные темы в тот раздел

Последний раз редактировалось mihali4; 08.11.2010 в 15:53.
stalker_1894 вне форума Ответить с цитированием
Старый 08.11.2010, 15:49   #2
Antimol
Пользователь
 
Регистрация: 07.04.2007
Сообщений: 11
По умолчанию

Посмотрите в отладчике, может кодировка письма нестандартная, потому и не парсит.
Лучшее спасибо это "+" к репутации
Информатизация: Delphi,SQL, Разбор ошибок и проектов....
Antimol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг ссылки. HmTH Общие вопросы Delphi 16 19.10.2010 20:40
Отправка письма с вложением Delphi Aero1 Помощь студентам 2 11.06.2010 22:26
XML (парсинг MSXML2_TLB.pas) и Delphi 2009 S_Yevgeniy Помощь студентам 0 17.09.2009 18:22
XML (парсинг NativeXml ) и Delphi 2009 S_Yevgeniy Помощь студентам 13 17.09.2009 15:56