asp.net如何实现跟踪检查用户知否查看了邮件。

     有时我们有这样一种需求场景,我们给很多用户发了邮件,需要一个反馈,用户是否查看了我们发送的邮件,百度了以下果然有方案。

我总结实践了下这个过程,同时有自己的一点使用感受。记录下希望对你有帮助。

 

     有人想到在邮件的 body嵌套html页面,嵌套iframe这些都似乎不可行,没有实践。

有人想在邮件body中加入个js文件,或代码,企图让js发信息到服务器,这个更不可行,为了防止跨站攻击,腾讯等邮件服务商已经过滤掉了这些标签。不允许出现<script> js <link> 或者<type>css标签。 亲测了腾讯。

 

百度中有人提出在邮件body中加入一张图片,图片地址为自己网站的的一张图片。

这个方案我试了下是可以的。在自己的网站上捕获图片请求,然后就知道谁查看了这个邮件,刚开始我想着,给每个客户一个不同的图片,图片名字为客户的标识,然后捕获标识,截取名字,插入查看记录。

但是发现用户量太大不可行,然后优化了下,真是多想了,我们可以给几百万用户使用同一张图片,但是在用程序生成内容的时候,给每个用户发的图片名字不要一样就可以了,图片名字就用标识名字,捕获以后,然后再改为正确名字,

然后完美解决。

 

我模仿客户端的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form id="form1" runat="server">
        <div>
            11837
            <span id="useraddr">123456789@qq.com</span>
            <div>
                <img src="http://localhost:11822/EmailPic/ac1234567.png?" alt="图片" />
                <script src="http://localhost:11822/EmailPic/email.js" type="text/javascript"></script>
                 <script src="https://www.baidu.com/emai/email.js" type="text/javascript"></script>
                 <link href="https://www.baidu.com/style/StyleSheet1.css" rel="stylesheet" />
                <script type="text/javascript">
                    var add = document.getElementById("useraddr").innerText;
                    alert(add);
                </script>
            </div>
        </div>
    </form>

  第二个项目模仿服务端,调试的时候端口定死就可以了。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace ServerWeb
{
    public class MyHttpHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }
 
        public void ProcessRequest(HttpContext context)
        {
            string filePath = context.Request.Path;
            if (filePath.Contains("EmailPic"))
            {
                context.Response.ContentType = "image/JPEG";
                string fullPath = context.Server.MapPath(filePath);
                int startIndex = fullPath.IndexOf("ac");
                string userAction = fullPath.Substring(startIndex - 1, 10);
                fullPath = fullPath.Substring(0, startIndex) + "001.png";
                context.Response.WriteFile(fullPath);
 
            }
        }
       
    }
}

  

 服务端我自己写了个类,实现IHttpHandler接口,也就是自己实现IHttpHandler捕获用户请求了。

        EmailPic是个文件夹,文件夹下面有一张图片,001.png表示这是邮件标识图片。

自己实现HttpHandler需要配置webconfig,如下配置,在<system.web>节点下配置:

1
2
3
4
5
6
7
<system.web>
      <compilation debug="true" targetFramework="4.5.1" />
      <httpRuntime targetFramework="4.5.1" />
      <httpHandlers>
        <add path="*.jpg,*.png" verb="*" type="ServerWeb.MyHttpHandler,ServerWeb"/>
      </httpHandlers>
    </system.web>

  

我这里没有具体业务代码,但是,你既然知道了,原理是什么,在自己的网站上如何捕获请求。其他的都不是事了,自己改改实现下业务就可以了。

 

这里少一大块是什么呢,是如何发邮件的代码,以及循环生生成邮件,在给邮件体加图片时,给每个用户的图片名字标识问题,可以使用用户编号,或者自己随机生成标识,有人说这里要考虑安全问题,再自己研究吧。感觉没什么安全问题。

唯一担心的是邮件服务商,关注你的图片,分析你的客户编号。这就要注意了。

 

posted on   荆棘人  阅读(547)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示