Как я могу работать с / около ограничений SMTP исходящей отправки Gmail? - PullRequest
6 голосов
/ 09 марта 2009

Я использую свою учетную запись Gmail Apps для домена для отправки электронной почты в моем приложении rails для стандартных автоматических писем (регистрация пользователя, забытый пароль, уведомление администратора о новых комментариях и т. Д.), Но я беспокоюсь о 500 электронных письмах за дневной лимит установлен Google.

Google предлагает один из способов преодоления ограничения - использовать несколько учетных записей пользователей.

Итак, я настроил 10 дополнительных учетных записей пользователей gmail (noreply1, noreply2, noreply3 и т. Д.) - я хотел бы отследить, когда какая-либо из этих учетных записей отправила 500 писем в течение 24 часов, и соответственно использовать свободную учетную запись ,

Как динамически установить значение :user_name в ActionMailer::Base.smtp_settings?

Вот мои текущие настройки - ПРИМЕЧАНИЕ: это отправляет из «noreply1» каждый раз, хотя я явно устанавливаю: user_name и: from в «noreply2»:

--- development.rb --- 
    ActionMailer::Base.delivery_method = :smtp
    ActionMailer::Base.smtp_settings = {
        :address => "smtp.gmail.com",
        :port => "587",
        :domain => "mydomain.com",   
        :authentication => :plain,
            :user_name => "noreply1@mydomain.com",
        :password => "password"
    }

--- account.rb --- (MODEL, called via a callback)
after_create :send_welcome_email
...
def send_welcome_email
  #ActionMailer::Base.smtp_settings[:user_name] = 'noreply2@mydomain.com'
  ActionMailer::Base.smtp_settings.merge!({:user_name => "noreply2@mydomain.com"})  
  SubscriptionNotifier.deliver_welcome(self)   
end

--- subscription_notifier.rb --- (MODEL) 
class SubscriptionNotifier < ActionMailer::Base
  def welcome(account)    
    @sent_on = Time.now
    @subject = "Welcome to the App"
    @recipients = account.email
    @from = "noreply2@mydomain.com" 
    @body = { :account => account }
  end
end

Ответы [ 4 ]

9 голосов
/ 09 марта 2009

Вы также можете настроить MTA на своем сервере и использовать его для отправки почты.

Вот что мы делаем.

Вы должны добавить IP-адрес своего сервера в качестве действительного для отправки электронной почты в записи SPF вашего домена, чтобы избежать пометки как спама.

Еще одним преимуществом этого является то, что если вы сделаете это, вы можете установить адрес От: электронной почты в качестве одного из ваших пользователей, что вы не можете сделать с GMail.

3 голосов
/ 09 марта 2009

Сохранение доступных имен пользователей в таблице в базе данных вместе с «последним измененным», «последним сбросом» и количеством отправленных сообщений. Затем вы можете запросить это при отправке электронного письма, чтобы найти наименее используемый адрес электронной почты в настоящее время. Затем увеличьте количество отправленных сообщений и последнюю измененную учетную запись. Значение «последнего сброса» можно использовать для кода очистки, чтобы вы сбрасывали счетчики каждые 24 часа.

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

2 голосов
/ 09 марта 2009

Вы должны иметь возможность установить элемент: user_name в хэше в почтовой программе так же, как в конфигурации, а именно:

ActionMailer::Base.smtp_settings[:user_name] = 'new_user_name'

Хотя для этого может потребоваться дополнительный код для принудительной перезагрузки любой конфигурации почтового модуля внутреннего действия (не проверял сам)

0 голосов
/ 02 апреля 2009

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

  1. Вы используете плагин TLS? Я использовал action_mailer_optional_tls с Rails 2.3.2 и Ruby 1.8.6.
  2. Что пишет в журнал / консоль?
  3. Вы меняете имя пользователя, но не пароль: все ли учетные записи noreply имеют одинаковый пароль?

Редактировать: еще кое-что попробовать

Я бы внимательно посмотрел на файл smtp_tls.rb, упомянутый в комментариях, чтобы убедиться, что в нем ничего нет. Или удалите его и попробуйте плагин, который я связал выше. Чтобы использовать его, вам просто нужно добавить :tls => true в хэш smtp_settings.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...