procedure enviaCFDIPorCorreoElectronicoSSL(
nombreRemitente, destinatario, nombreArchivo: String);
var SMTP: TIdSMTP;
Mensaje: TIdMessage;
ssl: TIdSSLIOHandlerSocket;
pdfAdjunto: TIdAttachment;
xmlAdjunto: TIdAttachment;
archivoPdf : String;
archivoXML : String;
archivoLog : TStringList;
nombreArchivoLog: String;
numCorreos : integer;
listaCorreos : TStringTokens;
contadorCorreos : Integer;
begin
conexionAServidorExitosa := False;
problemasAlEnviarCorreo := False;
if Length(Trim(destinatario)) = 0 then
begin
exit;
end;
nombreArchivoLog := TRutasCFDI.obtenCarpetaCodigoLOG + 'LogMail_' + FormatDateTime('yyyy_mm_dd',Date)+'.txt';
archivoLog := TStringList.Create;
if FileExists(nombreArchivoLog) then
begin
archivoLog.LoadFromFile(nombreArchivoLog);
end;
archivoLog.Add('******' + FormatDateTime('yyyy_mm_dd hh:mm:ss ',Now));
archivoLog.Add(' Preparandose para enviar el archivo ' + nombreArchivo);
ssl:=TIdSSLIOHandlerSocket.Create(nil);
ssl.PassThrough := false;
// Creamos el componente de conexión con el servidor
SMTP := TIdSMTP.Create( nil );
SMTP.Username := cdsConfigCFDIDireccionCorreo.Value;
SMTP.Password := cdsConfigCFDIContraseniaEmail.Value;
SMTP.Host := cdsConfigCFDIServidorSMTP.Value;
SMTP.Port := cdsConfigCFDIPuertoSMTP.Value;
if cdsConfigCFDIUtilizarSSL.Value = 'S' then
begin
SMTP.IOHandler := ssl;
SMTP.AuthenticationType := atLogin;
ssl.SSLOptions.Method := sslvSSLv23;
ssl.SSLOptions.Mode := sslmUnassigned;
ssl.SSLOptions.VerifyMode := [];
ssl.SSLOptions.VerifyDepth := 0;
end;
// Creamos el contenido del mensaje
Mensaje := TIdMessage.Create( nil );
Mensaje.Clear;
Mensaje.From.Name := nombreRemitente + ' - Comprobante Fiscal Digital';
Mensaje.From.Address := cdsConfigCFDIDireccionCorreo.Value;
Mensaje.Subject := nombreRemitente + ' Envio CFDI ';
Mensaje.Body.Text := 'Por este medio le enviamos su Comprobante Fiscal Digital ';
if pos(';', destinatario) > 0 then
begin
numCorreos := TStringTokenizer.GetTokenCount(destinatario,';');
listaCorreos := TStringTokenizer.getTokens(destinatario,';');
for contadorCorreos := 0 to numCorreos -1 do
begin
Mensaje.Recipients.Add;
Mensaje.Recipients.Items[contadorCorreos].Address := Trim(listaCorreos[contadorCorreos]);
end;
end
else
begin
Mensaje.Recipients.Add;
Mensaje.Recipients.Items[0].Address := destinatario;
end;
archivoPdf := TRutasCFDI.obtenCarpetaSalida + nombreArchivo + '.pdf';
archivoXML := TRutasCFDI.obtenCarpetaSalida + nombreArchivo + '.xml';
archivoLog.Add(' ...archivo PDF ' + archivoPDF );
// Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
if FileExists( archivoPDF ) then
begin
archivoLog.Add(' ...adjuntando PDF ' + archivoPDF );
pdfAdjunto := TIdAttachment.Create( Mensaje.MessageParts, archivoPdf );
archivoLog.Add(' ...adjuntando PDF de forma exitosa ' + archivoPDF );
end
else
begin
archivoLog.Add(' ...no se pudo adjuntar el PDF ' );
pdfAdjunto := nil;
end;
archivoLog.Add(' ...archivo XML ' + archivoXML );
if FileExists( archivoXML ) then
begin
archivoLog.Add(' ...adjuntando XML ' + archivoPDF );
xmlAdjunto := TIdAttachment.Create( Mensaje.MessageParts, archivoXML );
archivoLog.Add(' ...adjuntando xml de forma exitosa ' + archivoPDF );
end
else
begin
archivoLog.Add(' ...no se pudo adjuntar el XML ' );
xmlAdjunto := nil;
end;
// Conectamos con el servidor SMTP
try
archivoLog.Add(' ... Conectando al servidor ');
SMTP.Connect;
archivoLog.Add(' ... Conexion al servidor exitosa ');
conexionAServidorExitosa := True;
except
archivoLog.Add(' ... Error al obtener la conexión ');
archivoLog.SaveToFile(nombreArchivoLog);
archivoLog.Free;
//raise Exception.Create( 'Error al conectar con el servidor.' );
end;
// Si ha conectado enviamos el mensaje y desconectamos
if conexionAServidorExitosa and SMTP.Connected then
begin
try
archivoLog.Add(' ... Enviando mensaje ');
SMTP.Send( Mensaje );
archivoLog.Add(' ... Mensaje enviado ');
except
on E : Exception do
begin
problemasAlEnviarCorreo := True;
archivoLog.Add(' ... Error al enviar el mensaje ');
archivoLog.Add('Exception class name = '+E.ClassName);
archivoLog.Add('Exception message = '+E.Message);
archivoLog.SaveToFile(nombreArchivoLog);
archivoLog.Free;
end;
end;
if not problemasAlEnviarCorreo then
begin
try
archivoLog.Add(' ... Desconectandose del servidor ');
SMTP.Disconnect;
archivoLog.Add(' ... Desconexión del servidor ');
except
archivoLog.Add(' ... Error al desconectarse del servidor ');
archivoLog.SaveToFile(nombreArchivoLog);
archivoLog.Free;
raise Exception.Create( 'Error al desconectar del servidor.' );
end;
end;
end;
// Liberamos los objetos creados
if pdfAdjunto <> nil then
FreeAndNil( pdfAdjunto );
if xmlAdjunto <> nil then
FreeAndNil( xmlAdjunto );
FreeAndNil( Mensaje );
FreeAndNil( SMTP );
FreeAndNil(ssl);
if (not problemasAlEnviarCorreo) and (conexionAServidorExitosa) then
begin
archivoLog.Add(' ... Envio de correo exitoso ');
archivoLog.SaveToFile(nombreArchivoLog);
archivoLog.Free;
end;
end;