为了最大限度地减少内存使用,我应该选择Pony的:sendmail还是:smtp模式?

时间:2011-12-15 00:00:33

标签: ruby pony

我正在使用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,但这些答案并未涵盖我的问题。

2 个答案:

答案 0 :(得分:1)

首先,Pony默认使用sendmail,所以我猜你直到你知道你需要smtp(这只是没有sendmail的机器上的情况,这也是由小马本身决定的),我只是去找默认值。

另一方面:由于您担心系统负载,我还建议使用sendmail。这是因为你的ruby / rails应用程序会将系统负载(附件)发送到sendmail,这可能会解决内存负载过多的问题,比运行smtp本身的ruby更快。

但说实话,我不认为两个版本内存加载之间存在太大差异,因为两者都直接接收附件。既然你在谈论电子邮件,我不认为你在谈论数百兆字节的文件,对吗?

答案 1 :(得分:1)

我维护Pony宝石。

您通过电子邮件发送的文件有多大?我不认为传输方法之间的内存使用会有太大差异。

如果你必须发送大文件,我会使用不同的传输方法,我通常不会通过smtp发送大文件。

您也可以尝试直接使用邮件库:

https://github.com/mikel/mail

它可以为大文件提供更好的性能。

如果这不起作用,您可能不得不求助于调用uuencode并将输出传递给邮件(即uuencode file.dat | mail foo@bar.com)