On Heroku when sending mail through action mailer gives error - ruby-on-rails

I created rails g mailer from this reference site. It is working fine on local there is no error. I also added {config.action_mailer.delivery_method = :smtp} with did smtp settings and deployed on heroku,
but now its giving error
We're sorry, but something went wrong. Please help.

For sending mail in production environment, do following thing -
1. In config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mail.com',
port: 587,
domain: 'YOUR_DOMAIN_GOES_HERE',
user_name: 'YOUR_EMAIL_ID_GOES_HERE',
password: 'YOUR_PASSWORD_GOES_HERE',
authentication: 'plain',
enable_starttls_auto: true }
and deploy this change on heroku and if you again found any error there, please check -
heroku stack:set cedar-14
then again deploy on heroku - git push heroku master.
Try it.

The Heroku platform itself doesn’t provide an email service. You need to use external services. Read their documentation about how to send emails from your app.

Related

How to permanently validate google captcha for sending email smtp in rails

I have created Rails 6 application with ruby 2.6.5. Using SMTP for sending emails.
Added configurations in config/environment/*rb file.
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
user_name: ENV['SENDMAIL_USERNAME'],
password: ENV['SENDMAIL_PASSWORD'],
domain: ENV['MAIL_HOST'],
address: 'smtp.gmail.com',
port: '587',
authentication: :plain,
enable_starttls_auto: true
}
Getting Error: Net::SMTPAuthenticationError: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtOS
After Verifiying captcha from the below link
[https://accounts.google.com/b/1/DisplayUnlockCaptcha][1]
It work for some time than again it start throwing the same error.
I have enabled less secure apps also for my email.
It is common issue i used to get when using action mailer with google SMTP configuration. I used to fellow below few step to solve it.
Try to login to google account manually with same location where rails server is there and check if captcha is showing.
Once Mail working from rails sever never login manually to goole account again.
Try changing authentication: :plain to :login

Rails 6 ArgumentError (SMTP-AUTH requested but missing user name)

I built a basic rails app only for contact form using - gem 'mail_form'. It works perfectly in the development environment. However, I deploy the app in Heroku and only got an error in the production environment.
config/environments/production.rb
config.action_mailer_default_url_options = { host: "https://myapp.herokuapp.com" }
# Rails.application.routes.default_url_options[:host] = 'https://gmail.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
authentication: 'plain',
enable_starttls_auto: true,
user_name: ENV['GMAIL_EMAIL'],
password: ENV['GMAIL_PASSWORD']
}
enter image description here
Any helps would be appreciated.
There is no issue in your configuration, but fact is on Heroku they have following information
Gmail have protections in place to avoid their service being used to deliver spam, however these are not published for security reasons. However we often see issues where customer applications attempt to use a Gmail account for email delivery which is subsequently blocked. So it mean there is some sort of block.
You are suggested to use email add-ons from email add-ons

Authentication Error sending gmail message via ActionMailer

I am trying to generate a basic email using ActionMailer. I know that things are setup semi-correctly, as I received an email from Gmail saying an unsecure app tried to login to my account. I have done as others said in this post. Those steps are:
1) Enabled less-secure apps setting in Gmail settings.
2) Changed domain: to "gmail.com" from "mydomainname.com"
3) Changed authentication from "plain" to :login
4) In Gmail settings, enabled POP and IMAP.
Here is my development configuration setting for mail:
...config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
#change mail delivery to smtp for Gmail addresses.
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "gmail.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
I've even set the environment variables like a good boy. Error persists even if I hard code the values.
And the exception I get is:
Net::SMTPAuthenticationError
534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbtj
Also, in development you can use local mail-catchers.
One of them is MailHog, it's similar to gmail.
Installation
brew update && brew install mailhog
development.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
Run MailHog in terminal typing: MailHog and in a browser http://localhost:8025
Not really a solution to Gmail's configuration problem, but another option. I had the same problem and solved it. And the problem eventually appeared again. I'm not sure if I changed something or if it´s just Gmail who doesn't like less secure applications and blocks emails even if you configure everything correctly.
I read other people solved the problem (https://stackoverflow.com/a/48300220/3372172) using two steps authentication, but never tried it.
I finally changed to another ESP (as even Rails seems to recommend in their guides): http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration-for-gmail
Note: As of July 15, 2014, Google increased its security measures and now blocks attempts from apps it deems less secure. You can change your gmail settings here to allow the attempts. If your Gmail account has 2-factor authentication enabled, then you will need to set an app password and use that instead of your regular password. Alternatively, you can use another ESP to send email by replacing 'smtp.gmail.com' above with the address of your provider.
I am using Sengrid because their free plan (100 daily emails) is enough for me right now and I get many interesting analytics. But if you need more volume, I don't think they are cheap.
What fixed it is playing around with the settings until I finally got:
config.action_mailer.raise_delivery_errors = true
#change mail delivery to smtp for Gmail addresses.
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "mydomainname.com",
authentication: "login",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
But the real kicker was to make sure and restart the server with each change to the ...config/environments/development.rb file above.
Edit: Well, now I feel like i'm going crazy, because the above settings did not work when I tried to run it again...

devise not sending recover password email

the mail configuration is through smtp.
everything is working ok with localhost in dev mode, devise sends recover password email using smtp conf in development.rb
manual mail sending with action mail is also ok
when in production mode,
only the host is modified to match the host in production machine
the smtp conf is unchanged, and manually sending mail is ok in a rails console
BUT devise does not send recover password mail
how to debug that ?
is Devise really taking on the global mail conf in production.rb ?
there is no Devise::Mailer override.
and this is uncommented in initializer
please share the github page of your project, so we can have a look. Then also share the log of your production server. you can recover it with heroku logs. I did configure this for my apps, eventually it broke down. It is a little bit tricky. I did follow some guide. If you did the same quote the guide you followed. I followed this guide, I remember that I had to allow in my gmail account setting the usage of gmail account from my app. Then there is some settings that you need to do in production.rb, I am quoting the guide, go to that link to see the full guide and check also other guides online:
Setting Up Production Environment
Now you will need to edit the file “config/environments/production.rb”. We will be adding very similar things to this file. First you can add:
config.action_mailer.default_url_options = { :host => 'yoursite.herokuapp.com' }
NOTE: You may also need to add this line. When I was setting up the mailer, I did not find this line in any other tutorials. I had the development mailer working, however I could not get heroku to work. I received this error in the heroku logs:
ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
I found the answer here: ActionView::Template::Error: Missing host to link to on stackoverflow. If you come across this, then add:
Rails.application.routes.default_url_options[:host] = 'yoursite.herokuapp.com'
to your production.rb file.
Next you will have to add in these lines. Once again make sure that you leave the variables as they are.
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: ENV["GMAIL_DOMAIN"],
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
read the comments from this post and all the other relevant guides to configure this, you may need to use some smtp api to send the email....

Ruby on Rails 4 with SendGrid - authentication fails , but only on production server on Linode

In my application I have set up sendgrid SMTP service. I am using Figaro gem for setting ENV variables for SMTP configuration.
Everything is fine on development mode - I can send e-mails. But when I deploy to my VPS on Linode, every time when I try to send mail I get:
Net::SMTPAuthenticationError (535 Authentication failed: Bad username / password
On the Rails console of the production server I can verify that ENV["GRID_USER'] and ENV["GRID_PASS"] are correct. The same result I get when I'm checking for Figaro.env.grid_user and Figaro.env.grid_pass (in production mode).
The credentials are correct.
What could be the reason for failing authentication, surprisingly only in production mode?
Here you can see my smtp config in production.rb :
config.action_mailer.smtp_settings = {
address: "smtp.sendgrid.net",
user_name: ENV['GRID_USER'],
password: ['GRID_PASS'],
domain: "why.bio",
port: 587,
authentication: 'plain',
enable_starttls_auto: true
}
Here is the way I declare my credentials in application.yml :
GRID_USER: "MySendGridUserName"
GRID_PASS: "very_wierd_password"
I have checked a hundreds of questions in StackOverflow and a number of blogs, but could not find the solution.
You need to use ENV['GRID_PASS'] and not just ['GRID_PASS'] in your configuration.

Resources