Nuevo

Enviar mensajes de correo electrónico (y archivos adjuntos) con Delphi e Indy

Enviar mensajes de correo electrónico (y archivos adjuntos) con Delphi e Indy

A continuación hay instrucciones para crear un "remitente de correo electrónico" que incluye una opción para enviar mensajes de correo electrónico y archivos adjuntos directamente desde una aplicación de Delphi. Antes de comenzar, considere la alternativa ...

Suponga que tiene una aplicación que funciona con algunos datos de la base de datos, entre otras tareas. Los usuarios necesitan exportar datos desde su aplicación y Enviar los datos a través de un correo electrónico (como un informe de error). Sin el enfoque que se describe a continuación, debe exportar los datos a un archivo externo y luego usar un cliente de correo electrónico para enviarlos.

Envío de correo electrónico desde Delphi

Hay muchas formas de enviar un correo electrónico directamente desde Delphi, pero la forma más sencilla es usar la API ShellExecute. Esto enviará el correo electrónico utilizando el cliente de correo electrónico predeterminado instalado en la computadora. Si bien este enfoque es aceptable, no puede enviar archivos adjuntos de esta manera.

Otra técnica utiliza Microsoft Outlook y OLE para enviar el correo electrónico, esta vez con compatibilidad con archivos adjuntos, pero se requiere usar MS Outlook.

Otra opción es usar el soporte integrado de Delphi para la API de Windows Simple Mail. Esto funciona solo si el usuario tiene instalado un programa de correo electrónico compatible con MAPI.

La técnica que estamos discutiendo aquí utiliza componentes Indy (Internet Direct): un excelente conjunto de componentes de Internet compuesto por protocolos populares de Internet escritos en Delphi y basados ​​en enchufes de bloqueo.

El método TIdSMTP (Indy)

Enviar (o recuperar) mensajes de correo electrónico con componentes de Indy (que se incluye con Delphi 6+) es tan fácil como colocar uno o dos componentes en un formulario, configurar algunas propiedades y "hacer clic en un botón".

Para enviar un correo electrónico con archivos adjuntos de Delphi usando Indy, necesitaremos dos componentes. Primero el TIdSMTOP se utiliza para conectarse y comunicarse (enviar correo) con un servidor SMTP. En segundo lugar, el TIdMessage maneja el almacenamiento y la codificación de los mensajes.

Cuando se construye el mensaje (cuando TIdMessageestá "lleno" de datos), el correo electrónico se entrega a un servidor SMTP utilizando el TIdSMTP.

Código fuente del remitente del correo electrónico

He creado un proyecto simple de remitente de correo que explico a continuación. Puede descargar el código fuente completo aquí.

Nota: Ese enlace es una descarga directa al archivo ZIP del proyecto. Debería poder abrirlo sin problemas, pero si no puede, use 7-Zip para abrir el archivo y poder extraer los archivos del proyecto (que se almacenan en una carpeta llamada Enviar correo).

Como puede ver en la captura de pantalla en tiempo de diseño, para enviar un correo electrónico utilizando TIdSMTP componente, al menos debe especificar el servidor de correo SMTP (host). El mensaje en sí necesita que se completen las partes normales del correo electrónico, como el Desde, A, Temaetc.

Aquí está el código que maneja el envío de un correo electrónico con un archivo adjunto:

procedimiento TMailerForm.btnSendMailClick (Remitente: TObject); empezar StatusMemo.Clear;// configurar SMTP SMTP.Host: = ledHost.Text; Puerto SMTP: = 25;// configurar mensaje de correo MailMessage.From.Address: = ledFrom.Text; MailMessage.Recipients.EMailAddresses: = ledTo.Text + ',' + ledCC.Text; MailMessage.Subject: = ledSubject.Text; MailMessage.Body.Text: = Body.Text;Si FileExists (ledAttachment.Text) luego TIdAttachment.Create (MailMessage.MessageParts, ledAttachment.Text);//enviar correo   tratar     tratar SMTP.Connect (1000); SMTP.Send (MailMessage);excepto en E: Excepción de StatusMemo.Lines.Insert (0, 'ERROR:' + E.Message);fin;   finalmente     Si SMTP conectado luego SMTP.Disconnect;fin; fin; (* btnSendMail Click *)

Nota: Dentro del código fuente, encontrará dos procedimientos adicionales que se utilizan para hacer los valores de Anfitrión, Desdey A editar cuadros persistentes, utilizando un archivo INI para el almacenamiento.