像 Craigslist 一样的电子邮件转发 - Rails

2023-11-21

我正在尝试做 craigslist 的匿名电子邮件所做的事情,但使用 Rails,而且价格也便宜。对我来说,能够向电子邮件添加标头非常重要,这就是基本电子邮件转发不起作用的原因。

我想到的一种方法是使用 SMTP 服务器,每当我通过 POP/IMAP 阅读电子邮件时,我都会向电子邮件的真正收件人发送一封电子邮件,并使用正确的发件人地址并添加标题。这可行,但 SMTP 服务器相对昂贵。

另一种方法是转发/重定向电子邮件,但在中间添加标头。但我找不到任何服务或宝石来做到这一点。

请不要只说“电子邮件管道”,因为这实际上意味着将电子邮件提供给您的 Rails 程序,收到电子邮件后您会做什么?你实际上如何转发它。

有任何想法吗?


您需要一个电子邮件地址,该地址使用具有系统管理员控制的 MX 服务器的域。这可能是您的主域的子域。然后你要做的就是配置 MTA 软件(Exim、Postfix...希望不是 qMail!)以将该电子邮件传送到 Rails:

http://guides.rubyonrails.org/action_mailer_basics.html#receiving-emails

如果 MTA 没有安装在与 Rails 应用程序本身相同的服务器上,则您必须将电子邮件通过管道传输到一个临时的转发器脚本,该脚本会执行将电子邮件发布到您的应用程序的过程,然后您可以手动在其中执行一些操作将其传递给您的邮寄者。

在您的邮件程序中,您可以访问所有标头、正文、附件等。只要您在主题或回复地址中放置一些唯一标识符,您就可以决定实例化哪个邮件程序以将邮件转发到其邮件程序上。预期收件人。

我们还没有这样做,但出于同样的原因我们将会这样做。然而,如果您不熟悉 MTA 的配置,这可能有点难以理解。您有可以完成此任务的系统管理员吗?

在代码级别,我会这样做:

  1. 用户 A (id = 1234) 向用户 B (id = 5678) 发送电子邮件

  2. 从您拥有的任何您想要的地址发送电子邮件,但设置Reply-To:类似的东西Reply-To: <mail-1234-5678-a[email protected]>

    这绝对是这项工作的关键。它包括发送者的 ID、接收者的 ID 以及防止伪造的校验和。校验和可以从每个用户唯一的盐生成,很简单:

    checksum = Digest::MD5.hexdigest("#{sender.id}-#{recipient.id}-#{sender.mailer_salt}")

  3. 现在,当您通过为“usermessages.your-domain.com”域配置的 MX 收到回复时,您要做的第一件事就是通过解析To:场地。您可以轻松识别发件人和收件人是谁split取出零件。然后,您可以生成校验和并确保其匹配,以确保有人不会试图恶意发送邮件,就像邮件来自其他用户一样。

  4. 一旦您确定了所涉及的用户,请继续发送另一封电子邮件,其中包含其中一个特殊的Reply-To:标头(显然,ID 已反转并且摘要使用不同的盐完成)。

这是一个非常基本但功能完善的示例。您可以将此摘要放在您想要的任何位置,前提是当回复返回时它将被保留(这使得Reply-To:标题很合适。有些服务使用主题行。

我会避免让盐由用户控制,例如用户的密码哈希,因为如果用户更改该信息(更改其密码),校验和将不再有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

像 Craigslist 一样的电子邮件转发 - Rails 的相关文章

随机推荐

  • 将移动应用程序同步到 Android Wear

    根据文档 打包可穿戴应用程序我正在使用以下代码 dependencies compile com google android gms play services 5 0 aar compile com android support su
  • Python Pandas - 缺少必需的依赖项 ['numpy'] 1

    从昨天开始 当我尝试在 anaconda 上导入包时出现此错误 ImportError Missing required dependencies numpy 我尝试卸载 Anaconda 和 Python 切换到 Python 2 7 但
  • 在 codeigniter 中调试路由?

    我想知道是否有任何简单的方法可以在 codeigniter 中调试路由 最好我希望能够在日志中看到以下内容 Client sent apps something Route found apps any gt applications se
  • SQL Server:拆分操作

    如何在 SQL Server 中拆分字符串 例子 输入字符串 stack over flow Result stack over flow 如果您不能使用表值参数 请参阅 SQL Server 2008 中使用表值参数的数组和列表 作者 E
  • 是否可以在 Visual Studio 中为动态对象提供智能感知?

    我在项目中使用动态对象 并且我想为该对象提供智能感知 我知道 Visual Studio 无法知道智能感知要显示什么 但如果我可以插入智能感知 我确实知道应该显示哪些条目 有没有办法扩展 Visual Studio 的智能感知 如果是这样
  • Android 测试分片

    谁能解释一下 android 中的测试分片意味着什么 如果有人可以分享任何教程将会非常有帮助 碎片这个词的意思是整体的一小部分 仅凭一个数字如何进行分片 我应该在什么基础上指定 shardIndex 定义如开发人员文档中所示 测试分片 测试
  • 如何在 Eclipse 中编辑 Maven 依赖项中的“.class”文件

    好的 我有我的 Java 项目 在项目资源管理器的 Maven 依赖项项目文件夹下 我遇到了jar文件夹 里面有一个 class文件 现在 我点击了Download Sources我可以查看 class文件作为 Java 文件 但我无法在
  • COM 如何选择如何编组接口?

    据我了解 在 COM 中实现编组的方法有以下三种 类型库编组 代理 存根编组 通过对象实现 IMarshal 现在该组件如何consumer 用户 选择使用哪一个 它是自行决定并使用首选方式 还是调用某些内置函数并为其解决问题 我目前遇到以
  • 从必需的文件扩展 Node.js 中的 Array.prototype

    我将以下内容保存在 test js 中 它成功地在浏览器中扩展了Array 但它似乎不适用于node和require 有人可以解释这里出了什么问题吗 function Array prototype max function return
  • Angularjs 中的记住我功能和令牌

    我正在寻找更好的方法来解决我的问题 我的登录表单上有记住我的功能 当用户单击记住我框时 我的 API 会向我发送令牌 我的问题是存储此令牌并在用户返回我的网站时再次对用户进行身份验证的最佳方法是什么 我以为 创建一个 Cookie 并在其中
  • R 中给定函数的包名称[重复]

    这个问题在这里已经有答案了 可能的重复 如何确定函数的名称空间 我不知道该怎么做 你如何知道 R 中某个函数的包名称 我想要一个函数 给出函数的名称 返回拥有它的包的名称 有什么建议吗 可能有更好的解决方案 但是find functionn
  • 获取列中仅出现一次的值的数量

    首先 如果相关的话 我正在使用 MySQL 尽管我认为解决方案可以跨数据库产品工作 我的问题是 我有一个带有单列的简单表格 该列没有任何约束 此列中有一些简单的数据 例如 a a b c d d 我需要获取只出现一次的值的数量 计数 从上面
  • malloc分配的内存的保护标志是什么?

    根据这个线程 分配的内存malloc至少有PROT READ PROT EXEC 否则所包含的函数无法执行 man malloc没有提到任何有关保护的内容 因此提出了这个问题 malloc 通常会返回具有读写权限的内存 某些体系结构 例如
  • h.264 视频无法在 iOS 上播放

    我有一个用 h 264 编码的视频文件无法在 iOS 上播放 我想知道原因 这是 HTML
  • Android 应用程序中的 C# .dll 库

    我目前正在使用 Monodroid 开发 Android 应用程序 我对电话应用程序相当陌生 因此对以下几件事感到困惑 Android 库的定义是什么 我使用 Mono 模板创建 Android 库 创建 Mono for Android
  • 什么时候需要延迟加载?

    我懒惰地加载我的所有成员 我这样做已经有一段时间了 并且只是认为延迟加载从表面上看是一件好事 假设我们有 public class SomeClass public int anInt public SomeReferenceType me
  • 如何包含 CEFSharp 所需的 VC++ 可再发行文件

    使用 CEFSharp 浏览器构建应用程序在我的计算机上运行良好 但在服务器上崩溃并出现以下错误 System IO FileLoadException 无法加载 CefSharp Core dll 导入的过程 我在互联网上看到过这个问题
  • XHTML 中是否有类似于“colgroup”的名为“rowgroup”的属性?

    下列w3c文件提及rowgroup http www w3 org TR html401 struct tables html h 11 2 6 http www w3 org TR html401 struct tables html r
  • 如何在 VB6 中设置完整的内部版本号(Major.Minor.Build.Revision)

    How to set the complete version number from vb6 VPIaccessMaker vbg from Visual Basic i can set Major Minor Revision as 3
  • 像 Craigslist 一样的电子邮件转发 - Rails

    我正在尝试做 craigslist 的匿名电子邮件所做的事情 但使用 Rails 而且价格也便宜 对我来说 能够向电子邮件添加标头非常重要 这就是基本电子邮件转发不起作用的原因 我想到的一种方法是使用 SMTP 服务器 每当我通过 POP