web-dev-qa-db-fra.com

Envoyer un e-mail depuis la console Rails

J'essaie d'envoyer des mails depuis la console de mon serveur de production, et ils ne sortent pas. Je ne peux pas comprendre pourquoi. Je viens de configurer votre messagerie standard avec sendmail. Lorsque j'appelle la méthode Mailer.deliver_, je récupère ceci:

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

EDIT: Ajout de quelques informations supplémentaires:

Ainsi, par exemple, j'ai cette ligne dans mon contrôleur lorsqu'un nouvel utilisateur s'inscrit, pour lui envoyer un e-mail de "bienvenue":

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

Cela fonctionne bien. J'ai pensé que je devrais pouvoir faire la même chose depuis la console, par exemple

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

Lorsque je fais cela, je récupère l'objet Tmail :: StringPort, mais le courrier semble ne pas être envoyé (j'essaie de m'envoyer des e-mails pour tester cela).

Je suis sur un serveur Ubuntu au cas où cela aiderait. merci - max

53
Max Williams

Pour envoyer des e-mails à partir de Rails Console, nous devons d'abord exécuter ce paramètre dans la console pour les paramètres de l'action mailer.

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'
}

Après cela, si nous exécutons le code d'envoi d'e-mail, il enverra un e-mail.

UserMailer.activation_instructions(@user).deliver_now
27
Dhiraj

Version plus rapide:

ActionMailer::Base.mail(
  from: "[email protected]", 
  to: "[email protected]", 
  subject: "Test", 
  body: "Test"
).deliver_now
90
jmgarnier

J'ai rencontré un problème similaire ce matin sur une application Rails 3 où j'ai appelé:

UserMailer.activation_instructions(@user)

Cela m'a donné les données mais n'a pas envoyé l'e-mail. Pour envoyer, j'ai appelé:

UserMailer.activation_instructions(@user).deliver

Cela a fait l'affaire. J'espère que cela pourrait aussi fonctionner pour vous!

47
sscirrus

Je ne suis pas à 100% si je comprends ce que vous essayez de faire.

Si vous essayez d'envoyer des e-mails sur Internet, votre sendmail doit être configuré de manière à transférer ces e-mails vers le serveur de messagerie approprié. Selon la version d'Ubuntu que vous utilisez, vous pouvez simplement reconfigurer le package pour ce faire.

Vous pourriez également penser si vous souhaitez utiliser procmail au lieu de sendmail.

Vous pouvez reconfigurer la configuration de l'e-mail avec

dpkg-reconfigure sendmail

d'utiliser procmail à la place si vous utilisez ce package. La boîte de dialogue de configuration vous donne une option où vous pouvez la configurer pour transférer tous les messages vers le serveur de messagerie approprié. Cependant, vous devez penser si vous avez besoin d'une authentification ou si ce serveur accepte uniquement les e-mails de votre serveur.

0
txwikinger