ruby-on-rails-3 - plan - sendgrid-ruby
ActionMailer enviando correos electrónicos reales en modo de prueba!-¿Cómo apagar? (3)
Así que lo he descubierto. Tener la línea ActionMailer::Base.delivery_method = :smtp
en config / environment.rb reemplaza a ActionMailer::Base.delivery_method = :test
en config / environment / test.rb.
Entonces, elimine esa línea, ActionMailer::Base.delivery_method = :smtp''
de config / environment.rb y colóquela en config / environment / production.rb. Eso le permite colocar ActionMailer::Base.delivery_method = :test
en config / tomatoes / test.rb y la versión que desea en config / environment / development.rb. Hice development.rb :test
mientras llenaba mi base de datos utilizando Faker y la cambié a smtp
así que estaba seguro de que se enviaron correos electrónicos reales como una verificación adicional.
Nota : debe reiniciar su servidor para que estos cambios surtan efecto.
Otra nota : las instrucciones actuales de SendGrid de Heroku colocan el código de configuración de Heroku de SendGrid en un nuevo archivo config / initializers / mail.rb que probablemente requiera eliminar su última línea y colocar la versión deseada en cada desarrollo de config / environment / [production.rb ,. rb, test.rb]
Los usuarios recién registrados en mi pequeña aplicación deben ser aprobados por el administrador (yo) antes de que puedan acceder al sitio. He logrado generar dichos correos electrónicos en desarrollo con after_create :send_admin_email
en mi modelo de usuario, lo que funciona muy bien. Mi problema es que estoy generando varios usuarios durante mis pruebas (usando FactoryGirl) y cada usuario de prueba creado envía un correo electrónico real. Realizar mis pruebas es como verter melaza en enero y tengo que eliminar cientos de correos electrónicos enviados a mi bandeja de entrada. ¿Cómo apago eso?
Los fundamentos de Action Mailer en las Guías de Rails me dicen que "Por defecto, Action Mailer no envía correos electrónicos en el entorno de prueba. Se agregan a la matriz ActionMailer :: Base.deliveries".
Además, en config/environments/test.rb
tengo:
config.action_mailer.delivery_method = :test
Eso es además de en config/environment.rb
teniendo:
# Configuration for using SendGrid on Heroku
ActionMailer::Base.smtp_settings = {
:address => ''smtp.sendgrid.net'',
:port => ''587'',
:authentication => :plain,
:user_name => ''app[my app number]@heroku.com'',
:password => ''[something super secret]'',
:domain => ''[let''s get this party started!.com]'',
:enable_starttls_auto => true
}
ActionMailer::Base.delivery_method = :smtp
Estoy seguro de que me falta algo simple y básico. He buscado y las preguntas relacionadas y las publicaciones tratan sobre cómo probar que ActionMailer realmente envió el correo electrónico.
Humilde gratitud por adelantado por cualquier pensamiento o ayuda.
Anexo: Después de la respuesta a una pregunta similar encontrada en ¿Es posible desactivar los correos electrónicos de ActionMailer cuando se están realizando pruebas de pepino en el desarrollo? Pude detener el correo electrónico enviando locura. Aún así, tuve que agregar ActionMailer::Base.delivery_method = :test
a varios archivos rspec. ¿Hay alguna manera de cerrar esto globalmente? ¿Alguien tiene alguna idea sobre lo que está pasando?
Me enfrenté a la situación similar en Rails4.2 (integración ActiveJob con ActionMailer) incluso si no escribí delivery_method =: smtp en config / environment.rb.
En mi caso, el problema aquí ocurrió después de usar "resque" como trabajador de fondo. Finalmente, descubrí que la siguiente configuración era INCORRECTA :
config / initializers / active_job.rb:
Rails.application.config.active_job.queue_adapter = :resque # here is WRONG
... porque afectó al modo de prueba también.
Por lo tanto, configuro "queue_adapter =: resque" solo en config / environment / {development, production.rb}. Ahora, eso funciona como espero.
Quizás útil ...
Mi config / environment.rb no contenía ActionMailer::Base.delivery_method = :smtp
y my config / environment / test.rb sí contenía ActionMailer::Base.delivery_method = :test
pero Rails aún entregaba ActionMailer::Base.delivery_method = :test
mientras realizaba la prueba.
Simplemente agregué lo siguiente a config / environment / test.rb para corregirlo:
config.action_mailer.perform_deliveries = false