从"收件人:"发送电子邮件到地址替代

hmi*_*ind 2 email actionmailer ruby-on-rails-3.2

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

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

<body>
Run Code Online (Sandbox Code Playgroud)

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

fie*_*edl 6

邮件与信封

在电子邮件中,如实体邮件(纸质信封中的纸张),信封上的收件人可能与信件表本身的收件人不同.

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

这意味着,实际上可以告诉smtp服务发送并通过电子邮件发送给不同于To:电子邮件标题字段中列出的收件人的收件人.

手动尝试这个

您可以手动尝试此操作,例如,使用sendmailpostfix命令.

# bash
sendmail really_send_to_this_address@example.com < mail.txt
Run Code Online (Sandbox Code Playgroud)

哪里

# 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.
Run Code Online (Sandbox Code Playgroud)

这将发送电子邮件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内部使用的邮件宝石.目前,2013年4月,有一个拉取请求,允许envelope_to在发送前指定消息上的字段.

在拉出之前,您可以在中指定fork Gemfile.

# Gemfile 
# ...
gem 'mail', git: 'git://github.com/jeremy/mail.git'
Run Code Online (Sandbox Code Playgroud)

您需要在此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
Run Code Online (Sandbox Code Playgroud)

文档