8

在 Mac 上,我可以使用 command 从命令行发送电子邮件mail,但我的 MacBookPro 上肯定没有安装 SMTP 服务器。

那么,可以在没有 SMTP 服务器的情况下使用 Ruby 发送电子邮件吗?我不在乎速度,我只想要一种无需其他软件即可发送电子邮件的方法。

4

7 回答 7

5

您可以mail从 Ruby 代码中调用该命令。使用system或反引号或更复杂的东西,比如open3与系统命令交互......这是对不同方法的一个很好的概述:http: //mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/

于 2013-07-28T15:57:05.163 回答
5

关于mailsendmail

我不太了解mail,但在 Google 上快速搜索的结果似乎表明它使用 postfix,这是安装在 Mac 上的默认 SMTP 服务器。换句话说,您已经在 Macbook Pro 上安装并运行了 SMTP 服务器。

关于红宝石

那么,可以在没有 SMTP 服务器的情况下使用 Ruby 发送电子邮件吗?

是和否。您不需要在与 Ruby 进程相同的机器上运行 SMTP 服务器。事实上,您甚至不需要运行自己的 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 服务器。不需要额外的软件。

于 2013-07-31T21:40:12.150 回答
2

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.

于 2013-08-03T14:14:02.690 回答
2

你试过小马宝石吗?它提供了一个非常简单的界面sendmail,应该已经安装在您的 Mac 上。

于 2013-08-03T18:02:21.800 回答
1

您不必拥有 SMTP 服务器,您只需要知道可以连接的服务器在哪里。

请参阅网络::SMTP。它是 Ruby 的一部分。

于 2013-07-23T15:06:58.257 回答
1

您的目标是从 CLI 编写和发送电子邮件吗?

有许多 mailer gem,包括mail。您可能还可以直接使用 Ruby 的 Net::SMTP 并获得一些工作,这取决于您要做什么。

于 2013-07-23T14:14:50.127 回答
0

如果您使用mailor/usr/sbin/sendmail命令并且您的邮件成功发送,那么您的机器上运行了一个 MTA(邮件/消息传输代理,例如 postfix、sendmail 或其他)。

当您使用mail命令发送邮件时guser@gmail.com,您的mail命令会将邮件提交到本地 SMTP 服务器。

(本地)SMTP 服务器将执行以下任务。

  • SMTP 服务器(MTA)将为 gmail.com 进行 MX 查找
  • 连接到 MX 服务器的 25 端口并通过 SMTP(HELO、MAIL FROM、RCPT TO、DATA 命令)传递邮件

Mx 服务器会将邮件投递到对应的邮箱(guser)。

以上答案建议您使用 Net::SMTP 连接到某个 SMTP 服务器并将邮件交给该 SMTP 服务器,该服务器将再次执行上述任务(上述本地 SMTP 服务器)以执行传递。

所以要发送邮件,你需要一个 SMTP 服务器。或者您将不得不自己编写代码/使用一些库来执行 MX 查找并通过按照 RFC 2821 使用 SMTP 命令将邮件移交给 MX 服务器。

于 2013-08-03T22:54:59.403 回答