O NeoMatrix Tech está de casa nova!

Você deverá ser redirecionado em 6 segundos. Se não, visite:
http://www.leonelfraga.com/neomatrixtech
e atualize seus favoritos.

Aviso IMPORTANTÍSSIMO!

Aviso aos navegantes:

O NeoMatrix Tech mudou de casa!!!

A partir de agora, acessem pelo novo endereço:

http://www.leonelfraga.com/neomatrixtech

Ué... mas é só o domínio mudou de lugar?

R: Na verdade, não é bem assim hehe. Este domínio que você acessa agora aponta para um blog hospedado no Blogger, enquanto no novo, aponta para um blog na plataforma Wordpress, hospedagem própria, muito mais rápida e com um layout mais agradável de ler ;)

Não vou fechar este domínio igual ao que eu fiz com o NM Light (que já está 100% na nova plataforma). Talvez beeeeeeem depois eu faça isso.

Todos os posts daqui se encontram lá, e novos posts serão colocados somente no novo endereço.
A única coisa que não consegui importar foram os comentários. Mas em breve vai ter um post contando sobre a epopéia que foi migrar o NeoMatrix Tech!

Somente vou fechar a área de comentários daqui. Caso queiram comentar, favor ver o post correspondente no "Novo NeoMatrix Tech" e comentem por lá. É bem melhor! (pena que os permalinks "amigáveis para SEO" não funcionam lá, dá erro 404 e não consigo fazer a configuração funcionar. E olha que eu já vi vários artigos falando desse assunto :( ).

Quem assina o feed, já está lendo o conteúdo do novo NeoMatrix Tech!

sábado, 8 de novembro de 2008

Confirmando Leitura de E-mail com ASP.NET

Olá pessoal! E aí, tudo belezinha?

Este artigo, mais com cara de dica, vai tratar de como pegar uma confirmação de leitura de um e-mail enviado por um sistema, porém sem adicionar na mensagem uma solcitação de confirmação de leitura pelo cliente de e-mail do usuário.

Há N formas de fazer isso, vou citar duas delas, porém como vocês verão irão executar os mesmos procedimentos: Link de confirmação e iframe oculto na mensagem.

Porém já quero alertar que ambas as formas têm seus senões: A mensagem poderá ser interpretada pelo provedor (ou cliente de e-mail do usuário) como spam e o mesmo poderá bloquear a execução dos scripts que estarão sendo propostos aqui.

O artigo requer que você já tenha um conhecimento prévio de como enviar e-mail utilizando o .NET Framework (basicamente as classes MailMessage e SMTPMail), portanto, não irei destacar o uso delas.

Como este artigo é mais uma dica e o foco é na lógica do processo, dessa vez não teremos um código funcional de exemplo em nossa página de suporte :-(

Solução 1: Link na página

A solução mais simples é a de colocar um link na página, em que o usuário irá clicar e ao abrir a página no navegador irá ser gravado algum tipo de registro indicando que o usuário leu a mensagem.

Para isso, em primeiro lugar você deverá criar uma página em seu site com alguma mensagem para o usuário. O importante será o seu evento Page_Load. Mas, para a coisa funcionar, você precisará saber qual usuário está abrindo a mensagem, não é?

Supondo que você já tenha uma mailing-list, você deverá passar na querystring desta página alguma coisa para identificar o usuário, e deverá montar um link e colocá-lo no corpo da mensagem.

Como exemplo, vamos compor uma mensagem simples, através de uma classe que retorna uma lista de pessoas e envia uma mensagem padronizada para o usuário.

   1: public void EnviaMailList(List<Usuarios> usuarios)
   2: {
   3:     string pMensagem = "Teste de mensagem padrão, clique no link http://www.meusite.com.br/Mensagem.aspx?m=1&u={0} para confirmar";
   4:     foreach(Usuario u in Usuarios)
   5:     {
   6:         EnviarMensagem(String.Format(pMensagem,u.UsuarioID),u);
   7:     }
   8: }

O exemplo acima varre uma lista qualquer com um mailing qualquer, e temos a variável pMensagem com um link para um arquivo chamado Mensagem.aspx, que irá receber em sua querystring dois parâmetros, sendo o primeiro a mensagem que queremos controlar e o segundo o usuário que irá lê-la.

O String.Format do primeiro parâmetro (a mensagem a ser enviada) do método EnviarMensagem do nosso código irá colocar o ID do usuário no link que o usuário deverá clicar (esse é o problema... dependemos de uma ação do usuário para saber se ele leu a mensagem).

Agora veremos o que deve ser colocado no evento Page_Load da página Mensagem.aspx:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     if( (Request.Params["m"] != null) && (Request.Params["u"] != null))
   4:     {
   5:         Newsletter n = new NewsLetter();
   6:         n.ConfirmarLeitura(Request.Params["m"].ToString(),Request.Params["u"].ToString());
   7:     }
   8: }

Outra coisa simples! Primeiramente checamos se há os parâmetros na querystring, e se tiver, disparamos o processo que poderá gravar um registro em uma tabela em BD, por exemplo, indicando qual usuário leu aquela mensagem.

Mas lembre-se do senão: O usuário DEVERÁ clicar no link, além dos outros probleminhas já comentados acima (provedor ou cliente de e-mail achar que é spam, bloquear links, etc).

E não há uma forma "anônima", que não dependa tanto da ação do usuário para eu saber que ele leu a mensagem? Resposta: Há sim, utilizando iFrames (olha ele aí de novo!) na mensagem!

Solução 2: IFrames na mensagem

Para a coisa ficar mais anônima, iremos utilizar a mesma página Mensagem.aspx citada anteriormente, porém dessa vez ela deverá estar em branco. Para isso funcionar, a mensagem DEVERÁ estar em formato HTML, e o senão dessa vez é que o servidor de e-mail ou o cliente de e-mail poderá interpretar isso como uma página maliciosa, além dos outros já citados.
Neste código HTML, devemos colocar um iFrame cujo fonte seja a própria Mensagem.aspx, como segue o exemplo:

   1: public void EnviaMailList(List<Usuarios> usuarios)
   2: {
   3:     string pMensagem = " bla bla bla bla bla...";
   4:     pMensagem +- "<iframe src='link http://www.meusite.com.br/Mensagem.aspx?m=1&u={0}' style='width:0px;height:0px;visibility:hidden; border:0px' />"
   5:     foreach(Usuario u in Usuarios)
   6:     {
   7:         EnviarMensagem(String.Format(pMensagem,u.UsuarioID));
   8:     }
   9: }

Como podemos ver, temos no código HTML da mensagem um iFrame cujo atributo src é a página Mensagem.aspx e ele é invisível para o usuário. Quando a página for aberta no cliente de e-mail, o iframe também será aberto e o evento Page_Load de Mensagem.aspx é executado.
Outra dica, é definir a mensagem principal na própria página Mensagem.aspx, ou seja, a mensagem na verdade irá vir de um ambiente externo (seu servidor web), e enviando somente o iframe e algumas instruções de "caso não consiga visualizar esta mensagem clique aqui..." para o usuário.

A não ser pelos senões, creio que estas soluções são bem simples e funcionais :-)

Um abraço!

0 comentários:


Postar um comentário

Para tornar este artigo ainda mais interessante, escreva suas críticas (desde que construtivas e sem ofenças), elogios, sugestões, complementos, dúvidas, etc, etc, etc!!!

Sobre o NeoMatrix Tech

Meu blog para assuntos profissionais, ligado com tecnologia.
Dicas de programação (grande parte de C# e ASP.NET, mas não limitado a essa plataforma :-) ), dicas de utilitários, análises de equipamentos e serviços, resenhas sobre sites que eu visito, relacionados com tecnologia, opinião sobre mercado de trabalho, metodologias de desenvolvimento, comportamento no mundo tecnológico...

NeoMatrix Light

  © Blogger templates ProBlogger Template by Ourblogtemplates.com 2008 - Editado e configurado por Leonel F.

Voltar ao TOPO