Enviando e-mails com anexos usando Delphi e Indy

Abaixo estão as instruções para criar um "remetente de email" que inclui uma opção para enviar mensagens de email e anexos diretamente de um aplicativo Delphi. Antes de começar, considere a alternativa ...

Suponha que você tenha um aplicativo que opere em alguns dados do banco de dados, entre outras tarefas. Os usuários precisam exportar dados do seu aplicativo e envie os dados por e-mail (como um relatório de erro). Sem a abordagem descrita abaixo, você deve exportar os dados para um arquivo externo e, em seguida, usar um cliente de email para enviá-los.

Enviando email do Delphi

Existem várias maneiras de enviar um email diretamente do Delphi, mas a maneira mais simples é usar o ShellExecute API. Isso enviará o email usando o cliente de email padrão instalado no computador. Embora essa abordagem seja aceitável, você não poderá enviar anexos dessa maneira.

Outra técnica usa o Microsoft Outlook e OLE para enviar o email, desta vez com suporte a anexos, mas é necessário que o MS Outlook seja usado.

instagram viewer

Outra opção é usar o suporte interno do Delphi para a API do Windows Simple Mail. Isso funciona apenas se o usuário tiver um programa de email compatível com MAPI instalado.

A técnica que estamos discutindo aqui usa Indy Componentes (Internet Direct) - um ótimo conjunto de componentes da Internet composto por protocolos populares da Internet, escritos em Delphi e baseados em soquetes de bloqueio.

O método TIdSMTP (Indy)

Enviar (ou recuperar) mensagens de email com componentes Indy (fornecidos com o Delphi 6+) é tão fácil quanto soltar um componente ou dois em um formulário, definir algumas propriedades e "clicar em um botão".

Para enviar um email com anexos do Delphi usando o Indy, precisaremos de dois componentes. Primeiro, o TIdSMTOP é usado para conectar e se comunicar (enviar email) com um servidor SMTP. Segundo, o TIdMessage lida com o armazenamento e codificação das mensagens.

Quando a mensagem é construída (quando TIdMessage é "preenchido" com dados), o email é entregue a um servidor SMTP usando o TIdSMTP.

Código-fonte do remetente do email

Eu criei um projeto simples de remetente de email que explico abaixo. Você pode baixar o código fonte completo aqui.

Nota: Esse link é um download direto para o arquivo ZIP do projeto. Você deve poder abri-lo sem problemas, mas se não puder, use 7-Zip para abrir o arquivo morto para extrair os arquivos do projeto (armazenados em uma pasta chamada Enviar correio).

Como você pode ver na captura de tela em tempo de design, para enviar um email usando o TIdSMTP componente, você precisa pelo menos especificar o servidor de email SMTP (host). A própria mensagem precisa das partes regulares do email preenchidas, como as A partir de, Para, Sujeitoetc.

Aqui está o código que lida com o envio de um email com um anexo:

procedimento TMailerForm.btnSendMailClick (Sender: TObject); início StatusMemo. Claro; // configuração SMTP SMTP.Host: = ledHost. Texto; SMTP.Port: = 25; // configurar mensagem de correio MailMessage. A partir de. Endereço: = ledFrom. Texto; MailMessage. Destinatários. EMailAddresses: = ledTo. Texto + ',' + ledCC.Text; MailMessage. Assunto: = ledSubject. Texto; MailMessage. Corpo. Texto: = Corpo. Texto; E se FileExists (ledAttachment. Texto) então TIdAttachment. Criar (MailMessage. MessageParts, ledAttachment. Texto); //enviar correioexperimentarexperimentar SMTP.Connect (1000); SMTP.Send (MailMessage); excetoem E: Exceção sim. StatusMemo. Linhas. Inserir (0, 'ERRO:' + E.Message); fim; finalmenteE se SMTP.Connected então SMTP.Disconnect; fim; fim; (* btnSendMail Clique *)

Nota: Dentro do código-fonte, você encontrará dois procedimentos extras que são usados ​​para definir os valores dos Hospedeiro, A partir dee Para caixas de edição persistentes, usando um arquivo INI para armazenamento.

instagram story viewer