-
В моей программе реализован почтовый клиент, использующий классы 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 )?
-
пробегая мимо. не вчитываясь в вопрос, сразу предупреждаю вас, что вы скорее всего не один день будете объясняцца с провайдерами для начала работы раз. а второй раз недели через две, когда они входящий 25 закроют, т.к. пойдет на него спам морем. сроки могут разные быть, но будьте готовы.
почитав поверхностно текст, думаю, что: 1. d7 уже для нонешних ОС устарел 2. если обмен инфой затеян через почту, то лучший выход vpn
но это так. просто мимо пробегавшего мнение. а некоторые тут бы добавили, что вы зря тратите время :) или путь выбрали не тот.
-
причем тут провайдер и порт?
|