R

ramonf

Usuario (México)

Primer post: 11 may 2012Último post: 11 may 2012
1
Posts
13
Puntos totales
0
Comentarios
E
Exportar PDF y enviar por correo electrónico.Delphi 7
Hazlo Tu MismoporAnónimo5/11/2012

Buen día. Esta vez tratare de explicar una forma para generar y enviar por correo electrónico un documento en PDF. Usando el componente ppReport (claro puede ser en cualquier otro formato que el componente ofrezca pero ahora lo hice con PDF). espero y sea de ayuda. En este primer paso vamos a guardar el documento en PDF. Código Delphi procedure TFormCatalogo.SpeedButtonExportarClick( Sender: TObject); var IDMaestro : integer; Ruta : string; saveDialog : TSaveDialog; ArchivoPDF : String; begin try Screen.Cursor := crHourGlass; //Creamos un saveDialog y le damos las características del documento. //En mi caso voy a recuperar el identificador de la consulta para cargar el ppReport IDMaestro := ADOQueryCatalogo.FieldByName('ID').AsInteger; //Recupero los datos a imprimir DatosParaImpresion(IDMaestro); saveDialog := TSaveDialog.Create(self); saveDialog.Title := 'Guardar Archivo'; saveDialog.Filter := 'PDF|*.pdf'; saveDialog.DefaultExt := 'pdf'; saveDialog.FilterIndex := 1; if saveDialog.Execute then begin //Obtenemos la ruta, aquí desdi poner una variable publica tipo string ya que a usare en otro procedimiento FRuta := saveDialog.FileName; saveDialog.Free; //Ahora con el ppReport lo configuramos para guardarlo en pdf ppReport.ShowPrintDialog := False; ppReport.DeviceType := 'PDF'; ppReport.PDFSettings.Author := 'Autor'; ppReport.TextFileName := FRuta; end; ppReport.Print; EnviaCorreoElectronico; Screen.Cursor := crDefault; except on E:Exception do begin Screen.Cursor := crDefault; raise Exception.Create('Error el exportar a formato PDF:'+#13+ E.Message); end; end; end; Ahora para enviar el correo electrónico se necesitan dos componentes en la pestaña indy Clients necesitamos el objeto IdSMTP y en la pestaña Indy Misc necesitamos el objeto IdMessage. ahora vamos a configurar. procedure TFormCatalogo.EnviaCorreoElectronico; var NombreUsuario : string; Correo : string; Password : string; Host : string; Puerto : string; Autenticacion : TAuthenticationType; Firma : string; Destinatario : string; SMTP: TIdSMTP; Mensaje: TIdMessage; Adjunto: TIdAttachment; IDMaestro : integer; begin //Recuperamos datos para el llenado de los requisitos del e-mail. //En este caso recupere mis datos de un catalogo anteriormente capturado. with ADOQueryRecuperaConfigMail do begin Close; Parameters.ParamByName('IDUsuario').Value := FUsuarioLink; Open; NombreUsuario := FieldByName('NOMBREDELUSUARIO').AsString; Correo := FieldByName('CORREO').AsString; Password := FieldByName('CONTRASEÑA').AsString; Host := FieldByName('HOST').AsString; Puerto := FieldByName('PUERTO').AsString; if FieldByName('AUTENTICACION').AsString = '' then Autenticacion := atLogin else Autenticacion := FieldByName('AUTENTICACION').AsVariant; Firma := FieldByName('FIRMA').AsString; end; //El destinatario lo extraigo de mi catalogo según lo requiera se va a ir configurando dinamicamente. Destinatario := ADOQueryReporte.FieldByName('EMAIL').AsString; if Destinatario = '' then raise Exception.Create('No existe correo electronico del destinatario.'); //Creamos el componente de conexión con el servidor SMTP := TIdSMTP.Create( nil ); SMTP.Username := Correo; SMTP.Password := Password; SMTP.Host := Host; SMTP.Port := StrToInt(Puerto); SMTP.AuthenticationType := Autenticacion; //Creamos el contenido del mensaje Mensaje := TIdMessage.Create( nil ); Mensaje.Clear; Mensaje.From.Name := NombreUsuario; Mensaje.From.Address := Correo; Mensaje.Subject := 'Asunto'; Mensaje.Body.Text := 'Cuerpo del mensaje '+#13+#13+Firma; Mensaje.Recipients.Add; Mensaje.Recipients.Items[0].Address := Destinatario; //Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje if not ADOQueryReporteDetalle.IsEmpty then begin //Recuerdan la variable FRuta declarada en la seccion publica? aquí la utilizamos para saber de donde vamos a adjuntar. Adjunto := TIdAttachment.Create(Mensaje.MessageParts,FRuta); end else Adjunto := nil; //Le mostramos al usuario como quedara el correo electronico. if MessageDlg('El correo electrónico que se enviara es el siguiente:'+#13+#13+ 'Usuario: '+NombreUsuario+#13+ 'Correo: '+Correo+#13+#13+ 'Destinatario: '+Destinatario+#13+#13+ 'Ruta de Archivo Adjunto:'+FRuta+#13+#13+ 'Asunto: Asunto'+#13+ 'Body: '+#13+ 'Cuerpo del mensaje '+#13+#13+Firma, mtConfirmation, mbYesNoCancel, 0) = mrYes then begin // Si es afirmativa la respuesta entonces conectamos con el servidor SMTP try SMTP.Connect; except raise Exception.Create('Error al conectar con el servidor.'); end; //Si ha conectado enviamos el mensaje y desconectamos if SMTP.Connected then begin try SMTP.Send( Mensaje ); except raise Exception.Create('Error al enviar el mensaje.'); end; try SMTP.Disconnect; except raise Exception.Create('Error al desconectar del servidor.'); end; end; //Liberamos los objetos creados if Adjunto <> nil then FreeAndNil( Adjunto ); FreeAndNil( Mensaje ); FreeAndNil( SMTP ); Application.MessageBox('Mensaje enviado correctamente.', ' ',MB_ICONINFORMATION ); end; end; Bueno de mi parte es todo espero les sea de ayuda. Muchas gracias por leerme. Se aceptan criticas y mejoras al código. Muchas gracias.

13
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.