Advertisement
Guest User

Untitled

a guest
Aug 15th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.72 KB | None | 0 0
  1. unit Thread_outrosIniciaEnvio;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows,SysUtils, classes, funcoesUtils,
  7. IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
  8. IdSSLOpenSSL, IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection,
  9. IdTCPClient, IdServerIOHandler, IdExplicitTLSClientServerBase, IdMessageClient,
  10. ComCtrls, IdText, IdPOP3, IdSMTP, IdMessage, IdAttachmentFile;
  11.  
  12.  
  13. type
  14. TThread_outrosIniciaEnvio = class(TThread)
  15. private
  16. { Private Thread declarations }
  17. EXCEPTION_STRING :String;
  18. _servidor:string;
  19. _login:string;
  20. _senha:string;
  21. _lista:TStringList;
  22. _remetente:string;
  23. public
  24. { Public Thread declarations }
  25. constructor Create(login, senha, servidor:string; lista:TStringList; remetente:string);
  26.  
  27. protected
  28.  
  29. procedure GetResult;
  30. procedure Execute; override;
  31.  
  32.  
  33. end;
  34.  
  35. implementation
  36.  
  37.  
  38. uses Unit1;
  39.  
  40. function geraNome( max: integer ):string;
  41. var
  42. i:integer;
  43. r:string;
  44. const
  45. str='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  46. begin
  47. for i:=1 to max do r := r + str[random(length(str))+1];
  48. Result := r;
  49. end;
  50.  
  51. function geraNumero( max: integer ):string;
  52. var
  53. i:integer;
  54. r:string;
  55. const
  56. str='0123456789';
  57. begin
  58. for i:=1 to max do r := r + str[random(length(str))+1];
  59. Result := r;
  60. end;
  61.  
  62. procedure TThread_outrosIniciaEnvio.GetResult;
  63. begin
  64. end;
  65.  
  66.  
  67. procedure TThread_outrosIniciaEnvio.Execute;
  68. label FinalizarThread;
  69. var
  70. IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
  71. IdSMTP: TIdSMTP;
  72. IdMessage: TIdMessage;
  73. IdText: TIdText;
  74. sAnexo, sCorpo, sHost, boundary, pathAnexo: string;
  75. i,x, porta: Integer;
  76. remetente, engenharia, servidor, anexo: TStringList;
  77. begin
  78. IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create();
  79. IdSMTP := TIdSMTP.Create();
  80. IdMessage := TIdMessage.Create();
  81.  
  82. try
  83. if Pos(':', _servidor) > 0 then
  84. begin
  85. servidor := TStringList.Create;
  86. ExtractStrings([':'],[' '],PChar(_servidor), servidor);
  87. sHost := servidor[0];
  88. porta := StrToInt(servidor[1]);
  89. end else begin
  90. sHost := _servidor;
  91. porta := 25;
  92. end;
  93.  
  94. if (porta = 465) or (porta = 995) or (porta = 993) then
  95. begin
  96. IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
  97. IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
  98. IdSMTP.IOHandler := IdSSLIOHandlerSocket;
  99. IdSMTP.UseTLS := utUseImplicitTLS;
  100. end;
  101.  
  102. IdSMTP.AuthType := satDefault;
  103.  
  104. IdSMTP.Port := porta;
  105. IdSMTP.Host := sHost;
  106.  
  107. IdSMTP.Username := _login;
  108. IdSMTP.Password := _senha;
  109.  
  110. remetente := TStringList.Create;
  111. ExtractStrings(['|'],[' '],PChar(_remetente), remetente);
  112.  
  113. // Configuração da mensagem (TIdMessage)
  114. IdMessage.From.Address := _login;
  115. IdMessage.From.Name := remetente[0];
  116. IdMessage.ReplyTo.EMailAddresses := remetente[1];
  117.  
  118. boundary := 'XYZ-' + formatdatetime('ddmmyyyynnss', now) + '-ZYX';
  119. IdMessage.Subject := substituirTags(remetente[2], EmptyStr, false);
  120.  
  121. IdMessage.Encoding := meMIME;
  122.  
  123. // Configuração do corpo do email (TIdText)
  124. IdText := TIdText.Create(IdMessage.MessageParts);
  125. IdText.ContentType := 'text/html; charset=iso-8859-1';
  126.  
  127. engenharia := TStringList.Create;
  128. engenharia.LoadFromFile(remetente[3]);
  129. sCorpo := engenharia.Text;
  130. engenharia.Clear;
  131. engenharia.Add('<span style="color:#FFF">--'+boundary+'</span><br/>');
  132. sCorpo := substituirTags(sCorpo, EmptyStr, false);
  133. engenharia.Add(sCorpo);
  134. engenharia.Add('<br/><span style="color:#FFF">--'+boundary+'</span>');
  135. IdText.Body.Text := engenharia.Text;
  136.  
  137. // Opcional - Anexo da mensagem (TIdAttachmentFile)
  138. sAnexo := remetente[4];
  139. if (Trim(sAnexo) <> 'N') and FileExists(sAnexo) then
  140. begin
  141. anexo := TStringList.Create;
  142. anexo.LoadFromFile(sAnexo);
  143. pathAnexo := ExtractFilePath(sAnexo) + substituirTags(ExtractFileName(sAnexo), EmptyStr, false);
  144. anexo.SaveToFile(pathAnexo);
  145. TIdAttachmentFile.Create(IdMessage.MessageParts, TFileName(pathAnexo));
  146. end;
  147.  
  148. // Conexão e autenticação
  149. try
  150. IdSMTP.Connect;
  151. IdSMTP.Authenticate;
  152. except
  153. on E:Exception do
  154. begin
  155. // form1.logenvio('Erro na conexão ou autenticação: ' + E.Message);
  156. for i := 0 to _lista.Count -1 do
  157. begin
  158. form1.lblistaemail.Items.Add(_lista.Strings[i]);
  159. end;
  160. form1.Label7.Caption := IntToStr(form1.lblistaemail.Count);
  161. form1.Label3.Caption := 'Total de E-mails: ' + IntToStr(form1.lblistaemail.Count);
  162. if (Trim(pathAnexo) <> EmptyStr) and FileExists(pathAnexo) then
  163. begin
  164. DeleteFile(pathAnexo);
  165. end;
  166. Exit;
  167. end;
  168. end;
  169.  
  170. for i := 0 to _lista.Count -1 do
  171. begin
  172. IdMessage.Recipients.Add.Address := _lista.Strings[i];
  173.  
  174. if IdMessage.Recipients.Count = StrToInt(form1.LabeledEditQtdeEmailEnvio.Text) then
  175. begin
  176. if (IdMessage.Recipients.Count = 1) then
  177. IdText.Body.Text := substituirTags(engenharia.Text, _lista.Strings[i], true);
  178.  
  179. try
  180. IdSMTP.Send(IdMessage);
  181. for x := 0 to IdMessage.Recipients.Count-1 do
  182. begin
  183. form1.logenvio('Enviado para ' + IntToStr(i) +'-'+ IdMessage.Recipients[x].Address);
  184. form1.Label6.Caption := IntToStr(StrToInt(form1.Label6.Caption) + 1);
  185. end;
  186. IdMessage.Recipients.Clear;
  187. Sleep(50);
  188. except
  189. On E:Exception do
  190. begin
  191. for x := 0 to IdMessage.Recipients.Count-1 do
  192. begin
  193. // form1.logenvio('Erro ao enviar ('+IntToStr(i)+'-'+IdMessage.Recipients[x].Address+'): ' + E.Message);
  194. end;
  195. IdMessage.Recipients.Clear;
  196. form1.Label7.Caption := IntToStr(form1.lblistaemail.Count);
  197. form1.Label3.Caption := 'Total de E-mails: ' + IntToStr(form1.lblistaemail.Count);
  198. end;
  199.  
  200. end;
  201. end;
  202. end;
  203. finally
  204. form1.lbloginssenhas.Items.Add(_login+'|'+_senha+'|'+_servidor+'|');
  205. if (Trim(pathAnexo) <> EmptyStr) and FileExists(pathAnexo) then
  206. begin
  207. DeleteFile(pathAnexo);
  208. end;
  209. // desconecta do servidor
  210. IdSMTP.Disconnect;
  211. // liberação da DLL
  212. // UnLoadOpenSSLLibrary;
  213. // liberação dos objetos da memória
  214. FreeAndNil(IdMessage);
  215. FreeAndNil(IdSSLIOHandlerSocket);
  216. FreeAndNil(IdSMTP);
  217. end;
  218. end;
  219.  
  220. constructor TThread_outrosIniciaEnvio.Create(login, senha, servidor:string; lista:TStringList; remetente:string);
  221. begin
  222. _login := login;
  223. _senha := senha;
  224. _servidor := servidor;
  225. _lista := lista;
  226. _remetente := remetente;
  227.  
  228. FreeOnTerminate := True;
  229. inherited Create(False);
  230. end;
  231.  
  232. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement