使用 asp.net 进行电子邮件跟踪

本文关键字:电子邮件 跟踪 asp net 使用 | 更新日期: 2023-09-27 18:36:58

我想跟踪阅读过我邮件的用户。我正在这样做,但它不起作用 我正在 Outlook 中向自己发送邮件。 这是我发送邮件的代码

  try
        {
        string emailTemplateBody = "Hy this is test mail";
        emailTemplateBody += "<tr><img src=''http://localhost:52583/HttpModule_using_beacon_images/images/<keyvalue>.aspx''  style=''opacity:0.0; filter:alpha(opacity=0);'' /></tr>";

        string templateName = txtTemplateName.Text;
                    string toEmail = mymailaddress
        //// Get unique Key after registring mail to be sent
        string key = bl_email_calls.RegisterSystemEmailAudit("1", templateName, DateTime.Now);
        emailTemplateBody = emailTemplateBody.Replace("<keyvalue>", key);
        //// sending e-mail
        bl_email_calls.SendMailMessage(toEmail, templateName, emailTemplateBody, key);
        using (var cn = new SqlConnection(ConfigurationManager.ConnectionStrings["webConnectionString"].ToString()))
        {
           //code to insert record in database;            }
        Response.Write("Mail sent");
        // return false;
    }
    catch (Exception ex)
    {
        throw;
    }

这是我从 http://www.aspnetemail.com/samples/emailtracker/default.aspx[^]中使用的HTTP模块

public class HttpModuleClass : IHttpModule
{
    //public event EventHandler BeginRequest;
    public void Dispose()
    {
    }
    /// <summary>
    /// public varibles
    /// </summary>
    string footerFile = "~/images/footer.png";
    //string footerFile = "~/images/ajax-loader.gif";
    Email_Calls bl_email_calls = new Email_Calls();
    /// <summary>
    /// Init methoed
    /// </summary>
    /// <param name="context"></param>
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new System.EventHandler(GetImage_BeginRequest);
    }
    /// <summary>
    /// handles requests made to server and call update email read time
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    public void GetImage_BeginRequest(object sender, System.EventArgs args)
    {
        //cast the sender to a HttpApplication object
        System.Web.HttpApplication application = (System.Web.HttpApplication)sender;
        string url = application.Request.Path; //get the url path
        //string pattern = @"/HttpModule/images/(?<key>.*)'.aspx";
        //string pattern = @"/HttpModule_using_beacon_images/images/(?<key>.*)'.aspx";
        string pattern = @"/HttpModule_using_beacon_images/images/(?<key>.*)'.aspx";
        //string pattern = @"~/images/(?<key>.*)'.aspx";
        //create the regex to match for beacon images
        Regex r = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
        if (r.IsMatch(url))
        {
            MatchCollection mc = r.Matches(url);
            if ((mc != null) && (mc.Count > 0))
            {
                string key = (mc[0].Groups["key"].Value);
                bl_email_calls.UpdateSystemEmailAuditReadDate(key);
            }
            //now send the REAL image to the client
            //application.Response.ContentType = "image/gif";
            application.Response.ContentType = "image/png";
            application.Response.WriteFile(application.Request.MapPath(footerFile));
            //end the response
            application.Response.End();
        }
    }
}

使用 asp.net 进行电子邮件跟踪

要请求已读回执,我们需要添加一个名为 'Disposition-Notification-To' 的自定义标头在此示例中,已读回执将返回到"someaddress@mydomain.com"请务必注意,已读回执仅由以下邮件客户端发送:a) 支持他们和b)启用它们。

为已读回执添加"Disposition-Notification-To"

  mail.Headers.Add("Disposition-Notification-To", "<mail@yahoo.com>");

我明白了。我犯了一些小错误。

实际上,我将电子邮件正文保存到数据库中,因此我不得不使用''而不是',这带来了所有麻烦。当被删除时,它工作正常。