Конференция "Сети" » Проблемы с почтовым клиентом (TIdSMTP, TIdPOP3) [D7]
 
  • erslgoeirjh (12.07.13 13:56) [0]
    В моей программе реализован почтовый клиент, использующий классы TIdSMTP и TIdPOP3. Среда разработки--Delphi 7.

    Вот код:

    отправка сообщений:

       mMessege.Clear;
       mSMTP.AuthenticationType := atLogin;
       mSMTP.Username := 'user';
       mSMTP.Password := 'password';
       mSMTP.Host := '192.1.2.3';
       mSMTP.Port := 25;
       mMessege.CharSet := 'windows-1251';
       mMessege.ContentType := 'text/plain';
       mMessege.Subject := 'My Text';
       mMessege.Body.Add('My Text');
       mMessege.From.Address := 'myaddress@myserver.ru';
       mMessege.Recipients.EMailAddresses := 'myaddress@myserver.ru';
       myfilename := 'mytextfile.txt';
       fe := FileExists(myfilename);
       if (fe=true) then begin
       TIdAttachment.Create(mMessege.MessageParts, myfilename);
       end;
       //mMessege.IsEncoded := true;
       try
       mSMTP.Connect;
       mSMTP.Send(mMessege);
       except
       ShowMessage('Ошибка соединения с сервером!');
       end;
       mSMTP.Disconnect;
       mMessege.Clear;
       Exit;

    приём сообщений:

       iMess := mPop.CheckMessages;

       If iMess = 0 then begin
       WriteToLog('на сервере отсутствуют сообщения!');
       RxTrayIcon1.Hint := 'на сервере отсутствуют сообщения!';
       iTimer :=IniTool.ReadInteger('Time', 'Timer', 15)*60;
       Timer1.Enabled := True;
       RxTimerPOP.Enabled := True;
       Exit;
       end;{end If iMess = 0}

       WriteToLog('На сервере ' + IntToStr(iMess) + 'новых сообщений!');

       For ii := 1 to iMess do begin
       mMessege.Clear;

       strFileName.Clear;
       strFormatNam.Clear;
       strTableName.Clear;
       strDataWrite.Clear;
       strAutorName.Clear;

       sForShablon:='';
       mPOP.RetrieveHeader(ii, mMessege);
       ctenc := mMessege.ContentTransferEncoding;
       if (ctenc='') then begin
       // если есть кодировка в сообщении
       mMessege.Clear;
       mMessege.NoDecode := true;
       mPOP.Retrieve(ii, mMessege);
       end
       else begin
       // если нет кодировки в сообщении
       mMessege.Clear;
       mPOP.Retrieve(ii, mMessege);
       end;

       FMimeMsg := TMimeMess.Create;
       FMimeMsg.Clear;
       FMimeMsg.Lines.SetText(mMessege.Body.GetText);
       FMimeMsg.DecodeMessage;
       FMimePart := FMimeMsg.MessagePart;
       for i := 0 to FMimePart.GetSubPartCount — 1 do begin
       FMimePart2 := FMimePart.GetSubPart(i);
       if FMimePart2.FileName <> '' then begin
       FMimePart2.DecodePart;
       FMimePart2.DecodedLines.SaveToFile(MainPath +'\Buffer\' + FMimePart2.FileName) ;
       end;
       end;
       FMimeMsg.Clear;
       for i:=0 to (mMessege.MessageParts.Count-1) do begin
       if (mMessege.MessageParts.Items[i].ClassType=TIdAttachment) then begin
       filename := MainPath + '\Buffer\'+ (mMessege.MessageParts.Items[i] as TIdAttachment).FileName;
       CopyFile(PChar(mMessege.MessageParts.Items[i].StoredPathName),PChar(filename),tr ue);
       end;
       end;

    Сообщение нормально отправляется на сервер.
    Но при приёме сообщения с сервера почему-то не считывается аттач (вложение) -- файл mytextfile.txt . То есть почему-то не проходит ни часть кода FMimeMsg--там FMimePart.GetSubPartCount равно нулю, ни часть кода с mMessege.MessageParts -- там также mMessege.MessegeParts.Count также равно нулю.
    В чём причина этого? Что надо сделать так, чтобы аттач вытаскивался (в первую очередь меня интересует вариант с mMessege.MessegeParts, но также интересует и вариант с FMimeMsg.MessagePart )?
  • Vasa777 (18.07.13 00:40) [1]
    пробегая мимо.
    не вчитываясь в вопрос, сразу предупреждаю вас, что вы скорее всего не один день будете объясняцца с провайдерами для начала работы раз. а второй раз недели через две, когда они входящий 25 закроют, т.к. пойдет на него спам морем. сроки могут разные быть, но будьте готовы.

    почитав поверхностно текст, думаю, что:
    1. d7 уже для нонешних ОС устарел
    2. если обмен инфой затеян через почту, то лучший выход vpn

    но это так. просто мимо пробегавшего мнение.
    а некоторые тут бы добавили, что вы зря тратите время :) или путь выбрали не тот.
  • brother © (23.07.13 20:57) [2]
    причем тут провайдер и порт?
 
Конференция "Сети" » Проблемы с почтовым клиентом (TIdSMTP, TIdPOP3) [D7]
Есть новые Нет новых   [134427   +34][b:0][p:0]