在 Mac 上,我可以使用 command 从命令行发送电子邮件mail
,但我的 MacBookPro 上肯定没有安装 SMTP 服务器。
那么,可以在没有 SMTP 服务器的情况下使用 Ruby 发送电子邮件吗?我不在乎速度,我只想要一种无需其他软件即可发送电子邮件的方法。
您可以mail
从 Ruby 代码中调用该命令。使用system
或反引号或更复杂的东西,比如open3
与系统命令交互......这是对不同方法的一个很好的概述:http: //mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/
mail
和sendmail
我不太了解mail
,但在 Google 上快速搜索的结果似乎表明它使用 postfix,这是安装在 Mac 上的默认 SMTP 服务器。换句话说,您已经在 Macbook Pro 上安装并运行了 SMTP 服务器。
那么,可以在没有 SMTP 服务器的情况下使用 Ruby 发送电子邮件吗?
是和否。您不需要在与 Ruby 进程相同的机器上运行 SMTP 服务器。事实上,您甚至不需要运行自己的 SMTP 服务器。但是,您需要一个 SMTP 服务器来发送您的电子邮件。
这篇关于 howstuffworks的文章很好地解释了 SMTP 的作用。从本质上讲,您需要一个 SMTP 服务器来接收您的电子邮件、与其他 SMTP 服务器通信并传递您的电子邮件以进行传递。使用 Ruby,您可以配置Net::SMTP以连接到您选择的 SMTP 服务器。
如果你想编写和执行一个脚本来发送少量的电子邮件,请在 Gmail/Live 上创建一个虚假的电子邮件帐户,并使用他们的 SMTP 服务器发送电子邮件。
如果您想构建和启动一个向您的用户发送电子邮件的应用程序,请使用Mandrill、MailGun 或 SendGrid。Mandrill 有一个免费层供您开始使用。
我不建议在大多数用例中运行您自己的 SMTP 服务器,因为您的电子邮件可能会被标记为垃圾邮件。(Comcast 也可能认为您的网络中有恶意软件。) Mandrill 等专业服务将帮助您设置SPF 和 DKIM 记录,以验证您的电子邮件并提高发送声誉。
(如果您只想在开发模式下测试电子邮件,请使用MailCatcher。)
注册一个Mandrill帐户,然后使用Ruby 中的Net::SMTP连接到他们的 SMTP 服务器。不需要额外的软件。
If your mail
command is working, then you can send mail from within
ruby. And if your mail
command is working on your mac already, then
you also already have an SMTP server working on your mac, since by
default it uses postfix
which comes installed. The mail
command
defaults to using /usr/sbin/sendmail
, which is in this case an
interface to postfix
. (Try man sendmail
from the Terminal.)
Now, that said, you will probably experience something like this when trying to use Net::SMTP locally:
[3] pry(main)> smtp = Net::SMTP.start('localhost',25)
Errno::ECONNREFUSED: Connection refused - connect(2)
This means that you need to do something to tell your mac that it can
accept connections on port 25. Another alternative is to use that
sendmail
program as a transport access method, which might actually be the
better option. The port 25 access is turned off so that no one else
can use your mac as a mail relay. Having to go through the sendmail
command means that only programs on your mac can send mail (go
figure).
My suggestion here would be to use the mail
gem (or pony
if you
prefer) and configure it to use sendmail
. From the mail
README
file:
Sending via sendmail can be done like so:
mail = Mail.new do from 'me@test.lindsaar.net' to 'you@test.lindsaar.net' subject 'Here is the image you wanted' body File.read('body.txt') add_file :filename => 'somefile.png', :content => File.read('/somefile.png') end mail.delivery_method :sendmail mail.deliver
Likewise, if you're using ActionMailer
you can configure it to use
sendmail
as well.
你试过小马宝石吗?它提供了一个非常简单的界面sendmail
,应该已经安装在您的 Mac 上。
您不必拥有 SMTP 服务器,您只需要知道可以连接的服务器在哪里。
请参阅网络::SMTP。它是 Ruby 的一部分。
您的目标是从 CLI 编写和发送电子邮件吗?
有许多 mailer gem,包括mail。您可能还可以直接使用 Ruby 的 Net::SMTP 并获得一些工作,这取决于您要做什么。
如果您使用mail
or/usr/sbin/sendmail
命令并且您的邮件成功发送,那么您的机器上运行了一个 MTA(邮件/消息传输代理,例如 postfix、sendmail 或其他)。
当您使用mail
命令发送邮件时guser@gmail.com
,您的mail
命令会将邮件提交到本地 SMTP 服务器。
(本地)SMTP 服务器将执行以下任务。
Mx 服务器会将邮件投递到对应的邮箱(guser)。
以上答案建议您使用 Net::SMTP 连接到某个 SMTP 服务器并将邮件交给该 SMTP 服务器,该服务器将再次执行上述任务(上述本地 SMTP 服务器)以执行传递。
所以要发送邮件,你需要一个 SMTP 服务器。或者您将不得不自己编写代码/使用一些库来执行 MX 查找并通过按照 RFC 2821 使用 SMTP 命令将邮件移交给 MX 服务器。