这是一个听起来几乎不可能的事情……我甚至有点后悔将它发到网上,因为它在一个会议上成了一则著名的酒后故事。这个故事略有改动,以保护故事中的人物,以及忽略了一些无关的细节使之更有趣一些。

几年前,当我接到统计系主任的电话时,我正在从事维护校园电子邮件系统的工作。

“我们从部门发送电子邮件时遇到了问题。”

“有什么问题?” 我问。

“我们不能发送超过 500 英里的邮件,”主任解释说。

“咳咳”,我被我喝的拿铁呛了一口,“您再说一遍?”

“我们不能发送距这里超过 500 英里的邮件,”他重复道。 “实际上,更远一点,是 520 英里,但不能更远了。”

“嗯……电子邮件真的不会这样,通常,”我说,试着让我的声音听起来不那么慌乱。我不能和一个系主任说话时显得慌乱,即使是一个像统计系这样的相对没钱的院系。 “是什么让你觉得你不能发送邮件超过 500 英里?”

“这不是我认为的,”主任有点急躁地回答道。 “我们首先注意到了这种情况是几天前。”

“你等了几天?” 我打断他,带点颤音说道。 “这段时间你一直你不能发送电子邮件?”

“我们可以发送电子邮件。只是不超过 ——”

“—— 500 英里,我知道,”我接过他的话,“我知道了。但为什么没有你早点打电话呢?”

“好吧,我们没有收集到足够的数据来确定发生了什么,直到现在。”没错,这是统计系的主任。“不管怎么说,我请了一位地理统计学家研究它 ——”

“地理统计学家……”

“—— 是的,她制作了一张地图,显示了我们发送电子邮件能够达到的半径略超过 500 英里。在那个半径范围内有零星的几个无法到达的目的地,但我们永远不能发送比这半径更远的电子邮件。”

“我明白了,”我说,把头埋在我的手中。 “这是什么时候开始的?几天前,你说过,但是那时你的系统做了什么改变?”

“嗯,服务顾问来给我们的服务器打了补丁,并重新启动了它。但我打电话给他,他说他没有碰过邮件系统。”

“好的,让我来看看,我稍后会给你回电话,”我说。我简直觉得我在做梦,这不是愚人节。我试着回想是不是有人恶作剧报复我。

我登录了他们系的服务器,并发送了一些测试邮件。在北卡罗来纳州的三角研究园( Research Triangle Park),我自己的帐户的测试邮件顺利投递。发往里士满、亚特兰大和华盛顿的也是如此。发往普林斯顿(400 英里)的另一个邮件也正常。

但后来我尝试向孟菲斯(600 英里)发送电子邮件,失败了。波士顿,失败了。底特律,也失败了。我拿出了我的地址簿,开始试图缩小它的范围。纽约(420 英里)工作,但普罗维登斯(580 英里)失败了。

我开始怀疑自己是不是疯了。我试过给住在北卡罗来纳州的朋友发电子邮件,但他的 ISP 在西雅图。谢天谢地,它失败了。如果问题与收件人的地理位置有关,而不是他的邮件服务器,我想我要哭了。

已经确定!虽然令人难以置信,但所报告的问题是真实的、可重复的,我看了一下 sendmail.cf 文件。它看起来很正常。事实上,它看起来很熟悉。

我把它与我主目录中的 sendmail.cf 做了个对比。它没有被改过 —— 这是我写的 sendmail.cf。 而且我相当确定我没有启用某种 “FAIL_MAIL_OVER_500_MILES” 选项。我不知所措,我 telnet 到 SMTP 端口。 服务器愉快地回复了 SunOS sendmail 的横幅消息。

等一下……一个 SunOS sendmail 的横幅消息?当时,即使 Sendmail 8 已经相当成熟,Sun 公司在其操作系统中装的仍然是 Sendmail 5。作为一名优秀的系统管理员,我已经对 Sendmail 8 进行了标准化。并且作为一名优秀的系统管理员,我编写了一个 sendmail.cf,它使用了 Sendmail 8 中提供的很长的、具有自我描述意义的选项和变量,而不是 Sendmail 5 中使用的那种神秘的标点符号式配置选项。

这个细节一下子又回到了起点,我再次被我现在已经冷掉了的拿铁咖啡渣呛了。 当服务顾问“对服务器打补丁”时,他显然升级了 SunOS 的版本,并且这样做降级了 Sendmail。这次升级会将 sendmail.cf 单独留下,即使它现在是错误的版本。

事实上,Sendmail 5 —— 至少是 Sun 所带的版本,是有一些调整的 —— 它可以处理 Sendmail 8 的 sendmail.cf,因为大多数规则在那时保持不变。但新的长配置选项 —— 它被视为垃圾,并跳过。 并且 sendmail 二进制文件编译时没有针对其中大多数设置默认值,因此,在 sendmail.cf 文件中找不到合适的配置,它们被设置为 0。

被设置为 0 的配置之一是连接到远程 SMTP 服务器的超时选项。 一些实验证明,在具有典型负载的特定机器上,0 超时将在稍微超过 3 毫秒的时间内中止连接调用。

当时我们校园网络的一个奇怪的特点是它是 100% 交换的。传出的数据包不会出现路由器延迟,直到命中 POP 服务器并到达远端的路由器。因此,连接到附近网络上的轻负载的远程主机的时间实际上主要取决于到目的地的光速的速度,而不是偶然的路由器延迟。

救命!我的电子邮件发不到 500 英里以外! 1相关推荐

  1. 救命!我的电子邮件发不到 500 英里以外!

    这是一个听起来几乎不可能的事情--我甚至有点后悔将它发到网上,因为它在一个会议上成了一则著名的酒后故事.这个故事略有改动,以保护故事中的人物,以及忽略了一些无关的细节使之更有趣一些. 几年前,当我接到 ...

  2. 救命!为啥邮件发不到 500 英里以外?

    (给程序员的那些事加星标) 英文:Trey Harris,翻译:Linux中国/Xingyu.Wang linux.cn/article-10395-1.html 这是一个听起来几乎不可能的事情--我 ...

  3. 电子邮件发错了怎么撤回?原来邮件误发也有“后悔药”

    工作和生活中,一些人遇到过刚发完邮件,却突然想起忘记上传附件.内容有误等情况,追悔莫及.这种感受就像从网上开开心心买了一件衣服,试穿后发现不合身,想退货却发现没有运费险,我太太太太太难了! 那么发错邮 ...

  4. msn空间中使用电子邮件发日志项和添加音乐播放模块

    一直期望用的哪个日志服务可以只用发邮件就能发贴啦,就在google的writely Document可惜现在偶进不去啦再说是国外的英文界面!有点语言障碍-- 今天添加音乐模块时发现msn也可以用邮件发 ...

  5. 邮箱中已发出的电子邮件发错了怎么撤回?

    初入职场的小白&身经百战的老员工,在工作中都会有发错邮件的时候,如果不能撤回邮件,邮件的信息将会被暴露给他人.公司使用的是TOM大容量邮箱,是一个安全性高的国际邮箱. 初入职场的我,在发送邮件 ...

  6. python的request发请求报500原因

    1,报500后,先post看是否接口能调通, 然后postman有个code代码可以放到放到python里去执行下 一般都是参数写错了 或者是data,json写错了 比如该用data传参的用成jso ...

  7. 世界上最著名的几个 bug

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  8. 程序员脱发自救:用计算机视觉技术安全植发?

    作者 | 神经小姐姐来源 | HyperAI超神经(ID:HyperAI) 导读:面对日益严重的脱发问题,植发已经成了很多人的救命法宝.但植发市场的扩大,以及专业人员的缺乏,也让这项依赖专业医师的项目 ...

  9. python软件是免费的吗-谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信...

    前言 之前发过一篇文章,用 Python 制作的给父母天气预报提醒的小工具天气变冷了,给父母制作一个天气提醒小助手,这篇文章我同步到博客上之后,有读者在评论区留言,对于部分微信没有网页版接口,导致无法 ...

最新文章

  1. php excel类 ,phpExcel使用方法介绍
  2. SQL Server ALwayson 正在解析
  3. C#中[WebMethod]的用法,aspx、ashx、asmx
  4. vue动态绑定class,tab切换非常好用
  5. 五十九、Vue中的样式绑定
  6. VTK:几何对象之Arrow
  7. HTTP响应头和请求头信息对照表(一篇全)
  8. 机器学习变量转换(定性变量、定量变量)
  9. python 自定义类(特殊方法)
  10. ubuntu 16.04系统中nvidai、cuda、cudnn安装及注意事项
  11. jsp出现The import Xxx type is not resolved...
  12. 都说.yml 比 .properties好用,你知道为什么嘛
  13. 未来教育计算机三级课后题答案,全国计算机三级网络技术课后题答案(2016.3 未来教育).docx...
  14. kubernetes视频教程笔记 (6)-kubernetes集群安装
  15. obs录制视频做up主流程
  16. layui 模板判断_layui之模板弹框
  17. 1430. Crime and Punishment
  18. iPhone显示返回的是html界面,iPhone X怎么回到主界面?苹果X返回主页的两种方法...
  19. 【261期】为什么 BigDecimal 类不能使用 equals() 方法做等值比较?
  20. 黄反词测试,接口监控

热门文章

  1. 【附源码】计算机毕业设计JAVA智慧物业管理系统
  2. 【Android Activity】Activity的生命周期
  3. python pexpect模块详解_Python模块Pexpect详解
  4. python 公众号菜单_Python微信公众号后台开发003:自定义菜单
  5. 【51单片机】直流电机的驱动和PWM调速
  6. 小米一代扫地机器人磨损家具_大眼睛的智能家居 小米扫地机器人1S评测
  7. 米家机扫拖机器人说明书_米家扫拖机器人G1体验:智能线路规划 清扫更彻底
  8. 教你用Python爬取动态加载的数据
  9. HSDPA,HSUPA,HSPA+ 三种技术之间的区别
  10. 在控制面板中,找不到安装的软件 pr,但是要对它进行清理