Módulo 5
Trabalhando com E-mails
Neste módulo estaremos aprendendo a utilizar duas das mais importantes tags incorporadas no Cold Fusion, a <CFMAIL> e a <CFPOP>. Estas tags realizam toda a interface com os servidores de e-mail, possibilitando o envio e recebimento de e-mails através de aplicações ColdFusion.
Como muitos já devem saber, os servidores de e-mail trabalham com dois protocolos padrões para transacionar um e-mail. São eles o SMTP (Simple Mail Transfer Protocol) e o POP (Post Office Protocol), o primeiro responsável pelo envio de mensagens, e o segundo pelo recebimento de mensagens.
Para começarmos a trabalhar com e-mails iremos ver como fazer para enviá-los.
Enviando E-mails com CFMAIL
Em muitas aplicações criadas poderemos estar querendo informar ao usuário, através do e-mail, qualquer resultado, alteração ou informação ocorridas, para isso utilizaremos esta tag. Sendo bastante flexível a tag CFMAIL permite gerar e-mails dinâmicos. Seu uso é semelhante ao da tag CFOUTPUT, sua diferença é que ao invés de gerar texto, é gerado uma mensagem de e-mail no padrão SMTP.
Antes de iniciarmos a construção de uma aplicação utilizando esta tag, é necessário que se configure o acesso a um servidor de e-mail no Administrador do ColdFusion (ColdFusion Application Server).
Para isso faça:
- Abra o Cold Fusion Administrator
- Na seção Miscellaneous clique na opção Mail
- No campo Mail Server coloque o seu servidor de e-mail
- Deixe os campos Port e Connection Timeout com os valores padrões
- Clique no botão Apply para salvar a configuração
Agora que já configuramos o servidor de e-mail, veremos alguns atributos da tag CFMAIL que nos ajudarão a desenvolver nossas aplicações.
| Atributo | Descrição |
|---|---|
| TO | Obrigatório. Nele você irá colocar o e-mail do destinatário |
| FROM | Obrigatório. Aqui você irá colocar o e-mail do remetente |
| CC | Opcional. Como nos programas de e-mail, este parâmetro permite enviar e-mails para mais de um destinatário |
| BCC | Opcional. Permite o envio para mais de um e-mail sem que os demais destinatários saibam da existência dos demais e-mails. |
| SUBJECT | Obrigatório. O assunto do e-mail. |
| TYPE | Opcional. Caso você deseje mandar um e-mail no formato HTML, deve especificar este parâmetro (TYPE=”HTML”) |
| MIMEATTACH | Opcional. Especifica o caminho para o arquivo a ser anexado junto a mensagem. |
| QUERY | Opcional. Indica qual o nome da query a qual você deseja obter dados. |
| MAXROWS | Opcional. Especifica o máximo de e-mails que você quer mandar |
| STARTROW | Opcional. Especifica em qual linha da query deve iniciar os envios de e-mails |
Enviando e-mail baseado em um formulário
Como a tag CFMAIL é bem flexível, ela permite que enviemos um e-mail através dos dados enviados por um formulário. Aquie veremos como enviar um e-mail utilizando esta propriedade.
Primeiro vamos criar o formulário:
form_email.cfm<HTML>
<HEAD>
<TITLE>Envio de E-mail através de formulário</TITLE>
</HEAD>
<BODY>
<FORM METHOD=”POST” ACTION=”envia_email.cfm”>
Nome: <INPUT TYPE=”TEXT” NAME=”nome”><BR>
E-mail: <INPUT TYPE=”TEXT” NAME=”email”><BR>
Empresa: <INPUT TYPE=”TEXT” NAME=”empresa”><BR>
Mensagem:<BR>
<TEXTAREA NAME=“mensagem” COLS=”50” ROWS=”5”></TEXTAREA><BR>
<INPUT TYPE=SUBMIT VALUE=”Enviar”>
</FORM>
</BODY>
</HTML>
Agora veremos como montar o envio do e-mail:
enviar_email.cfm<CFMAIL FROM=”suporte@coldfusionbrasil.com.br” TO=”#Form.email#”
SUBJECT=”Tutorial Módulo 5”>
Nome: #Form.nome#
Empresa: #Form.empresa#
Mensagem:
#Form.mensagem#
</CFMAIL>
<HTML>
<HEAD>
<TITLE>Envio de E-mail através de formulário</TITLE>
</HEAD>
<BODY>
<FONT SIZE=3>E-mail enviado com sucesso!</FONT>
</BODY>
</HTML>
Utilizando query para enviar e-mails
Podemos utilizar uma query no envio de e-mails se por exemplo desejamos enviar um relatório de vendas para a diretoria da empresa. Vamos criar agora a query e o envio deste e-mail:
relatorio_email.cfm<CFQUERY DATASOURCE=”Vendas” NAME=”Relatorio”>
SELECT cod_prod, nome_prod, preco_prod, qtde_venda from VENDAS
</CFQUERY>
<CFMAIL QUERY=”Relatorio” FROM=”webmaster@empresa.com.br”
TO=”diretoria@empresa.com.br” SUBJECT=”Relatório de Vendas”>
Caros Srs.,
Segue o relatório de vendas:
<CFOUTPUT>
#cod_prod# - #nome_prod# - #preco_prod# - #qtde_venda#
</CFOUTPUT>
Atenciosamente,
WebMaster
</CFMAIL>
Enviando e-mail para múltiplos destinatários
Podemos enviar através de uma query um e-mail para múltiplos destinatários. No exemplo a seguir, mostraremos como mandar um aviso para todos os setores de uma mesma empresa.
aviso_email.cfm<CFQUERY DATASOURCE=”Empresa” NAME=”Aviso”>
SELECT email from SETORES
</CFQUERY>
<CFMAIL QUERY=”Aviso” FROM=”gerencia@empresa.com.br”
TO=”#email#” SUBJECT=”Aviso n. 1”>
AVISO
Todos os setores devem mandar seus relatórios até no máximo 25/07
A Gerência
</CFMAIL>
Enviando arquivos anexados ao e-mail
O Cold Fusion também permite o envio de arquivos anexados por e-mail. Veremos abaixo como devemos proceder para fazer isto.
arquivo_email.cfm<CFMAIL FROM=”info@empresa.com.br” TO=”desenvolvimento@empresa.com.br”
SUBJECT=”Arquivo Requisitado” MIMEATTACH=”C:\MANUAL.DOC”>
Segue anexado o Manual requisitado.
</CFMAIL>
Recebendo E-mails com CFPOP
Já sabemos como devemos proceder para inserir envio de e-mails em nossas aplicações, agora iremos ver como funciona a situação inversa, ou seja, como receber e-mails. A tag CFPOP além de permitir o recebimento de mensagens, permite também que as mensagens sejam apagadas do servidor.
Para conhecermos melhor está tag, abaixo veremos alguns de seus atributos:
| Atributo | Descrição |
|---|---|
| SERVER | Obrigatório. O nome Host ou endereço IP do servidor POP |
| USERNAME | Opcional. Identifica o nome da conta de usuário, se não especificado é criada uma conexão anônima (anonymous) |
| PASSWORD | Opcional. A senha da conta de usuário |
| ACTION | Opcional. Especifica a ação no servidor. Existem três possibilidades: - GetHeaderOnly – (Padrão) Retorna apenas o cabeçalho da mensagem - GetAll – Retorna todas as informações da mensagem - Delete – Apaga a mensagem do servidor POP |
| NAME | Obrigatório para as ações “GetHeaderOnly” e “GetAll”, especifica o nome query |
| MESSAGENUMBER | Obrigatório para a ação “Delete” |
| ATTACHMENTPATH | Opcional. Permite anexos serem escritos para um diretório especifico na ação “GetAll”. |
| MAXROWS | Opcional. Especifica o máximo de e-mails que você quer visualizar |
| STARTROW | Opcional. Especifica em qual linha deve iniciar os e-mails. Essa opção é ignorada se o atributo MESSAGENUMBER for especificado. |
Variáveis Query CFPOP
A tag CFPOP também tem algumas variáveis específicas, que irão nos fornecer o total de mensagens no servidor, data, e-mail do remetente e destinatário, assunto, mensagem e outros. Essas variáveis são especificadas através de seu nome query (atributo NAME). Veremos agora algumas delas:
| Variável | Descrição |
|---|---|
| nome_query.RecordCount | Mostra o total de e-mails |
| nome_query.CurrentRow | Mostra o número do e-mail que está sendo processado no momento |
| As variáveis a seguir são usadas somente para as ações “GetHeaderOnly” e “GetAll” | |
| nome_query.date | Mostra a data do e-mail |
| nome_query.from | Mostra o e-mail do remetente |
| nome_query.messagenumber | Mostra o número do e-mail |
| nome_query.subject | Mostra o assunto |
| nome_query.to | Mostra o e-mail do destinatário |
| As variáveis abaixo são usadas somente com a ação “GetAll” | |
| nome_query.body | Mostra a mensagem |
| nome_query.header | Mostra o cabeçalho da mensagem |
| nome_query.attachments | Mostra o nome dos arquivos anexados |
| nome_query.attachmentfiles | Mostra o nome do arquivo mais o caminho especificado no atributo ATTACHMENTPATH |
Recebendo cabeçalho de mensagens
Em algumas aplicações pode ser interessante apenas saber algumas poucas informações sobre os e-mails existentes no servidor, e é isto que veremos aqui.
Utilizaremos a ação GetHeaderOnly para obtermos apenas o cabeçalhos das mensagens.
cabecalho_email.cfm<CFPOP SERVER=”127.0.0.1” USERNAME=”teste“ PASSWORD=”77%%88”
ACTION=GetHeaderOnly NAME=”Teste”>
<CFOUTPUT QUERY=”teste”>
De: #teste.to#<BR>
Para: #teste.from#<BR>
Assunto: #teste.subject#<BR>
Data: #teste.date#<BR>
</CFOUTPUT>
Recebendo mensagens completas
Agora iremos ver como procederemos para receber e-mail por completo, incluindo o corpo e arquivos anexados.
completo_email.cfm<CFPOP SERVER=”127.0.0.1” USERNAME=”teste“ PASSWORD=”77%%88”
ACTION=GetAll ATTACHMENTPATH=”c:\anexos” NAME=”Teste”>
<CFOUTPUT QUERY=”teste”>
N. Mensagem: #teste.messagenumber#<BR>
De: #teste.to#<BR>
Para: #teste.from#<BR>
Assunto: #teste.subject#<BR>
Data: #teste.date#<BR>
Anexo: #teste.attachments#<BR>
</CFOUTPUT>
Apagando mensagens
Apagar um mensagem do servidor pode ser muito útil, já que por padrão elas não são apagadas do servidor POP. Para isto utilizamos a ação “Delete” junto com o atributo MessageNumber.
apaga_email.cfm<CFPOP SERVER=”127.0.0.1” USERNAME=”teste“ PASSWORD=”77%%88”
ACTION=Delete MESSAGENUMBER=”1”>
Utilizando CFPOP de forma dinâmica
Como em muitas outras tags, a CFPOP permite que sejam colocados valores dinâmicos, que podem ser passados através de um formulário ou uma query. Um caso muito comum para se utilizar um formulário é no caso de se passar o Username e o Password através deles, já que por medidas de segurança não é recomendável que os mesmos fiquem aparentes na aplicação. Vamos ver agora um exemplo desses:
login_email.cfm<HTML>
<HEAD>
<TITLE>Verificando e-mails</TITLE>
</HEAD>
<BODY>
<FORM METHOD=”POST” ACTION=”verifica_email.cfm”>
Username: <INPUT TYPE=”TEXT” NAME=”username”><BR>
Password: <INPUT TYPE=”PASSWORD” NAME=”password”><BR>
Empresa: <INPUT TYPE=”TEXT” NAME=”empresa”><BR>
<INPUT TYPE=SUBMIT VALUE=”Verificar”>
</FORM>
</BODY>
</HTML>
verifica_email.cfm<CFPOP SERVER=”127.0.0.1” USERNAME=”#form.username#“
PASSWORD=”#form.password#” ACTION="GetAll" NAME=”Teste”>
<CFOUTPUT QUERY=”teste”>
N. Mensagem: #teste.messagenumber#<BR>
De: #teste.to#<BR>
Para: #teste.from#<BR>
Assunto: #teste.subject#<BR>
Data: #teste.date#<BR>
</CFOUTPUT>
Criando Formulários com maior funcionalidade
O ColdFusion permite que sejam construídos formulários com controles customizados CFM que dispõe de uma melhor funcionalidade do que o formulário padrão do HTML. A tag utilizada para isto é a CFFORM, iremos ver agora como utilizar essa tag e alguns de seus controles.
Atributos CFFORM
| Atributo | Descrição |
|---|---|
| NAME | Opcional. Nome do formulário que você irá criar |
| ACTION | Obrigatório. O nome do CFM que irá processar os dados do formulário enviado |
| ONSUBMIT | Opcional. Função Javascript que fará a validação dos campos do formulário |
| TARGET | Opcional. O nome da janela ou frame onde será mostrada o retorno do formulário |
Para que a CFFORM seja utilizada é necessário que se utilize alguns controles. Podem ser eles o CFINPUT ou CFSELECT.
CFINPUT
Esta tag cria os elementos botões radio, text ou checkbox podendo ser validadas, seu atributos são:
| Atributo | Descrição |
|---|---|
| TYPE | Opcional. Seus valores podem ser: - Text (Padrão) - Radio - Checkbox - Password |
| NAME | Obrigatório. O nome do campo |
| VALUE | Opcional. O valor inicial do campo |
| REQUIRED | Opcional. Identifica se o campo é obrigatório ou não. (Yes/No) |
| VALIDATE | Opcional. Seus valores podem ser: - date – Verifica a data no formato mm/dd/yyyy - eurodate – Verifica a data no formato dd/mm/yyyy - time – Verifica a hora em hh:mm:ss - float – Verifica entrada de ponteiros - integer – Verifica entrade de inteiros |
| ONVALIDATE | Opcional. Nome de uma função Javascript usada para validar a entrada do usuário |
| MESSAGE | Opcional. Uma mensagem texto que irá aparecer se a validação falhar. |
Agora veremos um exemplo desta duas tags juntas:
cfform1.cfm<CFFORM ACTION="recebe_form.cfm" METHOD="POST" NAME=”Formulario1”>
<CFINPUT TYPE="Text" NAME="nome" REQUIRED="Yes">
<CFINPUT TYPE="Text" NAME="data" MESSAGE="Entre com a data no formato correto (dd/mm/yy)"
VALIDATE="date" REQUIRED="Yes">
<INPUT TYPE="Submit" VALUE="Enviar">
</CFFORM>
CFSELECT
Esta tag constroi um list box que você pode incluir seus valores através de uma query, usando a tag html OPTION. Seus atributos são:
| Atributo | Descrição |
|---|---|
| NAME | Obrigatório. Nome do campo que será criado |
| SIZE | Opcional. Número de itens apresentados do list box |
| REQUIRED | Opcional. Identifica se o campo é obrigatório ou não. (Yes/No) |
| MESSAGE | Opcional. A mensagem irá aparecer ser REQUIRED=Yes e não for selecionado nenhum item |
| QUERY | Opcional. Nome da query usada para incluir os valores |
Veremos agora um exemplo do uso dessa tag:
cfform2.cfm<CFQUERY DATASOURCE=”DB_Empregados” NAME=”Listagem”>
SELECT * from Empregados
</CFQUERY>
<CFFORM ACTION="recebe_form.cfm" METHOD="POST" NAME=”Formulario1”>
<CFSELECT NAME="NomesEmpregados" MESSAGE="Selecione um Nome” QUERY="Listagem"
VALUE="Nome" REQUIRED="Yes">
<OPTION value="">Selecione
</CFSELECT>
</CFFORM>
Comentários Recentes