Descobrindo quando um e-mail foi aberto por ASP

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Descobrindo quando um e-mail foi aberto com ASP

Quando você envia uma mala direta, é possível usar de um truque com ASP para saber quais destinatários abriram seus e-mails e quantas vezes o fizeram. O truque consiste em enviar os e-mails no formato HTML com um link para um arquivo de imagem que é buscado no seu site para ser exibido todas as vezes que alguém abrir o e-mail. Este link porém não é direto para uma imagem, mas para um ASP que retorna a imagem. No link, você pode enviar uma informação que identifica o destinatário. Ao ser acessado, o código em ASP recebe o identificador do destinatário e pode, antes de retornar a imagem, atualizar um banco de dados onde você mantém os registros dos destinatários que abriram os e-mails, quantas vezes abriram, data e hora da primeira abertura, data e hora da última abertura, etc.

O link no arquivo html poderia ser assim:

<img border="0" src="http://www.codelines.com/silentidea/imagem.asp?Id=1000">

O código em ASP que retornaria a imagem poderia ser como segue abaixo:

Dim strFilePath, objStream

Dim cn, strConn, strSql

Dim Id, recaffec

On Error Resume Next

Set cn = Server.CreateObject("ADODB.Connection")

strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:\home\meu_site\dados\maladireta.mdb;"

cn.Open strConn

'Coleta o Id do destinatário

Id = Request.QueryString("Id")

'Aqui, atualiza o banco de dados com as informações do destinatário

strsql = "UPDATE Emails SET vezes_abriu_email = vezes_abriu_email + 1 WHERE ID = " & Id

cn.Execute strsql, recaffec

cn.close

set cn = nothing

'Agora, retorna a imagem que é exibida no e-mail supondo que ela esteja no 
'mesmo diretório deste arquivo ASP

Response.ContentType = "image/gif"

strFilePath = Server.MapPath("imagem.gif")

Set objStream = Server.CreateObject("ADODB.Stream")

objStream.Open

objStream.Type = adTypeBinary

objStream.LoadFromFile strFilePath

Response.BinaryWrite objStream.Read

objStream.Close

Set objStream = Nothing