Ir al contenido


Foto

SMTP con Indy


  • Por favor identifícate para responder
3 respuestas en este tema

#1 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 21 mayo 2017 - 09:29

Hola al foro

 

Quisiera saber si alguien me puede ayudar con el envío de correos usando Indy y el componente SMTP. Durante un buen tiempo pudo funcionar sin problemas, pero ahora, no se si hubo cambios en mi servidor de salida, pero el proceso me envía error de autenticación.

 

Lo curioso es que cuando configuro mi cuenta de correo en THunderbird, no le indico autenticación ó seguridad. He visto algunos ejemplos y los he probado todos, pero sigo sin poder enviar correos.

 

Si alguien ha usado SMTP con autenticación se lo agradeceré.

 

Saludos

 

 


  • 0

#2 tmsanchez

tmsanchez

    Advanced Member

  • Miembros
  • PipPipPip
  • 85 mensajes

Escrito 23 mayo 2017 - 02:50

Buen día.

 

Hace tiempo tuve problemas al enviar correos desde una cuenta de gmail porque habían cambiado el esquema de autentificación, te paso un ejemplo del código que estoy utilizando


delphi
  1. procedure enviaCFDIPorCorreoElectronicoSSL(
  2. nombreRemitente, destinatario, nombreArchivo: String);
  3. var SMTP: TIdSMTP;
  4. Mensaje: TIdMessage;
  5. ssl: TIdSSLIOHandlerSocket;
  6. pdfAdjunto: TIdAttachment;
  7. xmlAdjunto: TIdAttachment;
  8. archivoPdf : String;
  9. archivoXML : String;
  10. archivoLog : TStringList;
  11. nombreArchivoLog: String;
  12. numCorreos : integer;
  13. listaCorreos : TStringTokens;
  14. contadorCorreos : Integer;
  15. begin
  16.  
  17. conexionAServidorExitosa := False;
  18. problemasAlEnviarCorreo := False;
  19.  
  20. if Length(Trim(destinatario)) = 0 then
  21. begin
  22. exit;
  23. end;
  24.  
  25. nombreArchivoLog := TRutasCFDI.obtenCarpetaCodigoLOG + 'LogMail_' + FormatDateTime('yyyy_mm_dd',Date)+'.txt';
  26. archivoLog := TStringList.Create;
  27.  
  28. if FileExists(nombreArchivoLog) then
  29. begin
  30. archivoLog.LoadFromFile(nombreArchivoLog);
  31. end;
  32.  
  33. archivoLog.Add('******' + FormatDateTime('yyyy_mm_dd hh:mm:ss ',Now));
  34. archivoLog.Add(' Preparandose para enviar el archivo ' + nombreArchivo);
  35.  
  36. ssl:=TIdSSLIOHandlerSocket.Create(nil);
  37. ssl.PassThrough := false;
  38.  
  39. // Creamos el componente de conexión con el servidor
  40. SMTP := TIdSMTP.Create( nil );
  41.  
  42. SMTP.Username := cdsConfigCFDIDireccionCorreo.Value;
  43. SMTP.Password := cdsConfigCFDIContraseniaEmail.Value;
  44. SMTP.Host := cdsConfigCFDIServidorSMTP.Value;
  45. SMTP.Port := cdsConfigCFDIPuertoSMTP.Value;
  46.  
  47.  
  48. if cdsConfigCFDIUtilizarSSL.Value = 'S' then
  49. begin
  50. SMTP.IOHandler := ssl;
  51. SMTP.AuthenticationType := atLogin;
  52. ssl.SSLOptions.Method := sslvSSLv23;
  53. ssl.SSLOptions.Mode := sslmUnassigned;
  54. ssl.SSLOptions.VerifyMode := [];
  55. ssl.SSLOptions.VerifyDepth := 0;
  56. end;
  57.  
  58.  
  59. // Creamos el contenido del mensaje
  60. Mensaje := TIdMessage.Create( nil );
  61. Mensaje.Clear;
  62. Mensaje.From.Name := nombreRemitente + ' - Comprobante Fiscal Digital';
  63. Mensaje.From.Address := cdsConfigCFDIDireccionCorreo.Value;
  64. Mensaje.Subject := nombreRemitente + ' Envio CFDI ';
  65. Mensaje.Body.Text := 'Por este medio le enviamos su Comprobante Fiscal Digital ';
  66. if pos(';', destinatario) > 0 then
  67. begin
  68. numCorreos := TStringTokenizer.GetTokenCount(destinatario,';');
  69. listaCorreos := TStringTokenizer.getTokens(destinatario,';');
  70. for contadorCorreos := 0 to numCorreos -1 do
  71. begin
  72. Mensaje.Recipients.Add;
  73. Mensaje.Recipients.Items[contadorCorreos].Address := Trim(listaCorreos[contadorCorreos]);
  74. end;
  75. end
  76. else
  77. begin
  78. Mensaje.Recipients.Add;
  79. Mensaje.Recipients.Items[0].Address := destinatario;
  80. end;
  81.  
  82. archivoPdf := TRutasCFDI.obtenCarpetaSalida + nombreArchivo + '.pdf';
  83. archivoXML := TRutasCFDI.obtenCarpetaSalida + nombreArchivo + '.xml';
  84.  
  85. archivoLog.Add(' ...archivo PDF ' + archivoPDF );
  86.  
  87. // Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
  88. if FileExists( archivoPDF ) then
  89. begin
  90. archivoLog.Add(' ...adjuntando PDF ' + archivoPDF );
  91. pdfAdjunto := TIdAttachment.Create( Mensaje.MessageParts, archivoPdf );
  92. archivoLog.Add(' ...adjuntando PDF de forma exitosa ' + archivoPDF );
  93. end
  94. else
  95. begin
  96. archivoLog.Add(' ...no se pudo adjuntar el PDF ' );
  97. pdfAdjunto := nil;
  98. end;
  99.  
  100. archivoLog.Add(' ...archivo XML ' + archivoXML );
  101. if FileExists( archivoXML ) then
  102. begin
  103. archivoLog.Add(' ...adjuntando XML ' + archivoPDF );
  104. xmlAdjunto := TIdAttachment.Create( Mensaje.MessageParts, archivoXML );
  105. archivoLog.Add(' ...adjuntando xml de forma exitosa ' + archivoPDF );
  106. end
  107. else
  108. begin
  109. archivoLog.Add(' ...no se pudo adjuntar el XML ' );
  110. xmlAdjunto := nil;
  111. end;
  112.  
  113. // Conectamos con el servidor SMTP
  114. try
  115. archivoLog.Add(' ... Conectando al servidor ');
  116. SMTP.Connect;
  117. archivoLog.Add(' ... Conexion al servidor exitosa ');
  118. conexionAServidorExitosa := True;
  119. except
  120. archivoLog.Add(' ... Error al obtener la conexión ');
  121. archivoLog.SaveToFile(nombreArchivoLog);
  122. archivoLog.Free;
  123. //raise Exception.Create( 'Error al conectar con el servidor.' );
  124. end;
  125.  
  126. // Si ha conectado enviamos el mensaje y desconectamos
  127. if conexionAServidorExitosa and SMTP.Connected then
  128. begin
  129. try
  130. archivoLog.Add(' ... Enviando mensaje ');
  131. SMTP.Send( Mensaje );
  132. archivoLog.Add(' ... Mensaje enviado ');
  133. except
  134. on E : Exception do
  135. begin
  136. problemasAlEnviarCorreo := True;
  137. archivoLog.Add(' ... Error al enviar el mensaje ');
  138. archivoLog.Add('Exception class name = '+E.ClassName);
  139. archivoLog.Add('Exception message = '+E.Message);
  140. archivoLog.SaveToFile(nombreArchivoLog);
  141. archivoLog.Free;
  142. end;
  143. end;
  144.  
  145. if not problemasAlEnviarCorreo then
  146. begin
  147. try
  148. archivoLog.Add(' ... Desconectandose del servidor ');
  149. SMTP.Disconnect;
  150. archivoLog.Add(' ... Desconexión del servidor ');
  151. except
  152. archivoLog.Add(' ... Error al desconectarse del servidor ');
  153. archivoLog.SaveToFile(nombreArchivoLog);
  154. archivoLog.Free;
  155. raise Exception.Create( 'Error al desconectar del servidor.' );
  156. end;
  157. end;
  158. end;
  159.  
  160. // Liberamos los objetos creados
  161. if pdfAdjunto <> nil then
  162. FreeAndNil( pdfAdjunto );
  163.  
  164. if xmlAdjunto <> nil then
  165. FreeAndNil( xmlAdjunto );
  166.  
  167. FreeAndNil( Mensaje );
  168. FreeAndNil( SMTP );
  169. FreeAndNil(ssl);
  170.  
  171. if (not problemasAlEnviarCorreo) and (conexionAServidorExitosa) then
  172. begin
  173. archivoLog.Add(' ... Envio de correo exitoso ');
  174. archivoLog.SaveToFile(nombreArchivoLog);
  175. archivoLog.Free;
  176. end;
  177. end;


  • 1

#3 tmsanchez

tmsanchez

    Advanced Member

  • Miembros
  • PipPipPip
  • 85 mensajes

Escrito 23 mayo 2017 - 03:01

 

Buen día.

 

Hace tiempo tuve problemas al enviar correos desde una cuenta de gmail porque habían cambiado el esquema de autentificación, te paso un ejemplo del código que estoy utilizando

 

En el caso de gmail el servidor smtp es smtp.gmail.com y el puerto es 465


  • 0

#4 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 23 mayo 2017 - 09:22

tmsanchez

 

Muchas gracias, he estado probando con varias formas y ya he bloqueado mi acceso pues la seguridad de mi servidor da por hecho que ando mandando o queriendo mandar spam.

 

VOy a probarlo hoy en la noche y te dirè como funciona. Por lo pronto agradezco tu ayuda, mucho.

 

Saludos!!


  • 0




IP.Board spam blocked by CleanTalk.