
Творец
   
Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант
Репутация: 4 Всего: 329
|
поиск по форуму тебя спасёт Добавлено через 1 минуту и 18 секундhttp://forum.vingrad.ru/topic-44242.htmlДобавлено через 4 минуты и 12 секундВот пример: Код | procedure TfmEmail.SendMail(aRecordIndex:integer); Var q: TpFibQuery; IdEMailAddressList2, IdEMailAddressListCopy: TIdEMailAddressList; begin sCharSet := dbgmail.DataController.Values[aRecordIndex, dbgMailCHARSET.Index];
if dbgmail.DataController.Values[aRecordIndex, dbgMailLOCKED.Index] then begin
exit; end;
Log('Отправка рассылки: ' + dbgmail.DataController.Values[aRecordIndex, dbgMailname.Index]);
IdSMTP1.DisConnect; IdSMTP1.IOHandler.DefStringEncoding := enUTF8;
IdMessage1.Clear; IdMessage1.From.Name := ''; SysLocale.PriLangID := LANG_RUSSIAN; //LANG_SYSTEM_DEFAULT;// LANG_RUSSIAN;// LANG_UKRAINIAN; IdMessage1.CharSet := sCharSet; IdMessage1.ContentType := 'multipart/related; type="multipart/alternative"'; IdMessage1.ContentTransferEncoding := '8bit';
IdSMTP1.ConnectTimeout := 60*100;
IdMessage1.From.Address := dbgmail.DataController.Values[aRecordIndex, dbgMailE_MAIL.Index]; //от кого case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: IdMessage1.From.Name := AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailFROM_NAME.Index]); 0: IdMessage1.From.Name := dbgmail.DataController.Values[aRecordIndex, dbgMailFROM_NAME.Index]; 1: IdMessage1.From.Name := dbgmail.DataController.Values[aRecordIndex, dbgMailFROM_NAME.Index]; end;
//кому IdEMailAddressList2 := TIdEMailAddressList.Create(IdMessage1);
//получатели case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: IdEMailAddressList2.EMailAddresses := AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailRECIPIENT.Index]); 0: IdEMailAddressList2.EMailAddresses := dbgmail.DataController.Values[aRecordIndex, dbgMailRECIPIENT.Index]; 1: IdEMailAddressList2.EMailAddresses := dbgmail.DataController.Values[aRecordIndex, dbgMailRECIPIENT.Index]; end;
IdMessage1.Recipients.EMailAddresses := EncodeAddress(IdEMailAddressList2, 'B', sCharSet);
//копия if dbgMail.DataController.Values[aRecordIndex, dbgMailRECIPIENT_COPY.Index] <> null then begin IdEMailAddressListCopy := TIdEMailAddressList.Create(IdMessage1);
//получатели case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: IdEMailAddressListCopy.EMailAddresses := AnsiToUtf8(dbgMail.DataController.Values[aRecordIndex, dbgMailRECIPIENT_COPY.Index]); 0: IdEMailAddressListCopy.EMailAddresses := dbgMail.DataController.Values[aRecordIndex, dbgMailRECIPIENT_COPY.Index]; 1: IdEMailAddressListCopy.EMailAddresses := dbgmail.DataController.Values[aRecordIndex, dbgMailRECIPIENT_COPY.Index]; end; IdMessage1.CCList.EMailAddresses := EncodeAddress(IdEMailAddressListCopy, 'B', sCharSet); end;
//от кого case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: IdMessage1.ReplyTo.EMailAddresses := AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_FROM.Index]); 0: IdMessage1.ReplyTo.EMailAddresses := dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_FROM.Index]; 1: IdMessage1.ReplyTo.EMailAddresses := dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_FROM.Index]; end;
//тема case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: IdMessage1.Subject := AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailSUBJECT.Index]); 0: IdMessage1.Subject := dbgmail.DataController.Values[aRecordIndex, dbgMailSUBJECT.Index]; 1: IdMessage1.Subject := dbgmail.DataController.Values[aRecordIndex, dbgMailSUBJECT.Index]; end;
with TIdText.Create(IdMessage1.MessageParts, nil) do begin CharSet := sCharSet;
case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: Body.Add(AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailTITLE.Index])); 0: Body.Add(dbgmail.DataController.Values[aRecordIndex, dbgMailTITLE.Index]); 1: Body.Add(dbgmail.DataController.Values[aRecordIndex, dbgMailTITLE.Index]); end;
case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: Body.Add(AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailbody.Index])); 0: Body.Add(dbgmail.DataController.Values[aRecordIndex, dbgMailbody.Index]); 1: Body.Add(dbgmail.DataController.Values[aRecordIndex, dbgMailbody.Index]); end;
case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: Body.Add(AnsiToUtf8(dbgmail.DataController.Values[aRecordIndex, dbgMailFOOTER.Index])); 0: Body.Add(dbgmail.DataController.Values[aRecordIndex, dbgMailFOOTER.Index]); 1: Body.Add(dbgmail.DataController.Values[aRecordIndex, dbgMailFOOTER.Index]); end;
ContentType := 'text/plain'; end;
IdMessage1.IsEncoded := true;
IdSMTP1.Host := dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP.Index]; IdSMTP1.Username := dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_USER.Index]; IdSMTP1.Password := Decrypt(dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_PASSWORD.Index], k_sm);
case ansiindextext(dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_TYPE_CRYPT.Index], ['нет', 'неявное', 'явное', 'принудительное']) of 0: IdSMTP1.UseTLS := utNoTLSSupport; 1: IdSMTP1.UseTLS := utUseImplicitTLS; 2: IdSMTP1.UseTLS := utUseExplicitTLS; 3: IdSMTP1.UseTLS := utUseRequireTLS; end;
IdSMTP1.Port := dbgmail.DataController.Values[aRecordIndex, dbgMailSMTP_PORT.Index]; IdSMTP1.AuthType := satDefault;
IdSSLIOHandlerSocketOpenSSL1.Destination := IdSMTP1.Host + ':' + IntToStr(IdSMTP1.Port); IdSSLIOHandlerSocketOpenSSL1.Host := IdSMTP1.Host; IdSSLIOHandlerSocketOpenSSL1.MaxLineAction:= maException; IdSSLIOHandlerSocketOpenSSL1.Port := IdSMTP1.Port; IdSSLIOHandlerSocketOpenSSL1.DefaultPort := 0; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := []; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 0;
q := TpFibQuery.Create(nil); try q.Database := DM.fibDB; q.Transaction := trMailRead; q.SQL.Text := 'SELECT NAME FROM MAIL_ATTACHMENTS where ID_MAIL = :m_ID'; q.ParamByName('m_ID').AsInteger := dbgmail.DataController.Values[aRecordIndex, dbgMailID.Index]; q.ExecQuery; q.GoToFirstRecordOnExecute := true;
while not q.Eof do if FileExists(q.FieldByName('name').AsString) then begin with TIdAttachmentFile.Create(IdMessage1.MessageParts, q.FieldByName('name').AsString) do begin case AnsiIndexText(ExtractFileExt(AnsiUpperCase(q.FieldByName('name').AsString)), ['.XLS', '.XLSX', '.RAR', '.ZIP', '.DOC', '.DOCX', '.HTML', '.TXT']) of 0: ContentType := 'application/vnd.ms-excel'; 1: ContentType := 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; 2: ContentType := 'application/x-rar-compres'; 3: ContentType := 'application/zip'; 4: ContentType := 'application/msword'; 5: ContentType := 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; 6: begin ContentType := 'text/html'; {ContentDisposition := 'inline'} end; 7: begin ContentType := 'text/plain'; {ContentDisposition := 'inline'} end; else ContentType := 'application/octet-stream';
end;
// ContentTransfer := 'base64'; CharSet := sCharSet;
// case ansiindextext(sCharSet, ['UTF-8', 'windows-1251']) of // 0: FileName := q.FieldByName('name').AsString; // 1: FileName := AnsiToUtf8(q.FieldByName('name').AsString); // end; // FileName := AnsiToUtf8(q.FieldByName('name').AsString); FileName := q.FieldByName('name').AsString; //free; end; q.next; end;//if FileExists(q.FieldByName('name').AsString) then finally q.close; FreeAndNil(q); end;
Log('Подключение к: ' + IdSMTP1.Host + ':'+IntToStr(IdSMTP1.Port)); IdSMTP1.Connect;
dxStatusBar1.Panels[1].Text := constEMailSending2 + dbgmail.DataController.Values[aRecordIndex, dbgMailName.Index]; Application.ProcessMessages;
Log('Отправка.....'); IdSMTP1.Send(IdMessage1);
Log('Рассылка отправлена');
Log('Отключение от сервера...'); IdSMTP1.DisConnect;
tMail.Edit; tMail.FBN('LAST_DATE').AsDateTime := now; tMail.FBN('SEND_COUNT').AsInteger := tMail.FBN('SEND_COUNT').AsInteger + 1; tMail.post; tMail.refresh;
FreeAndNil(IdEMailAddressList2); end;
|
|