V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Lpl
V2EX  ›  问与答

怎么知道一封邮件是否已经到达对方的邮箱?

  •  
  •   Lpl · 2016-01-03 16:07:00 +08:00 · 20079 次点击
    这是一个创建于 3241 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 A 发送了一封邮件给 B , A 这边发送成功了, B 那边可能会有一段网络延迟未能收到。

    有没有什么方法能够知道 A 发送的邮件是否已经到了 B ?

    41 条回复    2016-01-05 13:10:01 +08:00
    Citrus
        1
    Citrus  
       2016-01-03 16:08:26 +08:00 via iPhone
    搜索: 已读回执
    233
        2
    233  
       2016-01-03 16:09:13 +08:00
    非技术手段的话, 是可以请求已读回执的
    akira
        3
    akira  
       2016-01-03 17:05:38 +08:00
    送到和已读还是有区别的。
    邮件发送成功后一段时间内没收到退信,应该就可以认为送达了。
    Slienc7
        4
    Slienc7  
       2016-01-03 17:11:59 +08:00
    我不确定你这里说的网络延迟是什么意思。
    这是包含在协议里的:
    如果是 SMTP 发件,如果服务器没有返回错误代码(拒收,不存在等),回应正常的状态码,可以认作投递成功,可以认作已经到达对方邮箱(当然也可能是垃圾箱)。
    至于说网络延迟这类应该是对方的邮件服务器内部的同步延迟,这是不可控问题。

    楼上提到的已读回执是“已读”,且并不是所有邮件服务提供商都支持,且可能需要用户手动确认。
    jugelizi
        5
    jugelizi  
       2016-01-03 17:13:43 +08:00
    你说的收到的意思是指邮件到达对方邮件服务器上吧
    一般发送接口都有返回状态的呀
    Lpl
        6
    Lpl  
    OP
       2016-01-03 17:15:53 +08:00
    @Citrus
    @233
    @akira
    其实想表达的意思是不需要人工的已读回执,是通过技术手段,比如记录这次发信的某个特殊标识,然后判断是否达到收信方,是否读了无关紧要,只是想判断是否到达他邮箱了
    Lpl
        7
    Lpl  
    OP
       2016-01-03 17:21:25 +08:00
    @xgowex 这个网络延迟是这样的:比如 A 发信给 B ,可能是网络问题,需要一二十分钟才能到达 B 的邮箱,我想知道怎么判断什么时候到达 B 的邮箱的

    @jugelizi 对对,终于表达出来我的意思了。这里不需要开发一个邮件系统,就是想通过普通的 gmail 邮箱发送邮件判断邮件是否正常发送到对象邮箱了。因为由于延迟的原因可能一二十分钟到达,我想判断具体到达对方邮箱的时间
    liuhaotian
        8
    liuhaotian  
       2016-01-03 17:23:26 +08:00 via iPhone
    这样子的话只要 Gmail 没有退信就可以认为发送成功了。
    如果是已读回执的话可以通过自己的服务器来实现。
    tammy
        9
    tammy  
       2016-01-03 17:25:28 +08:00   ❤️ 1
    给你个思路,弄个透明图片放你服务器上,然后右键包含这个图片,如果别人看了,你服务器那边就有日志
    xenme
        10
    xenme  
       2016-01-03 17:56:29 +08:00 via iPhone
    @tammy 然后图片非信任,不下载,哈哈
    FrankFang128
        11
    FrankFang128  
       2016-01-03 18:08:03 +08:00 via Android   ❤️ 2
    附上口令红包不就行了。
    SourceMan
        12
    SourceMan  
       2016-01-03 18:10:15 +08:00 via iPhone
    独一的资源,看是否请求过
    sennes
        13
    sennes  
       2016-01-03 18:46:10 +08:00 via iPhone
    烦请阁下点击下面链接以便告诉我们您已阅读邮件。
    Lpl
        14
    Lpl  
    OP
       2016-01-03 19:04:26 +08:00
    @liuhaotian 嗯嗯,我理解你的意思。那么如果没有已读回执的话能判断邮件是否已经到达对方邮箱以及对方是否已读呢?


    @tammy 哈哈,这个倒是简单暴力啊。有没有通过网络层面实现的呢?


    @FrankFang128 不太明白这个意思..是附上一个口令红包,然后对方如果使用了即表明阅读了么


    @SourceMan 是这个意思,比如发的每一份邮件也是独一的资源,关键这里怎么判断是否已经收到了


    @sennes 邮件回执的意思我了解,我想想能否不需要回执就可以知道。这里只是想知道邮件是否已经发送到对方邮箱,从发送开发到对方邮箱接收用时多少。 而且...要回执有点怪怪的
    regist
        15
    regist  
       2016-01-03 20:05:03 +08:00
    你想让服务器返回一段指令让你明白邮件已经被收件箱收取
    问题是,你能让对方服务器(不是你自己的发件服务器)返回特殊的指令吗?

    再说,对方客户端设置一天才收取一次邮件呢?这些都是你没法控制的。

    兄台,洗洗睡吧。
    gdtv
        16
    gdtv  
       2016-01-03 20:24:30 +08:00   ❤️ 1
    1 、判断邮件是否已到达对方的服务器,分两种情况,第一种是你自己写的邮件发送端代码,你可以实时知道对方服务器是否已收到,如果收方没收到或者拒收,在邮件协议里有说明的。 第二种是使用网页版的邮箱服务器,例如 gmail ,当你在 gmail 网页上点击发送按钮,邮件其实是发送到了 gmail 的服务器,此时还没有到达收件方的服务器,你需要等几分钟, gmail 才会告诉你是否发送成功。
    2 、第 1 只是判断是邮件是否到达收件方的服务器,但不通判断对方人员的邮件客户端是否收到了邮件,例如人家自己家里电脑上的 Outlook 设置每 1 同步一次,那他可能要等一天才收到你的邮件,这个你无法判断。
    3 、判断对方(指人类)是否已打开了你的邮件。某些邮件提供商在自家邮箱范围内会提供这样的服务器。例如 QQ 邮箱发给 QQ 邮箱,就可以有已读回执。如果不是同一个提供商,就没有办法。上面回复里说的嵌入一张图片的方法,大部分网页版的邮箱会默认不显示图片,所以无效。
    Lpl
        17
    Lpl  
    OP
       2016-01-03 20:33:00 +08:00
    @regist 不需要对方服务器返回特殊指令的。比如说 SMTP 和 Ping 都属于 TCP/IP 协议, Ping 可以发送数据包然后让对方返回同样的数据包然后检测网络是否通行。那么 SMTP 协议也可以说是发送了数据到对方服务器,那么对方服务器是否也会返回某个状态码给 SMTP 呢(就是这点不理解,到底返回没返回,返回的话怎么能够查看)?

    因为网络时延的问题,这个状态码肯定会返回的很慢,等于说双倍时间( A 服务器发送给 B 服务器,时间记为 t , B 服务器判断没有这个邮箱,返回状态码,时间记为 t 。那么这个时候应该是 2t )。

    但是,如果你的邮件地址填写时正确的,在 Foxmail 这些客户端上并不会返回错误代码; 相反,如果邮件地址是正确的,那么邮件协议肯定有一个正确的代码。那么问题来了.....咋看到这个状态码
    soland
        18
    soland  
       2016-01-03 20:37:23 +08:00
    放个图片。
    Lpl
        19
    Lpl  
    OP
       2016-01-03 20:41:18 +08:00
    @gdtv good !!总算是搞明白这个问题了,对于第二种来说,貌似 gmail 没有告诉过我是否发送成功。
    对于第一种来说,是不是发送到对方邮件使用的服务器后(不管是否发送到对方客户端)协议会有一个成功到达的状态码返回呢?返回的过程是否是肯定会经过发邮件的那一些节点,还是会视网络情况随机找最近的网络节点呢?
    regist
        20
    regist  
       2016-01-03 20:49:58 +08:00   ❤️ 1
    @Lpl 如果你配制过服务器的邮件,应该用 telent 测试过发信,配合监控邮件日志,你能知晓对方收件服务器确实会返回状态码,但是这个状态码到你的收件箱依赖你的收信频率设置(客户端),网页端也能给你解析结果,发送成功 or 发送失败,以及发送失败的原因,不过这个状态变化依赖于网页端邮件提供商的设置。

    发信过程类似如下:

    你的客户端( or 网页端) <--> smtp 服务器 <--> 对方收件服务器 <--> 对方客户端

    如果你用客户端发送,那么后面的过程你控制不了
    如果你能直接接触到 smtp 服务器,那么你能知晓对方收件服务器返回的状态码,进而判断,这个时候如果对方用客户端收件,那么你同样没法控制
    至于后面两个,你接触不到的
    kn007
        21
    kn007  
       2016-01-03 21:11:12 +08:00
    如果是私有邮件服务器,可以在日志中看到 250 OK ,说明已到对方邮箱。至于对方有没有阅读,就只能通过已读回执、图片请求了。
    Lpl
        22
    Lpl  
    OP
       2016-01-03 21:12:06 +08:00
    @regist 明白了!十分感谢,是我问题发出来没有表述清楚,其实这里的 A 和 B 想表达的是发件服务器和收件服务器。。。不过这么多回答明白了很多问题
    xderam
        23
    xderam  
       2016-01-03 21:18:43 +08:00
    到达 B 的邮件服务器和到达 B 的邮件客户端貌似是两回事.如果不想用已读回执. 可以在发送的邮件里搞一个 gif 或者任意一个 url. 这个 url 指向你的 http 服务器. 恩.当对方打开的时候.恩.你懂的.
    Lpl
        24
    Lpl  
    OP
       2016-01-03 21:27:31 +08:00
    @xderam 嘿嘿嘿,我懂的~
    honeycomb
        25
    honeycomb  
       2016-01-03 21:33:41 +08:00
    第三方 tracking pixel ,但是只能用来判断已读,遇到开反追踪的可能无效
    jhaohai
        26
    jhaohai  
       2016-01-03 21:56:25 +08:00 via iPhone
    显示发送成功就是已送达吧,别的也没什么方法
    des
        27
    des  
       2016-01-03 22:02:13 +08:00
    如果都能知道,你让发垃圾邮件的情何以堪
    FrankFang128
        28
    FrankFang128  
       2016-01-03 22:37:11 +08:00 via Android
    红包开玩笑的 嘿嘿
    way2explore2
        29
    way2explore2  
       2016-01-03 22:41:26 +08:00 via Android
    @tammy 这到是一个好思路。
    但像 Thunderbird 默认是屏图片的啊
    gdtv
        30
    gdtv  
       2016-01-04 00:46:03 +08:00
    @Lpl 对于第二种情况,如果在 gmail 网页发邮件,点击发送按钮后,如果发送失败,过几分钟后网页上会有红色文字提示。
    其他问题 20 楼的朋友说得更清楚,我就不说了。
    zonghua
        31
    zonghua  
       2016-01-04 00:49:09 +08:00 via iPhone
    问一下礼貌问题。邮件投简历, HR 认为是条件不符是直接不理,还是回信挽拒?
    zonghua
        32
    zonghua  
       2016-01-04 01:56:51 +08:00 via iPhone
    @way2explore2 stylesheet 也是可以的啊,或者其他外联的资源。
    imydou
        33
    imydou  
       2016-01-04 08:44:21 +08:00
    @tammy 还有邮件客户端可能会自动下载邮件内容,然后并未看
    mengzhuo
        34
    mengzhuo  
       2016-01-04 09:48:09 +08:00 via iPhone
    除了 tracking pixel 没有别的办法
    但如果 b 的客户端屏蔽图片 就 88 了

    理论上是不可能 100%知道的
    vickyphan
        35
    vickyphan  
       2016-01-04 12:28:24 +08:00
    重要邮件我都是抄送一份给自己的
    Myprincess
        36
    Myprincess  
       2016-01-04 14:58:17 +08:00
    附件上一个红包口令。哈哈,玩笑
    tammy
        37
    tammy  
       2016-01-04 18:56:24 +08:00
    @imydou 有这种可能

    @way2explore2 确实哦,不少客户端、网页版都默认屏蔽,但是参考 @Myprincess 的可以诱导别人去必须去看图片。带个口令红包,图片内容就是口令(不过这个红包只适合中国国庆吧)。
    julyclyde
        38
    julyclyde  
       2016-01-05 10:17:51 +08:00
    @xgowex 已读是完全靠用户的,和邮件服务商一点儿关系都没有,谈不上“不是所有的服务商都支持”这种话

    SMTP 只负责交接。只要没退信,至少也是到对方服务器了。但到对方服务器之后的步骤不受控
    julyclyde
        39
    julyclyde  
       2016-01-05 10:18:34 +08:00
    @vickyphan 抄送给自己一点儿用都没有
    julyclyde
        41
    julyclyde  
       2016-01-05 13:10:01 +08:00
    @xgowex 你说的并不比我的多什么内容啊。你想表达什么意思?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2798 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:23 · PVG 17:23 · LAX 01:23 · JFK 04:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.