gpt4 book ai didi

ruby-on-rails - 电子邮件转发,如 Craigslist - Rails

转载 作者:行者123 更新时间:2023-12-04 05:34:06 26 4
gpt4 key购买 nike

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

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

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

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

有任何想法吗?

最佳答案

您将需要一个电子邮件地址,该地址使用具有您的系统管理员可以控制的 MX 服务器的域。这可能是您的主域的子域。然后你要做的是配置 MTA 软件(Exim、Postfix...希望不是 qMail!)将该电子邮件通过管道传送到 Rails:
http://guides.rubyonrails.org/action_mailer_basics.html#receiving-emails
如果 MTA 没有安装在与 rails 应用程序本身相同的服务器上,您必须将电子邮件通过管道传输到一个小的临时转发器脚本,该脚本执行将电子邮件发布到您的应用程序的过程,然后您手动将其传递给您的邮寄者。
在您的邮件程序中,您可以访问所有标题、正文、附件等。只要您在主题或回复地址中放置了一些唯一标识符,您就可以决定实例化哪个邮件程序以将邮件转发到它的预期收件人。
我们还没有这样做,但出于同样的原因,我们将这样做。但是,如果您不熟悉配置 MTA,这可能会有点过头。您有可以执行此任务的系统管理员吗?
在代码级别,我会这样做:

  • 用户 A (id = 1234) 向用户 B (id = 5678) 发送电子邮件
  • 从您想要的任何地址发送电子邮件,您拥有该地址,但将 Reply-To: 设置为类似 Reply-To: <mail-1234-5678-abcdefabcd1234567890abcdefabcdef@usermessages.your-domain.com> 的内容
    这绝对是这项工作的关键。它包括发件人的 ID、收件人的 ID 和防止伪造的校验和。校验和可以从每个用户唯一的盐生成,并且很简单:checksum = Digest::MD5.hexdigest("#{sender.id}-#{recipient.id}-#{sender.mailer_salt}")
  • 现在,当您通过为“usermessages.your-domain.com”域配置的 MX 收到回复时,您要做的第一件事是通过解析 To: 字段来识别发件人和收件人。您可以通过 split 输出部分轻松识别发件人和收件人。然后,您可以生成校验和并确保它匹配,以确保有人不会像来自其他用户一样恶意发送邮件。
  • 一旦确定了所涉及的用户,继续发送另一封电子邮件,其中包含这些特殊的 Reply-To: header 之一(显然,ID 已反转,摘要使用不同的盐完成)。

  • 这是一个非常基本但功能完善的示例。你可以把这个摘要放在任何你想要的地方,只要在回复回来时它会被保留(这使得 Reply-To: header 非常适合。一些服务使用主题行代替。
    我会避免使盐成为用户控制的东西,例如用户的密码哈希,因为如果用户更改该信息(更改他们的密码),校验和将不再有效。

    关于ruby-on-rails - 电子邮件转发,如 Craigslist - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078885/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com