Advertisement
Guest User

Email

a guest
Mar 18th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.27 KB | None | 0 0
  1. unit uEnviaEmail;
  2.  
  3. interface
  4.  
  5. uses
  6.   IdTCPConnection, IdTCPClient,
  7.   IdMessageClient, IdSMTP, IdMessage, IdBaseComponent, IdComponent,
  8.   IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL;
  9.  
  10. Type
  11.   TEnviaEmail = class
  12.   private
  13.     { private declarations }
  14.     FSMTP_Servidor: String;
  15.     FSMTP_Porta: Integer;
  16.     FSMTP_Usuario: String;
  17.     FSMTP_Senha: String;
  18.     FSMTP_Email: String;
  19.     FSMTP_Autenticacao: String;
  20.     FSMTP_ConexaoSegura: String;
  21.     FEmailContador: String;
  22.     FAnexo: String;
  23.     FMensagem: String;
  24.     FErro: Boolean;
  25.     procedure SetAnexo(const Value: String);
  26.     procedure SetEmailContador(const Value: String);
  27.     procedure SetErro(const Value: Boolean);
  28.     procedure SetSMTP_Autenticacao(const Value: String);
  29.     procedure SetSMTP_ConexaoSegura(const Value: String);
  30.     procedure SetSMTP_Email(const Value: String);
  31.     procedure SetSMTP_Porta(const Value: Integer);
  32.     procedure SetSMTP_Senha(const Value: String);
  33.     procedure SetSMTP_Servidor(const Value: String);
  34.     procedure SetSMTP_Usuario(const Value: String);
  35.     procedure SetMensagem(const Value: String);
  36.     procedure CarregarInformacoes;
  37.   protected
  38.     { protected declarations }
  39.     FCentroResultado: String;
  40.   public
  41.     { public declarations }
  42.     property SMTP_Servidor: String read FSMTP_Servidor write SetSMTP_Servidor;
  43.     property SMTP_Porta: Integer read FSMTP_Porta write SetSMTP_Porta;
  44.     property SMTP_Usuario: String read FSMTP_Usuario write SetSMTP_Usuario;
  45.     property SMTP_Senha: String read FSMTP_Senha write SetSMTP_Senha;
  46.     property SMTP_Email: String read FSMTP_Email write SetSMTP_Email;
  47.     property SMTP_Autenticacao: String read FSMTP_Autenticacao write SetSMTP_Autenticacao;
  48.     property SMTP_ConexaoSegura: String read FSMTP_ConexaoSegura write SetSMTP_ConexaoSegura;
  49.     property Erro: Boolean read FErro write SetErro;
  50.     property EmailContador: String read FEmailContador write SetEmailContador;
  51.     property Anexo: String read FAnexo write SetAnexo;
  52.     property Mensagem: String read FMensagem write SetMensagem;
  53.     constructor Create;
  54.     //constructor Create(pCentroResultado: String); Overload;
  55.     destructor Destroy; Override;
  56.     function Enviar: Boolean;
  57.   published
  58.     { published declarations }
  59.   end;
  60.  
  61. var
  62.   IdSMTP:    TIdSMTP;
  63.   IdMessage: TIdMessage;
  64.   IdSocket:  TIdSSLIOHandlerSocket;
  65.  
  66. implementation
  67.  
  68. uses
  69.   uRegistro;
  70.  
  71. { TEnviaEmail }
  72.  
  73. procedure TEnviaEmail.CarregarInformacoes;
  74. begin
  75.   (*
  76.     Se for Informado centro de Resultado, a rotina pegará as informações do registro.
  77.     Caso contrário, deverá ser especificado.
  78.   *)
  79.   try
  80.     if (FCentroResultado <> '') then
  81.       begin
  82.         if not(Assigned(Registro)) then
  83.           Registro := TRegistro.Create(nil);
  84.  
  85.         SMTP_Servidor     := Registro.ReadString(FCentroResultado, 'NFE', 'ServidorSMTP','');
  86.         SMTP_Usuario      := Registro.ReadString(FCentroResultado, 'NFE', 'UsuarioRemetente','');
  87.         SMTP_Senha        := Registro.ReadString(FCentroResultado, 'NFE', 'EmailSenha','');
  88.         SMTP_Email        := Registro.ReadString(FCentroResultado, 'NFE', 'EmailRemetente','');
  89.         SMTP_Autenticacao := Registro.ReadString(FCentroResultado, 'NFE', 'AutenticacaoEmail','');
  90.         EmailContador     := Registro.ReadString(FCentroResultado, 'NFE', 'EmailEscrContabilidade','');
  91.         Mensagem          := 'Este e-mail contem os XMLs do período solicitado pelo escritório da contabilidade!';
  92.  
  93.         if (Registro.ReadString(FCentroResultado, 'NFE', 'PortaEmail','') = '') then
  94.           SMTP_Porta  := 0
  95.         else
  96.           SMTP_Porta    := StrToInt(Registro.ReadString(FCentroResultado, 'NFE', 'PortaEmail',''));
  97.  
  98.         if (Registro.ReadString(FCentroResultado, 'NFE', 'AutenticacaoSSLTLS','') = 'TLS') or (Registro.ReadString(FCentroResultado, 'NFE', 'AutenticacaoSSLTLS','') = 'SSL')then
  99.           SMTP_ConexaoSegura := 'S'
  100.         else
  101.           SMTP_ConexaoSegura := 'N';
  102.       end;
  103.   except
  104.   end
  105. end;
  106.  
  107. constructor TEnviaEmail.Create;
  108. begin
  109.   Erro      := False;
  110.   IdSMTP    := TIdSMTP.Create(nil);
  111.   IdMessage := TIdMessage.Create(nil);
  112.   IdSocket  := TIdSSLIOHandlerSocket.Create(nil);
  113. end;
  114. {
  115. constructor TEnviaEmail.Create(pCentroResultado: String): Overload;
  116. begin
  117.   inherited;
  118.   Erro      := False;
  119.   IdSMTP    := TIdSMTP.Create(nil);
  120.   IdMessage := TIdMessage.Create(nil);
  121.   IdSocket  := TIdSSLIOHandlerSocket.Create(nil);
  122.   FCentroResultado := pCentroResultado;
  123. end;
  124. }
  125. destructor TEnviaEmail.Destroy;
  126. begin
  127.   IdSMTP.Free;
  128.   IdMessage.Free;
  129.   IdSocket.Free;
  130.   inherited;
  131. end;
  132.  
  133. function TEnviaEmail.Enviar: Boolean;
  134. begin
  135.  
  136.   try
  137.     CarregarInformacoes;
  138.    
  139.     //Configurando Cabeçalho do E-mail
  140.     IdMessage.Clear;
  141.     IdMessage.Subject       := 'Envio das XMLs para Contabilidade.';
  142.     IdMessage.From.Address  := SMTP_Email;
  143.     IdMessage.From.Text     := '<' + SMTP_Email + '>';
  144.  
  145.     //Configurando o Destinatário
  146.     IdMessage.Priority  := mpHigh;
  147.     IdMessage.ReceiptRecipient.Text := IdMessage.From.Text;
  148.     IdMessage.Recipients.EMailAddresses := EmailContador;
  149.     IdMessage.Body.Add(Mensagem);
  150.     TIdAttachment.Create(IdMessage.MessageParts, Anexo);
  151.  
  152.     //-----Conexão Segura SSL
  153.     if (SMTP_ConexaoSegura = 'S') then
  154.       begin
  155.         IdSMTP.IOHandler  := IdSocket;
  156.         IdSocket.SSLOptions.Method  := sslvTLSv1;
  157.         IdSocket.PassThrough  := True;
  158.       end
  159.     else
  160.       IdSMTP.IOHandler  := nil;
  161.  
  162.     IdSMTP.Port     :=  SMTP_Porta;
  163.     IdSMTP.Host     :=  SMTP_Servidor;
  164.     IdSMTP.Username := SMTP_Usuario;
  165.     IdSMTP.Password := SMTP_Senha;
  166.  
  167.     try
  168.       IdSMTP.Connect();
  169.  
  170.       //Emula o Comportamento do TLS
  171.       if (SMTP_ConexaoSegura = 'S') then
  172.         begin
  173.           IdSMTP.SendCmd('STARTTLS', 220);
  174.           IdSocket.PassThrough  := False;
  175.         end;
  176.  
  177.       if (SMTP_Autenticacao = 'S') then
  178.         begin
  179.           IdSMTP.AuthenticationType := atLogin;
  180.           IdSMTP.Authenticate;
  181.         end
  182.       else
  183.         IdSMTP.AuthenticationType   := atNone;
  184.  
  185.       IdSMTP.Send(IdMessage);
  186.       Result := True;
  187.     except
  188.       Result := False;
  189.     end;
  190.   finally
  191.     if (IdSMTP.Connected) then
  192.       IdSMTP.Disconnect;
  193.   end;  
  194. end;
  195.  
  196. procedure TEnviaEmail.SetAnexo(const Value: String);
  197. begin
  198.   FAnexo := Value;
  199. end;
  200.  
  201. procedure TEnviaEmail.SetEmailContador(const Value: String);
  202. begin
  203.   FEmailContador := Value;
  204. end;
  205.  
  206. procedure TEnviaEmail.SetErro(const Value: Boolean);
  207. begin
  208.   FErro := Value;
  209. end;
  210.  
  211. procedure TEnviaEmail.SetMensagem(const Value: String);
  212. begin
  213.   FMensagem := Value;
  214. end;
  215.  
  216. procedure TEnviaEmail.SetSMTP_Autenticacao(const Value: String);
  217. begin
  218.   FSMTP_Autenticacao := Value;
  219. end;
  220.  
  221. procedure TEnviaEmail.SetSMTP_ConexaoSegura(const Value: String);
  222. begin
  223.   FSMTP_ConexaoSegura := Value;
  224. end;
  225.  
  226. procedure TEnviaEmail.SetSMTP_Email(const Value: String);
  227. begin
  228.   FSMTP_Email := Value;
  229. end;
  230.  
  231. procedure TEnviaEmail.SetSMTP_Porta(const Value: Integer);
  232. begin
  233.   FSMTP_Porta := Value;
  234. end;
  235.  
  236. procedure TEnviaEmail.SetSMTP_Senha(const Value: String);
  237. begin
  238.   FSMTP_Senha := Value;
  239. end;
  240.  
  241. procedure TEnviaEmail.SetSMTP_Servidor(const Value: String);
  242. begin
  243.   FSMTP_Servidor := Value;
  244. end;
  245.  
  246. procedure TEnviaEmail.SetSMTP_Usuario(const Value: String);
  247. begin
  248.   FSMTP_Usuario := Value;
  249. end;
  250.  
  251. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement