我正在使用Pony gem发送电子邮件。假设我有两个选项对我开放,使用时是否有内存优势:smtp或:sendmail?
选项1:smtp
这里,Ruby直接连接到SMTP服务器。
Pony.mail(
:to => 'you@example.com',
:via => :smtp,
:via_options => {
:address => 'smtp.yourserver.com',
:port => '25',
:user_name => 'user',
:password => 'password',
:authentication => :plain, # :plain, :login, :cram_md5, no auth by default
:domain => "localhost.localdomain" # the HELO domain provided by the client to the server
})
选项2:sendmail
此处生成本地sendmail
二进制文件。
Pony.mail(
:to => 'you@example.com',
:via => :sendmail,
:via_options => {
:location => '/path/to/sendmail',
:arguments => '-t'
})
特别是,我担心在附加文件之前将文件的全部内容加载到内存中 - 但这似乎在两种模式中都是必要的:
Pony.mail([...], :attachments => {"foo.zip" => File.read("path/to/foo.zip")})
这类似于Sendmail vs SMTP,但这些答案并未涵盖我的问题。
答案 0 :(得分:1)
首先,Pony默认使用sendmail,所以我猜你直到你知道你需要smtp(这只是没有sendmail的机器上的情况,这也是由小马本身决定的),我只是去找默认值。
另一方面:由于您担心系统负载,我还建议使用sendmail。这是因为你的ruby / rails应用程序会将系统负载(附件)发送到sendmail,这可能会解决内存负载过多的问题,比运行smtp本身的ruby更快。
但说实话,我不认为两个版本内存加载之间存在太大差异,因为两者都直接接收附件。既然你在谈论电子邮件,我不认为你在谈论数百兆字节的文件,对吗?
答案 1 :(得分:1)
我维护Pony宝石。
您通过电子邮件发送的文件有多大?我不认为传输方法之间的内存使用会有太大差异。
如果你必须发送大文件,我会使用不同的传输方法,我通常不会通过smtp发送大文件。
您也可以尝试直接使用邮件库:
它可以为大文件提供更好的性能。
如果这不起作用,您可能不得不求助于调用uuencode并将输出传递给邮件(即uuencode file.dat | mail foo@bar.com)