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

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

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

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

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

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

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

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

然后完美解决。

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

<form id="form1" runat="server">
        <div>
            11837
            <span id="useraddr">[email protected]</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>

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

 

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>节点下配置:

<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>

  

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

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

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

时间: 2024-10-08 07:12:51

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

注册模块前端的处理及检查用户的唯一性

用户名和密码为空,不允许注册 用户重复,给出提示,不允许注册 否则可以注册 需要用jQuery,因为jQuery跨浏览器,兼容性好. 用户注册页面(register.jsp)验证: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W

Project Server 2013新手入门 (三)检查用户的有效权限

上篇文章里讲的怎么给PWA的用户来设置权限,那我们把用户的权限分配好了,怎么知道我们分配的权限对不对呢,或者说怎么去查看一个用户在PWA中的权限呢.下面的内容我将介绍怎么操作. 当我们配置完应该去检查一下用户的有效权限,这样可一方便我们管理用户. 1.同样是在"管理用户"页面,选中我们要查看的用户名称,点击"检查有效权限". 注意:我们也可以点击"停用用户"来阻止离职员工或者部分员工对PWA的使用,此时用户状态显示为"非活动"

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

asp.net动态加载ascx用户控件

原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或Td之类的,设置ID ,runat="server",接下来LoadControl("ascx1") <%@ Control Language="C#" AutoEventWireup="true" CodeFile=&quo

使用ValidationRule类来检查用户输入的有效性

1 新建WPF应用程序ValidationRuleExp 整个程序的结构如下图所示. 程序运行起来后的效果如下图所示. 用户操作程序时,先输入固话.手机.Email.个人网站等信息,再点击右侧的"点我记住你"按钮,便可以保存用户输入的信息. 2 新建业务实体类ContactModel(类文件为ContactModel.cs) ContactModel类包含固话.手机.Email.个人网站等属性,分别与界面的固话文本框.手机文本框.Email文本框.个人网站文本框绑定.ContactMo

Asp数据库连接出错,请检查Conn.asp文件中的数据库参数设置

Asp数据库连接出错,请检查Conn.asp文件中的数据库参数设置 解决办法: IIS-本地计算机-应用程序池-DefaultAppPool(右键)-高级设置将"启用32位应用程序"设置为true

检查用户输入信息是否完整(vb.net实现)

    机房收费系统中,在将用户输入的信息封装到实体中作为参数传到B层之前,总要对用户输入的信息进行检查.我将这样的检查分为两类: 合法性检查 完整性检查     所谓合法性检查,就是用户输入的信息是否格式正确,或者是否为规定的数字或字符.而完整性检查,则是用户输入的信息是否完整,是否有漏填的. 这里我只介绍一下自己是如何实现用户输入信息的完整性检查的.     思路:     因为凡是需要用户输入信息的窗体,都需要进行完整性检查.而这个功能的实现只需要写一个函数即可.这个函数可以为多个窗体调用

检查用户头像状态的脚本

<?php $_SERVER['HTTP_HOST'] = ''; $fromUid = isset($GLOBALS['argv'][3]) && (intval($GLOBALS['argv'][3]) == $GLOBALS['argv'][3]) ? $GLOBALS['argv'][3] : 0; $limitNum = isset($GLOBALS['argv'][4]) && (intval($GLOBALS['argv'][4]) == $GLOBAL

Asp.NET WebApi+Redis实现单用户登录实战演练

一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和完善此系列课程! 1.1.本高级系列课程适合人群如下: 1.有一定的NET开发基础并对ASP.NET WebApi.Redis.技术有一定了解和认识. 2.喜欢阿笨的干货分享课程的童鞋们. 1.2.一句话总结今天我们要解决的问题? 我们如何实现系统限制一个账号同一时刻只能一个用户账号登录使用(不能同时登录),