我正在 Rails 中实现一种动态邮件列表系统。我希望基本上发送一封电子邮件并让收件人以这种形式接收它:
From: person@whosentthis.com
To: mailing-list@mysite.com
<body>
基本上,挑战是如何在定义不同To:
标头的同时向地址发送电子邮件,以便他们可以轻松回复邮件列表或仅回复原始发件人?
我正在 Rails 中实现一种动态邮件列表系统。我希望基本上发送一封电子邮件并让收件人以这种形式接收它:
From: person@whosentthis.com
To: mailing-list@mysite.com
<body>
基本上,挑战是如何在定义不同To:
标头的同时向地址发送电子邮件,以便他们可以轻松回复邮件列表或仅回复原始发件人?
在电子邮件和物理邮件中一样(纸信封中的纸张),信封上的收件人可能与信纸上的收件人不同。
由于邮递员只会考虑信封的收件人,所以邮件服务器也是如此。
这意味着,实际上可以告诉 smtp 服务向与To:
电子邮件标头字段中列出的收件人不同的收件人发送电子邮件。
您可以手动尝试一下,例如使用sendmail
postfix 命令。
# 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
,但后者将显示在邮件客户端的收件人字段中。
内部ActionMailer::Base
使用邮件 gem。目前,2013 年 4 月,有一个拉取请求,允许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
为什么不为此使用密件抄送标头?放入person@whoshouldreceivethis.com
密件抄送和mailing-list@mysite.com
收件人。
澄清:
对此没有技术解决方案。电子邮件标题做他们所做的事情,一旦电子邮件在路上,你就无法影响他们。
不过,我敢肯定,您可以找到 TO、CC、BCC 和 REPLY-TO 的组合使用,从而满足您的需求。