1

我正在使用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二进制文件。

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

4

2 回答 2

1

首先,Pony 默认使用 sendmail,所以我猜测直到您知道您需要 smtp(只有在没有 sendmail 的机器上才会出现这种情况,这也由 pony 本身决定),我会选择默认值。

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

但老实说,我不认为两个版本的内存负载有太大区别,因为两者都直接接收附件。既然您在谈论电子邮件,我不认为您在谈论数百兆字节的文件,对吗?

于 2011-12-15T09:38:06.580 回答
1

我维护 Pony gem。

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

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

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

https://github.com/mikel/mail

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

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

于 2011-12-16T18:54:26.743 回答