使用Ruby发送电子邮件而不安装/运行SMTP服务器?

时间:2013-07-23 14:03:09

标签: ruby email smtp sendmail

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

那么,有没有SMTP服务器可以发送带有Ruby的电子邮件?我不关心速度,我只想要一种无需额外软件即可发送电子邮件的方式。

7 个答案:

答案 0 :(得分:5)

您可以在Ruby代码中调用mail命令。使用system或反引号或更复杂的内容(如open3)与系统命令进行交互...以下是对不同方法的一个很好的概述:http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/

答案 1 :(得分:4)

关于mailsendmail

我对mail了解不多,但Google上的results from a quick search似乎表示它使用的是postfix,它是Mac上安装的默认SMTP服务器。换句话说,您已在Macbook Pro上安装并运行SMTP服务器。

关于Ruby

  

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

是和否。您不需要在与Ruby进程相同的计算机上运行SMTP服务器。实际上,您甚至不需要运行自己的SMTP服务器。但是,您需要一个SMTP服务器某处来发送您的电子邮件。

关于SMTP

这个article on howstuffworks很好地解释了SMTP的作用。从本质上讲,您需要一个接收电子邮件的SMTP服务器,与其他SMTP服务器通信,并传递您的电子邮件以进行传递。使用Ruby,您可以配置Net::SMTP以连接到您选择的SMTP服务器。

关于你想做什么

如果您要编写并执行将提供少量电子邮件的脚本,请在Gmail / Live上创建一个虚假的电子邮件帐户,并使用他们的SMTP服务器发送电子邮件。

如果您要构建并启动可向用户发送电子邮件的应用,请使用Mandrill,MailGun或SendGrid。 Mandrill有免费套餐供您开始使用。

我建议您不要为大多数用例运行自己的SMTP服务器,因为您的电子邮件可能会被标记为垃圾邮件。 (康卡斯特可能还认为您的网络上有恶意软件。)像Mandrill这样的专业服务可以帮助您设置SPF and DKIM records来验证您的电子邮件并提高发送声誉。

(如果您只想在开发模式下测试电子邮件,请使用MailCatcher。)

结论

注册Mandrill帐户,然后在Ruby中使用Net::SMTP连接到他们的SMTP服务器。无需其他软件。

答案 2 :(得分:2)

如果您的mail命令正常,那么您可以从内部发送邮件 红宝石。如果您的mail命令已在您的Mac上运行,那么 你也已经在你的mac上运行了一个SMTP服务器 默认情况下,它使用已安装的postfixmail命令 默认使用/usr/sbin/sendmail,在这种情况下是 postfix的界面。 (从终端尝试man sendmail。)

现在,也就是说,当你尝试在本地使用Net :: SMTP时,你可能会遇到类似的事情:

[3] pry(main)> smtp = Net::SMTP.start('localhost',25)
Errno::ECONNREFUSED: Connection refused - connect(2)

这意味着您需要做一些事情来告诉您的Mac它可以 接受端口25上的连接。另一种方法是使用它 sendmail程序作为传输访问方法,实际上可能是 更好的选择。端口25访问被关闭,以便没有其他人 可以使用您的mac作为邮件中继。必须通过sendmail 命令意味着只有Mac上的程序才能发送邮件(转到 图)。

我的建议是使用mail宝石(或pony如果你 (并且)将其配置为使用sendmail。来自mail README 文件:

  

通过sendmail发送可以这样完成:

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

同样,如果您使用ActionMailer,则可以将其配置为使用 sendmail也是如此。

答案 3 :(得分:2)

你试过Pony gem吗?它为sendmail提供了一个非常简单的界面,它应该已经安装在你的Mac上了。

答案 4 :(得分:1)

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

有许多邮件宝石,包括mail。您可能还可以直接使用Ruby的Net :: SMTP并根据您尝试的操作获得一些工作。

答案 5 :(得分:1)

您不必拥有SMTP服务器,只需要知道可以连接到哪一个。

Net::SMTP。它是Ruby的一部分。

答案 6 :(得分:0)

如果您使用mail/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服务器。