2010-07-16 10 views
34

Estoy tratando de enviar algunos correos desde la consola en mi servidor de producción, y no se van a salir. No puedo entender por qué. Tengo su configuración de correo electrónico estándar con sendmail. Cuando llamo el método Mailer.deliver_ me sale esto de nuevo:Enviar correo electrónico desde la consola de rails

#<TMail::Mail port=#<TMail::StringPort:id=0x3fe1c205dbcc> bodyport=#<TMail::StringPort:id=0x3fe1c2059e00>> 

EDIT: Añadido algo más de información:

Así, por ejemplo, tengo esta línea en mi controlador cuando un nuevo usuario se registra, para enviarles un correo electrónico de "bienvenida":

Mailer.deliver_signup(@user, request.host_with_port, params[:user][:password]) 

Esto funciona bien. Pensé que yo debería ser capaz de hacer lo mismo desde la consola, por ejemplo

user = User.find(1) 
Mailer.deliver_signup(user, "mydomainname.com", "password") 

cuando hago esto, me da la Tmail :: StringPort objeto de nuevo, pero el correo parece que no son enviadas a cabo (i Estoy tratando de enviarme correos electrónicos para probar esto).

Estoy en un servidor ubuntu en caso de que eso ayude. gracias - max

+0

Haz intenta enviar correo electrónico a Internet? – txwikinger

+0

Eso es bastante estándar para un valor de retorno para un método de entrega, es probable que haya algo mal con su correo electrónico de envío o de destino. – Karl

Respuesta

16

Para enviar correos electrónicos desde la consola de Rails primero tenemos que ejecutar esta configuración en la consola para la configuración de acción de correo.

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = { 
    address: 'smtp.gmail.com', 
    port: 587, 
    domain: 'gmail.com', 
    authentication: 'plain', 
    enable_starttls_auto: true, 
    user_name: '[email protected]', 
    password: 'yourpassword' 
} 

Después de eso Si ejecutamos el código de envío de correo electrónico se enviará el correo electrónico. Versión

UserMailer.activation_instructions(@user).deliver_now 
0

No soy 100% si entiendo lo que estás tratando de hacer.

Si intenta enviar correos electrónicos a Internet, su sendmail debe configurarse de manera que reenvíe esos correos electrónicos al servidor de correos electrónico adecuado. Dependiendo de la versión de Ubuntu que use, puede reconfigurar el paquete para hacer esto.

También podría pensar si desea usar procmail en lugar de sendmail.

Puede volver a configurar la configuración de e-mail con

dpkg-reconfigure sendmail 

de uso procmail en su lugar si se utiliza ese paquete. El diálogo de configuración le brinda una opción donde puede configurarlo para reenviar todo el correo al servidor de correo electrónico apropiado. Sin embargo, debe pensar si necesita autenticación o si ese servidor solo acepta correos electrónicos de su servidor.

+0

hola - lo siento, probablemente debería haber proporcionado algunos detalles más. He editado mi publicación original. –

45

me encontré con un problema similar esta mañana en una aplicación Rails 3, donde llamé:

UserMailer.activation_instructions(@user) 

Esto me dio los datos, pero no envió a la dirección de correo a cabo. Para enviar, llamé:

UserMailer.activation_instructions(@user).deliver 

Esto hizo el truco. ¡Espero que esto también funcione para ti!

+3

no parece funcionar para mí, ¿tiene que establecer explícitamente los rieles env para que tome la configuración de entorno de actiomailer correcta? – Rubytastic

60

más rápido:

ActionMailer::Base.mail(
    from: "[email protected]", 
    to: "[email protected]", 
    subject: "Test", 
    body: "Test" 
).deliver 
+2

Esto es mejor, aunque 'entregar' está en desuso y se recomienda usar 'deliver_now' en su lugar. – iamse7en

+0

¿cómo usaría una plantilla existente? como un correo electrónico UserMailer.account_activation .. – sambehera

Cuestiones relacionadas