Чтобы минимизировать использование памяти, я должен выбрать Pony's: sendmail или: smtp mode? - PullRequest
1 голос
/ 15 декабря 2011

Я использую 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 против SMTP , но эти ответы не охватывают мой вопрос.

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Я поддерживаю драгоценный камень Пони.

Насколько большими являются файлы, которые вы отправляете по электронной почте?Я не думаю, что будет большая разница в использовании памяти между транспортными методами.

Если вам нужно отправить большие файлы, я бы использовал другой метод транспорта, я обычно не отправляю большие файлы поверхsmtp.

Вы также можете попробовать использовать почтовую библиотеку напрямую:

https://github.com/mikel/mail

Это может повысить производительность для больших файлов.

Еслиэто не работает, вам, возможно, придется прибегнуть к вызову uuencode и передаче вывода по почте (например, uuencode file.dat | mail foo@bar.com)

1 голос
/ 15 декабря 2011

Прежде всего, Pony по умолчанию использует sendmail, так что я думаю, пока вы не узнаете, что вам нужен smtp (что имеет место только на машинах без sendmail, что также определяется самой пони), я бы просто пошел на по умолчанию.

На другом замечании: так как вы беспокоитесь о загрузке системы, я бы также предложил sendmail. Это связано с тем, что ваше приложение ruby ​​/ rails отправит загрузку системы (вложение) на sendmail, что, вероятно, решит проблему слишком большой загрузки памяти, быстрее, чем при запуске самого smtp в ruby.

Но, честно говоря, я не думаю, что существует большая разница между загрузкой памяти обеих версий, поскольку обе получают вложения напрямую. Поскольку вы говорите об электронной почте, я не думаю, что вы говорите о сотнях мегабайтных файлов, верно?

...