Доброго времени суток, господа форумчане! Возникла такая задача, необходимо отправить на почту письма с вложение,то есть даже не просто на почтовик, а через него. два одинаковых приложения крутятся между пользователями, единственная связь м\у ними через почтовик, но ограничение на аттач примерно 7мб.отправку делаю стандартными компонентами делфи NMSMTP1, IdMessage используя перекодировку wintokoi(код нашел в инете,c ней хотяб почтовик коректно получает...). при получении письма почтовым клиентом, с кодировкой все норм и с аттачем. но при попытке получить почту своей же программой через компонент IdPOP31 вылетает ошибка | Цитата | (Project Projectl.exe raised exception class EConvertError with message 'Invalid argument to date encode1. Process stopped. Use Step or Run to continue.)
|
пробовал использовать сторонний компонент SakSMTP1 отправленное им письмо приходит без проблем, НО, в этом компоненте нельзя динамически сменить имя аттача. так что пришлось от него отказаться. Хочу уточнить, что программа получает только те письма, которые ей же посланы, это определяется по теме письма, и вот тут то и вылетает ошибка... На получение почты| Код | procedure TForm1.XiButton7Click(Sender: TObject); var i:integer; from:string; begin
idPOP31.UserId:=(edit3.Text); // Логин пользователя idPOP31.Password:=(edit4.Text); // пароль пользователя IdMessage1.Clear; // очистка буфера для сообщения
try idPOP31.Connect; if IdPOP31.CheckMessages<>0 then begin Memo2.Clear;
if IdPOP31.RetrieveHeader ( 1,IdMessage1)=true then//-----------вот тут и вылетает ошибка begin
memo1.Lines.AddStrings(IdMessage1.Body); if pos('111',KoiToWin (IdMessage1.Subject))<>0 then begin from:= decod(IdMessage1.From.text); label11.Caption:=trim(copy(from,1,pos('<',from)-1)); IdPOP31.Retrieve(1,IdMessage1) ;// получение одного сообщения /////////////////////////////////////////////////////////// for i:=0 to IdMessage1.MessageParts.Count-1 do with IdMessage1.MessageParts do begin if items[i].ClassType=TIdAttachment then with TIdAttachment(items[i]) do try Form1.Memo2.Lines.Add('--> Attach: '+FileName); If not DirectoryExists((ExtractFilePath(paramstr(0))+'incomming\'+ label11.Caption)) then
CreateDir((ExtractFilePath(paramstr(0))+'incomming\'+ label11.Caption)) ;
// if FileExists(FileName) then DeleteFile(FileName); ShowMessage('incomming\'+ label11.Caption+'\'+FileName); SaveToFile ((ExtractFilePath(paramstr(0))+'incomming\'+ label11.Caption+'\')+FileName); // SaveToFile((ExtractFilePath(paramstr(0))+'incomming\'+ FileName); except ShowMessage('Не удается сохранить файл'); end; if items[i].ClassType = TIdText then with TIdText(items[i]) do begin Form1.Memo2.Lines.Add('--> Text: '); Form1.Memo2.Lines.AddStrings(Body); Form1.Memo2.Lines.text:=(Body.Text); // Form1.Memo2.Lines.Add(wintokoi(body.Text)); end; end; ////////////////////////////////////////////////////////// //decod(IdMessage1.Headers.Text); // Memo2.Lines.AddStrings(IdMessage1.MessageParts.Items.); // передача сообщения из компонента IdMessage в memo idPOP31.Delete(1); // удаление с сервера, полученного сообщения end; end else ShowMessage('no new message'); end ; finally idPOP31.Disconnect; // разрыв связи // ShowMessage('disssssssconnect'); end;
end;
|
Отправка почты| Код | procedure TForm1.XiButton1Click(Sender: TObject);
var sr: TSearchRec; i,j:integer; begin
XiPanel2.Visible:=true; i:=0; j:=0; label3.Caption:=inttostr(i+1); label5.Caption:=inttostr(j+1); label9.Caption:=label1.Caption; label10.Caption:=inttostr( memo1.Lines.Count); XiProgressBar1.Max:=strtoint(label1.Caption)*memo1.Lines.Count; XiProgressBar1.Position:=0; for j:=0 to memo1.Lines.Count-1 do begin for i:=0 to strtoint(label1.Caption)-1 do
begin with NMSMTP1 do begin
Host := '192.168.1.2'; label3.Caption:=inttostr(i+1); label5.Caption:=inttostr(j+1); Connect; PostMessage.Date:=wintokoi(FormatDateTime('dddddd',now)); PostMessage.Attachments.Add(wintokoi(sfile.Strings[i]));///////-----тут храниться список файлов для отправки PostMessage.FromAddress :=wintokoi(edit1.Text); PostMessage.ToAddress.Text := wintokoi(memo1.Lines.Strings[j]); NMSMTP1.Charset:='KOI8-R'; PostMessage.Body.Text := wintokoi(memo2.Text); PostMessage.Subject := wintokoi('111 '+ inttostr(i+1));
try SendMail; XiProgressBar1.Position:= XiProgressBar1.Position+1; NMSMTP1.Disconnect;
DeleteFile(sfile.Strings[i]);
except ShowMessage('Ошибка отправки, почтовый сервак работает?'); end; end; end; end; XiButton5.Enabled:=true; label2.Caption:='Файлы отправленны'; label2.Font.Color:=clBlue; end;
|
========= немогу понять, какое поле еще надо перекодировать??? или это надо сделать при отправке?
|