Capítulo 8. O recurso mais utilizado na Internet é sem dúvida o e-mail. Neste capítulo iremos tratar deste assunto com extrema facilidade.



Documentos relacionados
Capítulo 6. Delphi x Web x WebBroker. Primeiro Exemplo (Hello World)

Capítulo 7. Antes de prosseguir com o Delphi, devemos criar o banco de dados Interbase ou Firebird com todas as suas propriedades.

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

Capítulo 9. Desenvolvendo utilitários para Internet. Portas Abertas: Seja Bem-Vindo OBJETO. pntopo TPanel

MANUAL DO ANIMAIL Terti Software

EXEMPLO DE COMO FAZER UMA MALA DIRETA

Tutorial de Computação Introdução a Programação Gráfica em Lazarus Para MEC 1100 v

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

END OF FILE: Tutorial Chat Em Delphi

MANUAL DO INSTAR-MAIL 1.0. Pagina de login e senha do Instar-Mail

Entradas Digitais. PdP. Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006

Sistema básico de cadastro em Delphi com banco de dados InterBase.

Instalação e utilização do Document Distributor

Acessando um Banco de Dados

Instalando software MÉDICO Online no servidor

Acesso à Dados ZEOS x Delphi. Professor Anderson

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS

User Manager 1.0. edtusuario Nome do novo Usuário a ser criado edtsenha Senha do novo usuário Label

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO

S I S T E M A I R I S. Alarmes e Gestão de Serviços. Versão

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM

Curso de Informática Básica

ALUNES MANUAL DO USUÁRIO. Guia rápido Alunes

Microsoft Office PowerPoint 2007

Utilizamos um tema no Mais Fórmula 1 que possui algumas peculiaridades. Irei explicar passo-a-passo cada uma delas.

MANUAL PORTAL CLIENTE AVANÇO

Manual de usuário. do sistema multicálculo CotakWeb

Tutorial Mozilla Thunderbird 1.5

PROJECT 1 Delphi Project (Extensão. DPR)

s editores de s Como configurar contas de nos principais Como configurar contas de s nos principais editores de s

Como configurar s nos celulares. Ebook. Como configurar s no seu celular. W3alpha - Desenvolvimento e hospedagem na internet

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO

Tutoriais de apoio para a migração do Atualização: 30/04/2014

Apostila Site Personalizado

Manual de configuração do sistema

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

JobScheduler Empresa: Assunto: Responsável: Dados de Contato: Suporte: Comercial: Financeiro:

WORD. Professor: Leandro Crescencio Colégio Politécnico 1

CAPÍTULO 8 Conexões de banco de dados para programadores ASP.NET

Noções de. Microsoft SQL Server. Microsoft SQL Server

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Manual do Painel Administrativo

GUIA ENVIO DE EXTRATO POR

A licença é vinculada ao HD (Hard Disk) da máquina, esta não podendo ser substituída em caso de formatação ou perda de qualquer espécie do hardware.

Manual do Google agenda. criação e compartilhamento de agendas

Fortes Report Parte 1 Desenvolvendo o Primeiro Relatório

Vamos iniciar a nossa exploração do HTTP baixando um arquivo em HTML simples - bastante pequeno, que não contém objetos incluídos.

JDBC Java Database Connectivity

e-ouv Passo-a-passo Sistema de Ouvidorias do Poder Executivo Federal Junho, 2015 Controladoria-Geral da União

Manual do Instar Mail v2.0

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

Utilização do Webmail da UFS

criptografado Versão 1.0r0 de 18 de abril de 2013 Classificação: Corporativo

STK (Start Kit DARUMA) Utilizando conversor Serial/Ethernet com Mini-Impressora DR600/DR700.

Inserindo Dados no Banco de Dados Paradox.

Validando dados de páginas WEB

MANUAL DE INSTALAÇÃO

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

Como funciona? SUMÁRIO

MANUAL DE MEMBRO COMUNIDADE DO AMIGO

MALA DIRETA 2000 ACESSANDO O SISTEMA: 1 - Dê um clique no botão Iniciar do Windows para abrir o menu Iniciar.

Parte I. Demoiselle Mail

Microsoft Access XP Módulo Um

COMPARTILHAMENTO DO DISCO E PERMISSÕES DE REDE PÚBLICAS E DE GRUPOS DE TRABALHO.

Omega Tecnologia Manual Omega Hosting

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Obs: É necessário utilizar um computador com sistema operacional Windows 7.

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Manual do Ambiente Moodle para Professores

USANDO O ROUNDCUBE WEBMAIL

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

MANUAL DE UTILIZAÇÃO

GUIA EMISSÃO E ENVIO DE BOLETO BANCÁRIO POR

IP significa Internet Protocol. A Internet é uma rede, e assim como ocorre em qualquer tipo de rede, os seus nós (computadores, impressoras, etc.

Roteiro 2: (Planilhas Eletrônicas) - Função procv / manipulação de formulários

Configuração para o envio das cartas de atraso ou de aviso de vencimento

DarkStat para BrazilFW

ANEXO 01 GUIA PASSO A PASSO

FAÇA OS PASSOS ABAIXO PARA CADASTRAS AS SUAS CONTAS DE NO MICROSOFT OUTLOOK

Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web

TABELAS RELACIONADAS: CAPTURANDO VALOR DE OUTRA TABELA ATRAVÉS DE DBGRID

Adicionando Propriedades e Funcionalidades aos Componentes Parte II

Aula 03 - Projeto Java Web

Manual de criação de envios no BTG360

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

Delphi IDE. Jocélio Passos Delphi - IDE. Integrad Development Enviroment Ambiente de Desenvolvimento Integrado

STK (Start Kit DARUMA) Driver Genérico Somente Texto para a impressora DR700 ETHERNET

Scriptlets e Formulários

Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :

Manual do usuário (v 1.2.0) E-commerce

Manual de utilização do Zimbra

Como obter Ajuda. Mensagens do sistema. Acessar. Ícones do painel de controle

Lição 1 - Criação de campos calculados em consultas

1 Sumário O Easy Chat Conceitos Perfil Categoria Instalação O Aplicativo HTML...

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Material de apoio a aulas de Desenvolvimento Web. Tutorial Java WEB JSP & HTML & CSS & CLASSE & OBJETOS. AAS -

15/8/2007 Gerencia de Tecnologia da Informação Claudia M.S. Tomaz

A barra de menu a direita possibilita efetuar login/logout do sistema e também voltar para a página principal.

Transcrição:

Enviando E-mails 111 Capítulo 8 Enviando E-mails O recurso mais utilizado na Internet é sem dúvida o e-mail. Neste capítulo iremos tratar deste assunto com extrema facilidade. O Delphi 7 traz incorporado em sua biblioteca de componentes o famoso pacote INDY da empresa Nevrona (www.nevrona.com). Na versão 5, o Delphi trazia o pacote da empresa NETMasters que utilizava API do Windows para executar suas funções, e desde a versão 6, foi incluído o pacote INDY. O pacote da NetMasters era muito instável, devido aos inúmeros bugs tanto da parte da NETMasters, como também do Windows. A Nevrona adaptou seu excelente pacote (INDY) para o Kylix, baseado na tecnologia CLX. Com isso temos um excelente desempenho devido à engenharia do pacote. Neste capítulo iremos desenvolver um aplicativo para o envio de e-mails, utilizando os novos componentes da Nevrona. Este aplicativo está registrado na SourceForge com o nome de Mailing.NET em http://sourceforge.net/projects/mailingnet. A SourceForge é uma entidade responsável pelo gerenciamento de aplicações com código-fonte aberto, distribuídos sob a licença pública GNU. Um fator bastante importante deste projeto é que o mesmo poderá ser compilado em Kylix, pelo fato de ser baseado na tecnologia CLX. Início do Desenvolvimento Vamos iniciar um novo projeto CLX, e no formulário principal alterar as seguintes propriedades. TForm fmemail BorderWidth 5 Mailing.Net fmemail Vamos gravar a unit com o nome f_principal.pas e o projeto como MailingNet.DPR. Insira um objeto do tipo TPanel e altere as propriedades que seguem: 111

112 Delphi 7 Internet e Banco de Dados TPanel PnConfigura Align altop ((deixe em branco)) Height 180 PnConfigura Agora com o foco no formulário (objeto fmemail), insira um objeto do tipo TSplitter e altere as seguintes propriedades: TSplitter Splitter1 Align altop MinSize 30 O objeto TSplitter é utilizado para dividir seções de um formulário. Em nosso projeto, terá a função de separar as áreas de configuração e texto. Ainda com o foco no formulário insira outro objeto do tipo TPanel e altere as propriedades, como a seguir: TPanel PnTexto Align alclient (((deixe em branco))) PnTexto Repare que estamos na fase de desenvolvimento da interface do aplicativo. Claro que é uma tarefa um pouco cansativa devido ao grande número de objetos do formulário. Mas amigos, acreditem, vale a pena o pequeno esforço. Agora com o foco no objeto PnTexto, insira um objeto do tipo TMemo e altere as propriedades que seguem: TMemo textodoemail Align alclient Lines (((deixe em branco))) TextodoEmail Vamos dar uma pausa e observar como está ficando nosso aplicativo. A figura 8.1 ilustra esse grande momento.

Enviando E-mails 113 Figura 8.1 Fase inicial do Mailing.Net Dando continuidade ao nosso projeto, vamos inserir os objetos que seguem dentro do painel PnConfigura. Para facilitar, colocamos em destaque a seção em que se encontra o referido objeto. Exemplo: [Standard]. TLabel [Standard] Texto Left 17 Top 19 TLabel [Standard] Assunto Left 17 Top 51 TEdit [Standard] Left 96 edtexto Text (((deixe em branco))) Top 16 Width 320

114 Delphi 7 Internet e Banco de Dados TEdit [Standard] Left 96 edassunto Text (((deixe em branco))) Top 46 Width 320 TSpeedButton [Additional] >> Flat True Left 420 btarquivo Top 16 Width 23 TButton [Standard] Envia Left 468 btenvia Top 85 Width 75 Ainda com o foco no objeto PnConfigura, insira um objeto do tipo TGroupBox e altere as propriedades que seguem: TGroupBox [Standard] Configuração Servidor SMTP Height 90 Left 16 gbconfigura Top 80 Width 425 Agora vamos suar a camisa e inserir alguns objetos dentro do container GbConfigura. Vamos ao batalhão de objetos do container GbConfigura.

Enviando E-mails 115 TLabel [Standard] Host Left 16 Top 20 TLabel [Standard] Usuário Left 16 Top 44 TLabel [Standard] Conta Left 16 Top 69 TLabel [Standard] Porta Left 327 Top 20 TLabel [Standard] Senha Left 176 Top 44 TEdit [Standard] Color claqua Left 63

116 Delphi 7 Internet e Banco de Dados Text Top 16 Width 250 edhost coloque o endereço do seu servidor SMTP. Exemplo: smtp.provedor.com.br TEdit [Standard] Color claqua Left 63 edusuario Text Top 40 Width 106 TMaskEdit [Additional] coloque o usuário de sua conta SMTP. Exemplo: seunome Color claqua Left 216 PassWordChar * edsenha Text coloque a senha do usuário da conta de SMTP. Exemplo: suasenha Top 40 Width 97 TEdit [Standard] Color claqua Left 63 edconta Text Top 16 Width 250 coloque o endereço da conta de SMTP. Exemplo: seunome@provedor.com.br

Enviando E-mails 117 TMaskEdit [Additional] Color claqua EditMask 9999;1; Left 368 edporta Text 25 Top 16 Width 48 Puxa, ainda bem que esta parte acabou. Acredito que todos se cansaram, mas temos um belo formulário para envio de e-mails. A figura 8.2 ilustra o nosso formulário neste momento. Detalhes do Projeto Figura 8.2 Fase final do design do formulário Antes de prosseguirmos com o projeto, vamos conhecê-lo melhor. O Mailing.Net utiliza como base o mesmo banco de dados no padrão Interbase empregado no capítulo 7. Na realidade utilizamos apenas dois campos da tabela de clientes: razao_social e email. O campo razao_social será utilizado para substituir uma tag em nosso aplicativo e o campo email para compor o destinatário. O mais interessante neste aplicativo é o uso do objeto TDataSetPageProducer, normalmente utilizado no desenvolvimento de aplicações Web, como vimos nos capítulos anteriores. Além disso, iremos utilizar um arquivo externo no padrão HTML para relacionar com o objeto TMemo. Insira um objeto do tipo TSQLConnection, e crie uma nova conexão clicando no botão +. Altere as seguintes propriedades.

118 Delphi 7 Internet e Banco de Dados TSQLConnection BancoDados Driver Interbase CommitRetaining True DataBase localhost:c:/cursoweb /clientes.gdb SQLDialect 3 LoginPrompt False BancoDados Insira um objeto do tipo TSQLDataSet e altere as propriedades que seguem: TSQLDataSet tbclientes tbclientes SQLConnection BancoDados CommandText select * from tbclientes Codificando o botão btarquivo O objeto btarquivo será responsável por carregar um arquivo externo (HTML) no objeto TextodoEmail. Para nos auxiliar nesta tarefa, necessitamos de outro objeto: TOpenDialog. Insira um objeto do tipo TOpenDialog e altere as propriedades que seguem: TOpenDialog AbrirArquivo AbrirArquivo Agora vamos inserir o código do botão btarquivo no evento OnClick do mesmo. procedure TfmeMail.btArquivoClick(Sender: TObject); if AbrirArquivo.Execute then EdTexto:=AbrirArquivo.File; // Zera O TextodoEmail TextodoEmail.Clear; // Associa o Arquivo Texto/HTML com o // objeto TextodoEmail TextodoEmail.Lines.LoadFromFile(edTexto.Text);

Enviando E-mails 119 Vamos estudar o código em detalhe: if AbrirArquivo.Execute then Esta linha verifica se o método Execute do objeto AbrirArquivo foi executado com êxito, ou seja, indaga se o usuário selecionou algum arquivo. EdTexto.Text:=AbrirArquivo.File; Associa o nome do arquivo selecionado no objeto AbrirArquivo ao objeto EdTexto. O método Clear limpa o conteúdo do objeto TextodoEmail. TextodoEmail.Clear; TextodoEmail.Lines.LoadFromFile(edTexto.Text); Aqui estamos carregando (LoadFromFile) o arquivo (edtexto.text) dentro do objeto TextodoEmail. Em resumo, poderemos digitar o texto ou então carregar um arquivo previamente criado. Falando mais um pouco dos objetos INDY Um dos grandes problemas da biblioteca NetMasters (utilizada até a versão 5 do Delphi) era o congelamento (Freeze) da aplicação em diversos momentos: na conexão, desconexão, entre outros, invariavelmente. A biblioteca da Nevrona (INDY) traz um componente que trata especificamente deste problema: IdAntiFreeze. Sua principal função é priorizar as tarefas da aplicação, evitando o efeito Freeze. Na realidade ele cria um processo, otimizando as tarefas relacionadas a objetos INDY. Vamos inserir um objeto do tipo TIdAntiFreeze, localizado na seção Indy Misc. Não é necessário alterar as propriedades deste objeto. Agora iremos inserir o objeto considerado coração da nossa aplicação: TIdSMTP, localizado na seção Indy Clients. Insira um objeto do tipo TIdSMTP em nosso projeto. Iremos codificar as propriedades deste objeto em tempo de execução. O objeto TidSMTP realiza a conexão da nossa aplicação Cliente com o servidor SMTP, responsável pela entrega dos e-mails. Na realidade, nosso aplicativo apenas envia os e-mails para um servidor SMTP e o mesmo se encarrega de distribuí-los. Poderíamos criar um servidor SMTP próprio que enviaria diretamente os e-mails, mas devido à complexidade do caso, ficaremos com o exemplo mais simples. Vamos continuar com o nosso projeto. Insira um objeto do tipo TIdMessage, localizado na seção Indy Misc, e altere as propriedades que seguem: TIdMessage Mensagem ContentType text/html Mensagem Repare que a propriedade ContentType refere-se ao tipo MIME da mensagem, ou seja, o tipo de seu conteúdo. Configuramos para text/html para que as mensagens sejam enviadas com o padrão HTML ou texto (o padrão HTML predomina por conter recursos de formatação). Agora, amigos, iremos trabalhar com o nosso curinga : TDataSetPageProducer. Como visto nos capítulos anteriores, o objeto TDataSetPageProducer é responsável pela substituição automática de Tags transparentes relacionadas aos campos do DataSet vinculado.

120 Delphi 7 Internet e Banco de Dados Insira um componente do tipo TDataSetPageProducer e altere as propriedades que seguem: TDataSetPageProducer ppmensagem DataSet tbclientes ppmensagem Vejamos alguns exemplos da funcionalidade do nosso curinga. Prezado(a) <#RAZAO_SOCIAL>, Estamos enviando este boletim para o seu email<br> <#EMAIL>.... Em tempo de execução teremos: Prezado(a) Emerson Facunte, Estamos enviando este boletim para o seu email emerson@facunte.com.br O interessante é que podemos inserir quantas Tags forem necessárias, em qualquer posição. Vejamos outro exemplo: Prezado(a) <#RAZAO_SOCIAL>, Como cliente preferencial, você tem 10% de desconto em qualquer produto de nossa loja. Entretanto, Sr(a) <#RAZAO_SOCIAL>, esta oferta é por tempo limitado. Amigos, como observamos nos capítulos anteriores, poderemos produzir documentos HTML com ferramentas de terceiros, como DreamWeaver da Macromedia. Com isso teremos um e-mail mais elegante. Bem, finalmente vamos codificar o nosso glorioso botão btenvia. Insira o código que segue no evento OnClick do objeto btenvia. procedure TfmeMail.btEnviaClick(Sender: TObject); // Configura Cliente idsmtp1.userid:=edusuario.text; idsmtp1.password:=edsenha.text; idsmtp1.host:=edhost.text; idsmtp1.port:=strtoint(edporta.text); // Atribui o Conteudo do objeto TextodoEmail // ao objeto PPMensagem ppmensagem.htmldoc:=textodoemail.lines;

Enviando E-mails 121 // Abre a tabela Clientes tbclientes.open; tbclientes.first; // Conecta ao Servidor SMTP idsmtp1.connect; try with Mensagem do // Atribui o conteúdo do edassunto // ao objeto Mensagem.Subject Subject:=edAssunto.Text; // Atribui o conteúdo do edconta // ao objeto Mensagem.From.Text From.Text:=edConta.Text; // inicia o laço while not(tbclientes.eof) do // Atribui o conteúdo do campo EMAIL // ao objeto Mensagem.Recipients.EmailAddresses Recipients.EMailAddresses:=tbClientes.FieldBy('EMAIL').Value; ReceiptRecipient.Address:=tbClientes.FieldBy('EMAIL').Value; // Atribui o conteúdo do objeto ppmensagem // ao objeto Mensagem.Body.Text Body.Text:=ppMensagem.Content; // Envia a mensagem idsmtp1.send(mensagem); // Próximo registro tbclientes.next; // laço // with Mensagem finally // Disconecta Servidor idsmtp1.disconnect; Vamos analisar com cuidado este código. No primeiro bloco, estamos configurando o Cliente SMTP através do nosso objeto idsmtp1. // Configura Cliente idsmtp1.userid:=edusuario.text; idsmtp1.password:=edsenha.text; idsmtp1.host:=edhost.text; idsmtp1.port:=strtoint(edporta.text); Repare que estamos configurando o usuário da conta UserId, a senha Password, o HOST e a porta de conexão (Port). O bloco seguinte atribui o conteúdo do objeto TextodaMensagem ao objeto PPMensagem.

122 Delphi 7 Internet e Banco de Dados // Atribui o Conteudo do objeto TextodoEmail // ao objeto PPMensagem ppmensagem.htmldoc:=textodoemail.lines; A propriedade HTMLDoc armazena um documento para ser processado pelo próprio objeto. O bloco que segue abre a tabela de Clientes e posiciona o ponteiro no primeiro registro: // Abre a tabela Clientes tbclientes.open; tbclientes.first; O bloco a seguir conecta o objeto idsmtp1 ao servidor de SMTP. // Conecta ao Servidor SMTP idsmtp1.connect; Agora estamos protegendo o código seguinte com o comando Try/Except/Finally. Em seguida estamos atribuindo o assunto da mensagem e o responsável pelo envio da mesma. with Mensagem do // Atribui o conteudo do edassunto // ao objeto Mensagem.Subject Subject:=edAssunto.Text; // Atribui o conteudo do edconta // ao objeto Mensagem.From.Text From.Text:=edConta.Text; Como as mensagens são enviadas uma a uma, fizemos um laço percorrendo toda a tabela de Clientes. while not(tbclientes.eof) do Neste ponto estamos configurando o e-mail destino. // Atribui o conteudo do campo EMAIL // ao objeto Mensagem.Recipients.EmailAddresses Recipients.EMailAddresses:=tbClientes.FieldBy('EMAIL').Value; ReceiptRecipient.Address:=tbClientes.FieldBy('EMAIL').Value; Chegamos ao ponto mais interessante do nosso projeto. Neste bloco estamos associando o resultado do ppmensagem ao corpo da mensagem do objeto Mensagem. Quando chamamos o método Content, ativamos o processamento das informações contidas na propriedade HTMLDOC do objeto. // Atribui o conteúdo do objeto ppmensagem // ao objeto Mensagem.Body.Text Body.Text:=ppMensagem.Content; E finalmente enviamos a mensagem. // Envia a mensagem idsmtp1.send(mensagem); Bem, amigos, acredito que agora basta usar a imaginação para enviar os e-mails de maneira personalizada. Com isso concluímos nosso projeto de envio de e-mails, e de quebra refrescamos nossas idéias com um novo tipo de aplicação.

Enviando E-mails 123 Figura 8.3 MailingNet em ação Listagem 8.1 Código completo do Mailing Net unit f_principal; interface uses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QButtons, QMask, DBXpress, FMTBcd, DB, SqlExpr, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, IdMessage, HTTPApp, HTTPProd, DSProd, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP; type TfmeMail = class(tform) PnConfigura: TPanel; Splitter1: TSplitter; pntexto: TPanel; TextodoEmail: TMemo; Label1: TLabel; Label2: TLabel; edtexto: TEdit; edassunto: TEdit; btarquivo: TSpeedButton; btenvia: TButton; gbconfigura: TGroupBox; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; edhost: TEdit; edusuario: TEdit; edconta: TEdit; Label7: TLabel; edsenha: TMaskEdit; edporta: TMaskEdit; BancoDados: TSQLConnection; tbclientes: TSQLDataSet; AbrirArquivo: TOpenDialog;

124 Delphi 7 Internet e Banco de Dados IdAntiFreeze1: TIdAntiFreeze; Mensagem: TIdMessage; ppmensagem: TDataSetPageProducer; IdSMTP1: TIdSMTP; procedure btarquivoclick(sender: TObject); procedure btenviaclick(sender: TObject); private { Private declarations } public { Public declarations } var fmemail: TfmeMail; implementation {$R *.xfm} procedure TfmeMail.btArquivoClick(Sender: TObject); if AbrirArquivo.Execute then EdTexto.Text:=AbrirArquivo.File; // Zera O TextodoEmail TextodoEmail.Clear; // Associa o Arquivo Texto/HTML com o objeto // TextodoEmail TextodoEmail.Lines.LoadFromFile(edTexto.Text); procedure TfmeMail.btEnviaClick(Sender: TObject); // Configura Cliente idsmtp1.userid:=edusuario.text; idsmtp1.password:=edsenha.text; idsmtp1.host:=edhost.text; idsmtp1.port:=strtoint(edporta.text); // Atribui o Conteudo do objeto TextodoEmail // ao objeto PPMensagem ppmensagem.htmldoc:=textodoemail.lines; // Abre a tabela Clientes tbclientes.open; tbclientes.first; // Conecta ao Servidor SMTP idsmtp1.connect; try with Mensagem do

Enviando E-mails 125 // Atribui o conteudo do edassunto // ao objeto Mensagem.Subject Subject:=edAssunto.Text; // Atribui o conteudo do edconta // ao objeto Mensagem.From.Text From.Text:=edConta.Text; // inicia o laço while not(tbclientes.eof) do // Atribui o conteudo do campo EMAIL // ao objeto Mensagem.Recipients.EmailAddresses Recipients.EMailAddresses:=tbClientes.FieldBy('EMAIL').Value; ReceiptRecipient.Address:=tbClientes.FieldBy('EMAIL').Value; // Atribui o conteúdo do objeto ppmensagem // ao objeto Mensagem.Body.Text Body.Text:=ppMensagem.Content; // Envia a mensagem idsmtp1.send(mensagem); // Próximo registro tbclientes.next; // laço // with Mensagem finally // Disconecta Servidor idsmtp1.disconnect; end.

126 Delphi 7 Internet e Banco de Dados Anotações de Dúvidas? Preciso Revisar Anotações Gerais