Send email from rails console
I'm trying to send out some mails from the console on my production server, and they're not going out. I can't work out why. I have just your standard email setup with sendmail. When i call the Mailer.deliver_ method i get this back:
#<TMail::Mail port=#<TMail::StringPort:id=0x3fe1c205dbcc> bodyport=#<TMail::StringPort:id=0x3fe1c2059e00>>
EDIT: Added some more info:
So, for example, i have this line in my controller when a new user signs up, to send them a "welcome" email:
Mailer.deliver_signup(@user, request.host_with_port, params[:user][:password])
This works fine. I thought that i should be able to do the same thing from the console, eg
user = User.find(1)
Mailer.deliver_signup(user, "mydomainname.com", "password")
When i do this, i get the Tmail::StringPort object back, but the mail appears to not get sent out (i'm trying to send emails to myself to test this).
I'm on an ubuntu server in case that helps. thanks - max
Solution 1:
Quicker version:
ActionMailer::Base.mail(
from: "[email protected]",
to: "[email protected]",
subject: "Test",
body: "Test"
).deliver_now
Solution 2:
I ran into a similar problem this morning on a Rails 3 app where I called:
UserMailer.activation_instructions(@user)
This gave me the data but did not send the e-mail out. To send, I called:
UserMailer.activation_instructions(@user).deliver
This did the trick. Hopefully this might work for you too!
Solution 3:
For Sending email from Rails Console first we have to execute this setting in console for action mailer settings.
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'
}
After that If we execute email sending code it will deliver email.
UserMailer.activation_instructions(@user).deliver_now
Solution 4:
if you want to send attachments
mailer = ActionMailer::Base.new
mailer.attachments["file.jpg"] = File.read("/dir/file.jpg")
mailer.attachments["file.txt"] = "some text"
mailer.mail(from: "[email protected]",
to: "[email protected]",
subject: "Email with attachments",
body: "included the documents below\n\n")
mailer.message.deliver
mail
has to come after the attachments, because it creates the headers.