【问题标题】:Send email to address alternate from "To:"将电子邮件发送到“收件人:”的备用地址
【发布时间】:2012-09-11 10:02:42
【问题描述】:

我正在 Rails 中实现一种动态邮件列表系统。我希望基本上发送一封电子邮件并让收件人以这种形式接收它:

From: person@whosentthis.com
To: mailing-list@mysite.com

<body>

基本上,挑战在于如何在定义不同的To: 标头的同时向某个地址发送电子邮件,以便他们可以轻松回复邮件列表或仅回复原始发件人?

【问题讨论】:

  • 这里的关键是信封头和邮件头的区别。 BCC 是通过将收件人列表复制到信封中,然后删除 BCC 标头来实现的。基本上,通过控制信封标题,您可以将任何您喜欢的内容放入 To:、Cc: 和 From: 标题中。我不是 Ruby 人,所以我觉得没有资格发布答案,但希望这至少能让你开始。

标签: email ruby-on-rails-3.2 actionmailer


【解决方案1】:

邮件与信封

在电子邮件中与在物理邮件中一样(纸信封中的纸张),信封上的收件人可能与信纸上的收件人不同。

由于邮递员只会考虑信封的收件人,所以邮件服务器也是如此。

这意味着,实际上可以告诉 smtp 服务向与电子邮件标头的 To: 字段中列出的收件人不同的收件人发送电子邮件。

手动尝试

您可以手动尝试一下,例如使用 postfix 的 sendmail 命令。

# bash
sendmail really_send_to_this_address@example.com < mail.txt

在哪里

# mail.txt
From: foo@example.com
To: this_will_be_seen_in_the_to_field_in_email_clients@example.com
Subject: Testmail

This is a test mail.

这会将电子邮件发送到really_send_to_this_address@example.com,而不是this_will_be_seen_in_the_to_field_in_email_clients@example.com,但后者将显示在邮件客户端的收件人字段中。

在 Rails 中指定 Envelope_to 字段

ActionMailer::Base 在内部使用mail gem。目前,2013 年 4 月,有一个 pull request,允许在传递之前在消息上指定 envelope_to 字段。

在拉取之前,您可以在Gemfile 中指定分叉。

# Gemfile 
# ...
gem 'mail', git: 'git://github.com/jeremy/mail.git'

之后您需要运行 bundle update mail,并且根据您当前的 rails 版本,可能还需要运行 bundle update rails 以解决一些依赖问题。

之后,您可以像这样设置邮件的信封收件人:

# rails
message # => <Mail::Message ...>
message.to = [ "this_will_be_seen_in_the_to_field_in_email_clients@example.com" ]
message.smtp_envelope_to = [ "really_send_to_this_address@example.com" ]
message.from = ...
message.subject = ...
message.body = ...
message.deliver

文档

【讨论】:

    【解决方案2】:

    为什么不为此使用密件抄送标头?将person@whoshouldreceivethis.com 放入密件抄送,mailing-list@mysite.com 放入 TO。

    澄清:

    对此没有技术解决方案。电子邮件标题做他们所做的事情,一旦电子邮件在路上,你就无法影响他们。

    不过,我敢肯定,您可以找到 TO、CC、BCC 和 REPLY-TO 的组合用法,从而满足您的需求。

    【讨论】:

    • 您可能一方面想了解 CC 和 BCC 之间的区别,另一方面也想了解 REPLY-TO 的使用。您应该能够找到适合您需求的这些组合使用。
    • 这样做会导致无限循环,因为它只会继续向自己(邮件列表)发送电子邮件。
    • 然后将无回复地址放入收件人并将邮件列表添加到回复或类似内容中。
    • 是的,我不得不重新编写一些邮件 gem 的 SMTP 传递方法。如果你想要它就在这里:github.com/carlosdp/mail
    • 你应该在你的问题中提到你的项目。您的解决方案是与 EnvelopeRecipient 相关的所有内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多