ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => ???,
:user_name => ???,
:password => ???,
:authentication => "plain",
:enable_starttls_auto => true
}
I'm trying to use Action Mailer in Rails to send email to users. I don't quite understand what should go into :domain, :user_name, and :password. Should it be gmail.com, my Gmail username, and my Gmail password?
Here is an example of setting up ActionMailer to use GMAil to send mail:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'gmail.com',
:user_name => 'my_user_name#gmail.com',
:password => 'my_gmail_password',
:authentication => 'plain',
:enable_start_tts_auto => true
}
The domain should be "gmail.com" and the username and password should be those of your Google account. To better protect your main GMail account, you should setup a separate GMail account just for sending email.
I don't think you need to specify domain, but yes, the user name and password must be the corresponding username/password for the sender email
Related
I am trying to set up an action mailer, so people can send a message using contact form on my website.
Here is my configuration for production:
config.action_mailer.default_url_options = { host: 'mydomain.co' }
config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => 'smtp.gmail.com',
:port => 587,
:authentication => :plain,
:user_name => ENV['GMAIL_USERNAME'],
:password => ENV['GMAIL_PASSWORD'],
:domain => 'mydomain.co',
:enable_starttls_auto => true
}
I was trying to test it and the mail is delivered, but after that I immidiately receive a message from "Mail Delivery Subsystem" with a subject "Delivery Status Notification (Failure)".
What is causing this message and how to avoid it?
Mine looks like this
config.action_mailer.smtp_settings = {
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'gmail.com',
:user_name => ENV["GMAIL_USERNAME"],
:password => ENV["GMAIL_PASS"],
:authentication => 'plain',
:enable_starttls_auto => true
}
Also make sure you've enabled "Less Secure Apps" in your Gmail settings:
https://support.google.com/accounts/answer/6010255?hl=en
Hope that helps!
I am deploying an ruby-on-rails app in Heroku.I cannot add the SendGrid add-on to the heroku account.Is there any other ways to use the email services?
Yes you can simply sign up for a SendGrid account directly and then use the SMTP details. It would look like this:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.sendgrid.net",
:port => 587,
:domain => 'yourdomain.com',
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:authentication => 'plain',
:enable_starttls_auto => true
}
There's also an example using the Mail gem, in the SendGrid documentation.
You could use your Gmail account.
In config > environment > production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'gmail.com',
:user_name => ENV['GMAIL_USER_NAME'],
:password => ENV['GMAIL_PASSWORD'],
:authentication => 'plain',
:enable_starttls_auto => true
}
Then you have to set GMAIL_USER_NAME and GMAIL_PASSWORD to Heroku configs
GMAIL_USER_NAME should be your email address of gmail domain eg. sample#gmail.com
I've got Actionmailer sending emails using gmail with the following settings:
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "user_name#gmail.com",
:password => "password",
:authentication => "plain",
:enable_starttls_auto => true
}
However, I can't get office 365 mail to work, I have the following settings:
ActionMailer::Base.smtp_settings = {
:address => "smtp.office365.com",
:port => 587,
:domain => "my_domain.com",
:user_name => "username#my_domain.onmicrosoft.com",
:password => "password",
:authentication => :login,
:enable_starttls_auto => true
}
If I try and send an email with this client I get:
Net::SMTPFatalError
550 5.7.1 Client does not have permissions to send as this sender
Turns out microsoft requires the same email for both the smtp_settings and the :from field in emailer.rb.
I have faced same issue with Gmail and Office365, after scratching head for many hours I find out solution.
If you are using Office365 account for sending emails, it only works if user_name and sender_address and same value. i.e
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.office365.com',
port: 587,
domain: 'my_domain.pk',
user_name: 'noreply#my_domain.pk',
password: ENV['PASSWORD'],
authentication: 'login',
enable_starttls_auto: true
}
config.middleware.use ExceptionNotification::Rack,
email: {
deliver_with: :deliver,
email_prefix: '[Email Prefix]',
sender_address: %{<noreply#my_domain.pk>},
exception_recipients: %w{abc#gmail.com}
}
config.action_mailer.perform_deliveries = true
Key Point: So keeping following values same worked for me
user_name: 'noreply#my_domain.pk'
sender_address: %{<noreply#my_domain.pk>}
Read more on sending with SMTP through Office 365 over here:
https://technet.microsoft.com/en-us/library/dn554323.aspx
With the authentication method like this you don't need to set :domain.
In devise.rb I set "no-reply#******.com", and I mentioned at production.rb in smtp setting as "noreply#*****.com".
After replace the email id in devise.rb as "no-reply#*******.com" with "noreply#******.com", it's working fine now.
I tried to configure actionmailer to send via google apps with smtp.
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "mydomain.com",
:user_name => "username",
:password => "password",
:authentication => 'plain',
:enable_starttls_auto => true }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
However whenever gitlab tries to send an e-mail:
Sent mail to user#my.domain.com (10ms)
Completed 500 Internal Server Error in 29ms
535-5.7.1 Username and Password not accepted
Server runs ruby 1.9.3p194. Why doesn't google apps accept the username/password?
It works now, I think the problem was with the username. it needs the domain in the username. i.e. the problem was
user_name: 'username'
Whereas the correct way (at least for google apps) is
user_name : 'username#mydomain.com'
this works for me:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "you#gmail.com",
:password => "password",
:authentication => 'plain',
:enable_starttls_auto => true }
Try setting the domain to gmail.com
I'm using sendgrid on heroku to send email in production, but would like to send email locally on my mac.
I've configured my development.rb a million different ways and keep getting
"Net::SMTPFatalError: 550 Cannot receive from specified address : Unauthenticated senders not allowed"
Spefically, I tried
varying authentication b/w :plain and :login,
tried using my gmail account credentials,
tried using my google app account credentials.
Nothing seems to work, thoughts?
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
ActionMailer::Base.smtp_settings = {
:address => 'smtp.gmail.com',
:domain => 'somedomain.com',
:port => 587,
:user_name => 'username#somedomain.com',
:password => 'somepassword',
:authentication => :plain,
:enable_starttls_auto => true
}
I thought I had set the in the production settings (production.rb), it turns out I had set them in environment.rb. Removed it there and everything started working.
I had set the mail settings by accident in the Environment.rb so it was overriding anything I was doing at the production/development config level.
Could you try this?
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => "email#gmail.com",
:password => "password",
:authentication => "plain",
:enable_starttls_auto => true
}