Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Thread_outrosIniciaEnvio;
- interface
- uses
- Windows,SysUtils, classes, funcoesUtils,
- IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
- IdSSLOpenSSL, IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection,
- IdTCPClient, IdServerIOHandler, IdExplicitTLSClientServerBase, IdMessageClient,
- ComCtrls, IdText, IdPOP3, IdSMTP, IdMessage, IdAttachmentFile;
- type
- TThread_outrosIniciaEnvio = class(TThread)
- private
- { Private Thread declarations }
- EXCEPTION_STRING :String;
- _servidor:string;
- _login:string;
- _senha:string;
- _lista:TStringList;
- _remetente:string;
- public
- { Public Thread declarations }
- constructor Create(login, senha, servidor:string; lista:TStringList; remetente:string);
- protected
- procedure GetResult;
- procedure Execute; override;
- end;
- implementation
- uses Unit1;
- function geraNome( max: integer ):string;
- var
- i:integer;
- r:string;
- const
- str='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- begin
- for i:=1 to max do r := r + str[random(length(str))+1];
- Result := r;
- end;
- function geraNumero( max: integer ):string;
- var
- i:integer;
- r:string;
- const
- str='0123456789';
- begin
- for i:=1 to max do r := r + str[random(length(str))+1];
- Result := r;
- end;
- procedure TThread_outrosIniciaEnvio.GetResult;
- begin
- end;
- procedure TThread_outrosIniciaEnvio.Execute;
- label FinalizarThread;
- var
- IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
- IdSMTP: TIdSMTP;
- IdMessage: TIdMessage;
- IdText: TIdText;
- sAnexo, sCorpo, sHost, boundary, pathAnexo: string;
- i,x, porta: Integer;
- remetente, engenharia, servidor, anexo: TStringList;
- begin
- IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create();
- IdSMTP := TIdSMTP.Create();
- IdMessage := TIdMessage.Create();
- try
- if Pos(':', _servidor) > 0 then
- begin
- servidor := TStringList.Create;
- ExtractStrings([':'],[' '],PChar(_servidor), servidor);
- sHost := servidor[0];
- porta := StrToInt(servidor[1]);
- end else begin
- sHost := _servidor;
- porta := 25;
- end;
- if (porta = 465) or (porta = 995) or (porta = 993) then
- begin
- IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
- IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
- IdSMTP.IOHandler := IdSSLIOHandlerSocket;
- IdSMTP.UseTLS := utUseImplicitTLS;
- end;
- IdSMTP.AuthType := satDefault;
- IdSMTP.Port := porta;
- IdSMTP.Host := sHost;
- IdSMTP.Username := _login;
- IdSMTP.Password := _senha;
- remetente := TStringList.Create;
- ExtractStrings(['|'],[' '],PChar(_remetente), remetente);
- // Configuração da mensagem (TIdMessage)
- IdMessage.From.Address := _login;
- IdMessage.From.Name := remetente[0];
- IdMessage.ReplyTo.EMailAddresses := remetente[1];
- boundary := 'XYZ-' + formatdatetime('ddmmyyyynnss', now) + '-ZYX';
- IdMessage.Subject := substituirTags(remetente[2], EmptyStr, false);
- IdMessage.Encoding := meMIME;
- // Configuração do corpo do email (TIdText)
- IdText := TIdText.Create(IdMessage.MessageParts);
- IdText.ContentType := 'text/html; charset=iso-8859-1';
- engenharia := TStringList.Create;
- engenharia.LoadFromFile(remetente[3]);
- sCorpo := engenharia.Text;
- engenharia.Clear;
- engenharia.Add('<span style="color:#FFF">--'+boundary+'</span><br/>');
- sCorpo := substituirTags(sCorpo, EmptyStr, false);
- engenharia.Add(sCorpo);
- engenharia.Add('<br/><span style="color:#FFF">--'+boundary+'</span>');
- IdText.Body.Text := engenharia.Text;
- // Opcional - Anexo da mensagem (TIdAttachmentFile)
- sAnexo := remetente[4];
- if (Trim(sAnexo) <> 'N') and FileExists(sAnexo) then
- begin
- anexo := TStringList.Create;
- anexo.LoadFromFile(sAnexo);
- pathAnexo := ExtractFilePath(sAnexo) + substituirTags(ExtractFileName(sAnexo), EmptyStr, false);
- anexo.SaveToFile(pathAnexo);
- TIdAttachmentFile.Create(IdMessage.MessageParts, TFileName(pathAnexo));
- end;
- // Conexão e autenticação
- try
- IdSMTP.Connect;
- IdSMTP.Authenticate;
- except
- on E:Exception do
- begin
- // form1.logenvio('Erro na conexão ou autenticação: ' + E.Message);
- for i := 0 to _lista.Count -1 do
- begin
- form1.lblistaemail.Items.Add(_lista.Strings[i]);
- end;
- form1.Label7.Caption := IntToStr(form1.lblistaemail.Count);
- form1.Label3.Caption := 'Total de E-mails: ' + IntToStr(form1.lblistaemail.Count);
- if (Trim(pathAnexo) <> EmptyStr) and FileExists(pathAnexo) then
- begin
- DeleteFile(pathAnexo);
- end;
- Exit;
- end;
- end;
- for i := 0 to _lista.Count -1 do
- begin
- IdMessage.Recipients.Add.Address := _lista.Strings[i];
- if IdMessage.Recipients.Count = StrToInt(form1.LabeledEditQtdeEmailEnvio.Text) then
- begin
- if (IdMessage.Recipients.Count = 1) then
- IdText.Body.Text := substituirTags(engenharia.Text, _lista.Strings[i], true);
- try
- IdSMTP.Send(IdMessage);
- for x := 0 to IdMessage.Recipients.Count-1 do
- begin
- form1.logenvio('Enviado para ' + IntToStr(i) +'-'+ IdMessage.Recipients[x].Address);
- form1.Label6.Caption := IntToStr(StrToInt(form1.Label6.Caption) + 1);
- end;
- IdMessage.Recipients.Clear;
- Sleep(50);
- except
- On E:Exception do
- begin
- for x := 0 to IdMessage.Recipients.Count-1 do
- begin
- // form1.logenvio('Erro ao enviar ('+IntToStr(i)+'-'+IdMessage.Recipients[x].Address+'): ' + E.Message);
- end;
- IdMessage.Recipients.Clear;
- form1.Label7.Caption := IntToStr(form1.lblistaemail.Count);
- form1.Label3.Caption := 'Total de E-mails: ' + IntToStr(form1.lblistaemail.Count);
- end;
- end;
- end;
- end;
- finally
- form1.lbloginssenhas.Items.Add(_login+'|'+_senha+'|'+_servidor+'|');
- if (Trim(pathAnexo) <> EmptyStr) and FileExists(pathAnexo) then
- begin
- DeleteFile(pathAnexo);
- end;
- // desconecta do servidor
- IdSMTP.Disconnect;
- // liberação da DLL
- // UnLoadOpenSSLLibrary;
- // liberação dos objetos da memória
- FreeAndNil(IdMessage);
- FreeAndNil(IdSSLIOHandlerSocket);
- FreeAndNil(IdSMTP);
- end;
- end;
- constructor TThread_outrosIniciaEnvio.Create(login, senha, servidor:string; lista:TStringList; remetente:string);
- begin
- _login := login;
- _senha := senha;
- _servidor := servidor;
- _lista := lista;
- _remetente := remetente;
- FreeOnTerminate := True;
- inherited Create(False);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement