在Mac上,我可以使用命令mail
从命令行发送电子邮件,但我肯定没有在我的MacBookPro上安装SMTP服务器。
那么,有没有SMTP服务器可以发送带有Ruby的电子邮件?我不关心速度,我只想要一种无需额外软件即可发送电子邮件的方式。
答案 0 :(得分:5)
您可以在Ruby代码中调用mail
命令。使用system
或反引号或更复杂的内容(如open3
)与系统命令进行交互...以下是对不同方法的一个很好的概述:http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/
答案 1 :(得分:4)
mail
和sendmail
我对mail
了解不多,但Google上的results from a quick search似乎表示它使用的是postfix,它是Mac上安装的默认SMTP服务器。换句话说,您已在Macbook Pro上安装并运行SMTP服务器。
那么,可以在没有SMTP服务器的情况下使用Ruby发送电子邮件吗?
是和否。您不需要在与Ruby进程相同的计算机上运行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。)
答案 2 :(得分:2)
如果您的mail
命令正常,那么您可以从内部发送邮件
红宝石。如果您的mail
命令已在您的Mac上运行,那么
你也已经在你的mac上运行了一个SMTP服务器
默认情况下,它使用已安装的postfix
。 mail
命令
默认使用/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服务器将执行以下任务。
Mx服务器会将邮件发送到相应的邮箱(guser)。
以上答案建议您使用Net :: SMTP,您将连接到某个SMTP服务器并将邮件移交给该SMTP服务器,这将再次执行上述任务(上述本地SMTP服务器)以执行传递。
所以要发送邮件,你需要一个SMTP服务器。或者你必须自己编码/使用一些库来执行MX查找,并通过根据RFC 2821说出SMTP命令将邮件移交给MX服务器。