2009-03-09 1 views
6

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

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

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

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

Вот моя текущая настройка - Примечание: это посылает из «noreply1» каждый раз, хотя я явно устанавливая: user_name и: от «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 => "[email protected]", 
     :password => "password" 
    } 

--- account.rb --- (MODEL, called via a callback) 
after_create :send_welcome_email 
... 
def send_welcome_email 
    #ActionMailer::Base.smtp_settings[:user_name] = '[email protected]' 
    ActionMailer::Base.smtp_settings.merge!({:user_name => "[email protected]"}) 
    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 = "[email protected]" 
    @body = { :account => account } 
    end 
end 
+0

Я думаю, что идея workmad3 об изменении хэша ActionMailer :: Base.smtp_settings находится на правильном пути, я просто не могу понять, как получить рельсы для перезагрузки значений хэша с помощью моего динамически заданного ключа: user_name. –

+0

Какую версию Rails вы используете? Изменение ActionMailer :: Base.smtp_settings [: имя_пользователя] динамически в действии контроллера работает для меня в 2.3.2. (По крайней мере, хеш изменяется. Я не пытался отправлять почту.) –

+0

это странная вещь - значение ключа хеша изменяется, но письмо отправляется с использованием оригинала: имя_пользователя, которое было в моем файле development.rb –

ответ

9

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

Это то, что мы делаем.

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

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

+0

Когда кто-то отвечает на адрес электронной почты, отправленный вами с адресом «от», зарегистрированным в GMail, у вас нет проблем со спамом в Google? – pbz

+0

Хм ... Я не видел никаких проблем с этим. Мы зарегистрировали Google Apps для вашего домена в качестве нашего почтового сервера в SPF, а затем зарегистрировали другой IP-адрес (наш сервер) как действительный отправитель. –

+0

Могли бы получить более подробную информацию о том, как это сделать. – Deekor

3

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

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

+1

Звучит как хороший плагин для рельсов, если вы это пишете! –

+0

спасибо, очень полезный метод отслеживания учетных записей электронной почты, но я специально искал код, чтобы установить элемент: user_name в типичном хэш-конфигурации rails smtp config. –

+0

К сожалению, не прочитал вопрос правильно. Я добавлю второй ответ с тем, что, как я думаю, будет работать для фактической проблемы :) @kyle: Я могу это сделать ... кажется мне довольно интуитивным, так удивлен, что в этих строках уже нет чего-то доступного – workmad3

2

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

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

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

+0

Я, наконец, добрался до тестирования этого, но я не могу заставить его работать. установка ActionMailer :: Base.smtp_settings [: имя_пользователя] = 'new_user_name' в методе контроллера вообще не влияет на хеш. любая идея, как перезагрузить хэш? –

0

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

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

Edit: больше вещей, чтобы попробовать

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

+0

1. Я использую smtp_tls.rb в моем каталоге lib, но, честно говоря, не помню, откуда я получил, но он отправляет почту с gmail в порядке. я попробую action_mailer_optional_tls - да, Rails 2.3.2, Ruby 1.86 patch lvl 111 2.console - это регистрация электронной почты, отправленной с noreply1 3.yes, все пароли те же –

+0

вы используете для меня похожий код? кто-то предложил «перезагрузить» хэш, но я не знаю, как это сделать. вы устанавливаете значение напрямую или используете слияние! –

+0

Почти идентичный код. Я попытался установить значение, а также объединить !, и оба работали. Вам не нужно «перезагружать» хэш: ActionMailer использует тот же хэш-код smtp_settings, который вы предоставляете, - нет внутреннего кеша. –

Смежные вопросы