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 utilizar el ShellExecute API 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í usa Indy Componentes (Internet directo): 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 TIdMessage está "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 están almacenados 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. Claro; // configurar SMTP SMTP.Host: = ledHost. Texto; Puerto SMTP: = 25; // configurar mensaje de correo MailMessage. Desde. Dirección: = ledFrom. Texto; MailMessage. Destinatarios EMailAddresses: = ledTo. Texto + ',' + ledCC.Text; MailMessage. Asunto: = ledSubject. Texto; MailMessage. Cuerpo. Texto: = Cuerpo. Texto; Si FileExists (ledAttachment. Texto) luego TIdAttachment. Crear (MailMessage. MessageParts, ledAttachment. Texto); //enviar correotratartratar SMTP.Connect (1000); SMTP.Send (MailMessage); exceptoen E: Excepción do. StatusMemo. Líneas. Insertar (0, 'ERROR:' + E.Message); final; finalmenteSi SMTP conectado luego SMTP.Disconnect; final; final; (* 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.