CGI WebBroker: Enviando emails com componentes Indy

Veja como criar um CGI em WebBroker para enviar E-Mail usando os componentes Indy e aprenda como compilar uma aplicação de envio de E-Mails para rodar no Apache / Linux.

O artigo desta semana surgiu de uma dúvida de um aluno do curso de E-Commerce on-line da ClubeDelphi. Junior JR gostaria de saber como criar um CGI em WebBroker para enviar E-Mail usando os componentes Indy. Este tipo de aplicação é comum, por exemplo, na construção de WebMails.

Como o WebBroker e Indy também estão presentes no Kylix, veremos com compilar nossa aplicação de envio de E-Mails para rodar no Apache / Linux. Vamos lá!

 

Nota: neste exemplo usaremos o IIS como servidor Web, dessa forma é necessário que você tenha o mesmo instalado e em sua máquina, ou ainda o PWS. Para o exemplo rodar no Linux, é necessário que você tenha o Kylix e Apache.

Criando a aplicação WebBroker

Clique em File|New>Other>New e selecione a opção Web Server Applicationpara criar uma aplicação WebBroker.

Escolha o tipo CGI para este exemplo. Você poderá mais tarde facilmente converter a aplicação para outro tipo de servidor. Marcando a opção Cross-platform, o código gerado para o exemplo usará CLX e poderá ser recompilado no Kylix.

Configurando os componentes Indy

Coloque no WebModule da aplicação os componentes IdSMTP (Indy Clients) e IdMessage (Indy Misc).

Selecione o componente IdSMTP1 e digite na sua propriedade Host o endereço do servidor SMTP que você utiliza (ex. smtp.clubedelphi.com.br). Se o seu servidor requer autenticação para envio, preencha também as propriedades Username e Password.

Declare o seguinte método na seção private do WebModule:

private procedure EnviaEMail(De,Para,Assunto, Texto: string);  

Aperte Shift+Ctrl+C e implemente o método da seguinte forma:

procedure TWebModule1.EnviaEMail(De, Para, Assunto, Texto: string); begin   IDSmtp1.Connect;   try    IdMessage1.From.Address := De;    IdMessage1.Recipients.EMailAddresses := Para;    IdMessage1.Subject := Assunto;    IdMessage1.Body.Text := Texto;    IdSMTP1.Send(IdMessage1);   finally    IdSMTP1.Disconnect;   end; end;

O código anterior configura os componentes do Indy de acordo com os parâmetros passados e envia o E-Mail.

Criando a Action de Envio

Dê um duplo clique no WebModule e no editor Actions aperte Insert. Defina a propriedade Default da nova Action como True.

No seu evento OnAction digite o seguinte:

procedure TWebModule1.WebModule1WebActionItem1Action(Sender:TObject;   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin   with Request do     EnviaEMail(       ContentFields.Values['DE'],       ContentFields.Values['PARA'],       ContentFields.Values['ASSUNTO'],       ContentFields.Values['TEXTO']);   Response.Content := 'E-Mail enviado com sucesso'; end;

Isso captura os valores dos campos passados para o Request e passa como parâmetro para o método EnviaEmail criado anteriormente.

Compilando e distribuindo a aplicação

Clique em Project|Options>Directories/Conditionals e na opção Output directory (Figura 5) digite “c:\inetpub\scripts” (diretório padrão de scripts do IIS). Clique em Ok e compile a aplicação.

Com isso, o arquivo executável já será automaticamente compilado dentro do diretório virtual do IIS.

Criando a página de envio

O último passo é criar o formulário HTML para entrada dos dados do E-Mail. Aqui está o conteúdo do arquivo EnviaEmail.html (salve-o dentro do diretório raiz do IIS, por padrão c:\inetpub\wwwroot):

<html> Enviando E-Mails com WebBroker e Indy <BR> <form method="POST" action="/scripts/project1.exe">   <table width="47%" border="1">   <tr>     <td width="20%">De</td>     <td width="80%"><input name="DE" type="Text" size="60"></td>   </tr>   <tr>     <td>Para</td>     <td><input Name="PARA" type="Text" size="60"></td>   </tr>   <tr>     <td>Assunto</td>     <td><input Name="ASSUNTO" type="Text" size="60"></td>   </tr>   <tr>     <td>Texto</td>     <td><textarea name="TEXTO" cols="55" rows="5"></textarea></td>   </tr>   </table>   <br><input name="submit" type="submit" value="Enviar"> </form> </html>

Observe que o formulário irá postar os dados na aplicação WebBroker criada anteriormente (parâmetro Action).

Testando a aplicação

Abra um browser, acesse o endereço localhost/EnviaEmail.html e preencha o formulário e clique no botão Enviar.

Recompilando no Kylix 3

Para que nossa aplicação rode no Linux, precisamos recompilar nosso CGI no Kylix. Isso é bastante simples, e não será necessário alterar nenhuma linha no código fonte do projeto! O primeiro passo é reabrir o mesmo projeto no Kylix.

Clique em Project|Options>Directories/Conditionals e na opção Output directory (Figura 9) digite “/var/www/cgi-bin” (diretório padrão de scripts do Apache). Clique em Ok e compile a aplicação. Com isso, o arquivo binário será automaticamente compilado dentro do diretório virtual do Apache.

Salve nosso arquivo HTML dentro diretório /var/www/html e altere a linha do form para:

<form method="POST" action="/cgi-bin/Project1">  

Abra um browser, acesse o endereço localhost/EnviaEmail.html, preencha o formulário e clique em Enviar.

Agora, faremos o mesmo procedimento de envio de emails usando o IntraWeb.

Criando a aplicação IntraWeb

Clique em File|New>Other>New>IntraWeb e selecione a opção IntraWeb Application Wizard. Selecione a opção StandAlone.

Configurando os componentes Indy

Coloque também quatro IWLabels, três IWEdits (chame-os de “edDe”, “edPara” e “edAssunto”), um IWMemo (“mmTexto”) e um IWButton (“btEnviar”). Todos esses componentes podem ser encontrados na paleta IW Standard.

Coloque também um IdSMTP (Indy Clients) e IdMessage (Indy Misc).

Selecione o componente IdSMTP1 e digite na sua propriedade Host o endereço do servidor SMTP que você utiliza (ex. smtp.clubedelphi.com.br). Se o seu servidor requer autenticação para envio, preencha também as propriedades Username e Password.

Declare o seguinte método na seção private do formulário:

private procedure EnviaEMail(De,Para,Assunto,Texto: string);  

Aperte Shift+Ctrl+C e implemente o método da seguinte forma:

procedure TIWForm1.EnviaEMail(De, Para, Assunto, Texto: string); begin  IDSmtp1.Connect;  try   IdMessage1.From.Address := De;   IdMessage1.Recipients.EMailAddresses := Para;   IdMessage1.Subject := Assunto;   IdMessage1.Body.Text := Texto;   IdSMTP1.Send(IdMessage1);  finally   IdSMTP1.Disconnect;  end; end;

O código anterior configura os componentes do Indy de acordo com os parâmetros passados e envia o E-Mail.

No evento OnClick do IWButton digite:

procedure TIWForm1.btEnviarClick(Sender: TObject); begin   EnviaEMail(edDe.Text,edPara.Text,edAssunto.Text,mmTexto.Text);   WebApplication.ShowMessage('E-Mail enviado com sucesso!'); end;

Testando a aplicação

Clique no menu Run|Parameters e na opção Parameters digite “/launchbrowser”, para que a aplicação ao ser executada já abra um browser automaticamente. Clique em OK e aparte F9 para rodar a aplicação.

Preencha os dados do e-mail e clique no botão Enviar.

Nesta última sessão veremos como enviar e-mails através de uma aplicação ASP.NET / Web Forms criada no Delphi 8 for .NET. Para enviar os e-mails, usaremos as classes nativas do .NET Framework, declaradas no namespace System.Web.Mail, ao invés de utilizarmos os componentes da Indy.

Criando a aplicação

No Delphi 8, clique em File|New>ASP.NET Web Application. Na caixa de diálogo que aparece, digite um nome para a aplicação, nesse caso “EnviaEmail”. 

No Web Form principal da aplicação, coloque quatro componentes TexbBox, quatro Labels e um Button, todos da categoria Web Controls. Configure a propriedade ID dos TextBoxes para “edDe”, “edPara”, “edAssunto” e “edTexto”, respectivamente. Defina o Text do Button como “Enviar”. Defina ainda a propriedade TextMode do EdTexto para MultiLine.

No editor de código, na classe que define o Web Form, declare o seguinte na seção private:

  private procedure EnviaEMail(De, Para, Assunto, Texto: string);  

Aperte Shift+Ctrl+C e implemente o método conforme mostrado a seguir:

procedure TWebForm1.EnviaEMail(De, Para, Assunto, Texto: string); var    ms: MailMessage; begin    { Adicione System.Web.Mail no uses }    ms := MailMessage.Create;    ms.From := De;    ms.&To := Para;    ms.Subject := Assunto;    ms.Body := Texto;    SmtpMail.SmtpServer := 'smtp.brturbo.com';    SmtpMail.Send(ms); end;

Lembre-se de declarar System.Web.Mail no uses. No Web Form, dê um duplo clique no botão e digite o seguinte:

procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs); begin    EnviaEMail(edDe.Text,edPara.Text,edAssunto.Text,edTexto.Text); end;

Isso é tudo! Execute a aplicação e você deverá visualizar o formulário ASPX no browser. Preencha as informações do e-mail e clique em Enviar.

Para aqueles que ficaram interessados no desenvolvimento com ASP.NET, sugiro conferir o curso iniciado na edição 51 da Revista ClubeDelphi. É uma série de excelentes matérias escritas por Sanyo Moura mostrando como criar aplicações ASP.NET / Web Forms com o Delphi 8 for .NET.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados