I'm new in Rails. I'm trying to make a email notification about new messages of contact form using ActionMailer. I followed different tutorials, tried to apply different advices, but it didnt help.
My setup_mail.rb file is:
config.action_mailer.delivery_method = :sendmail
ActionMailer::Base.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'my_user_name',
password: 'my_password',
authentication: 'plain',
enable_starttls_auto: true
}
I tried tp add this code to the development.rb file, my development.rb also has next code:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
My contact_forms_controllers.rb has next code:
def create
#contact_form = ContactForm.new contact_form_params
#contact_form.save
redirect_to root_path
AdminMailer.notification(#contact_form).deliver
end
My admin_mailer.rb file is:
class AdminMailer < ApplicationMailer
default from: "my_address#gmail.com"
def notification(contact_form)
mail(to: "my_address#gmail.com", subject: 'New message on your web-site')
end
end
Everywhere my_address#gmail.com is my actual mail and my_password is my actual password.
I can create a message by help contact form without any errors.
Has anybody idea, where can be a problem?
You are almost there but your development.rb should look like this :
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: '587',
domain: 'gmail.com',
user_name: 'xxx#gmail.com',
password: 'xxxxxx',
authentication: 'login',
enable_starttls_auto: true
}
Have you added this in development.rb:-
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
And change sendmail to smtp:-
config.action_mailer.delivery_method = :smtp
Related
I'm configuring email confirmation to be sent out after the user signs up using devise. I did everything what this says (https://github.com/plataformatec/devise/wiki/How-To:-Add-:confirmable-to-Users) but it still does not work.
Here are some codes:
//development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
//devise.rb
config.mailer_sender = 'myEmail#gmail.com'
# Configure the class responsible to send e-mails.
config.mailer = "Mailer"
//Mailer.rb
class Mailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
default template_path: 'devise/mailer'
end
Do I need to configure something more in order to send email confirmation letter in development environment??
Yes, You have to configure smtp settings for emails to be sent from like :
require 'tlsmail'
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
ActionMailer::Base.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default :charset => "utf-8"
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => "YOUR_EMAIL",
:password => 'PASSWORD',
:authentication => "plain",
:enable_starttls_auto => true
}
Add above code to your development.rb in order to configure smtp settings. Do add your email and password in the code where required.
Hopefully It will work fine!
In addition to #Muhammad's answer, also include these line of codes on your development.rb
config.action_mailer.default_url_options = {host: 'your server' } # ex. localhost:3000
config.action_mailer.raise_delivery_errors = true # to raise error if smtp has error on setup
config.action_mailer.default :charset => "utf-8"
In initializers/devise.rb
config.mailer_sender = 'your email'
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 465,
domain: 'gmail.com',
user_name: 'your email',
password: 'your password',
authentication: 'plain',
enable_starttls_auto: true,
ssl: true
}
You need to add email settings to development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 465,
domain: 'gmail.com',
user_name: '--your-gmail-id--#gmail.com',
password: '--your-password--',
authentication: 'plain',
enable_starttls_auto: true,
ssl: true
}
then also you need to change your gmail setting.
google account settings > security > less secure app access > ON
i can't make my mailer work on development environment.
This is my configuration on development.rb:
config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mandrillapp.com',
port: 587,
enable_starttls_auto: true,
user_name: 'user#email.com,
password: 'mypassword,
authentication: 'login',
domain: 'mandrill.com'
}
My mailer method:
class InformationRequestMailer < ActionMailer::Base
def information_request(operator, ref, property_url, contact_info)
#operator = operator
#property_url = property_url
mail(to: operator.email, subject: t("information_request_mailer.subject", property_ref: ref))
end
end
And here I'm calling it:
InformationRequestMailer.delay.information_request(
operator: operator,
ref: ref,
property_url: property_url,
contact_info: params[:contact_info]
)
Thanks in advance.
If you have a current Rails version, this should work:
InformationRequestMailer.information_request(
operator: operator,
ref: ref,
property_url: property_url,
contact_info: params[:contact_info]
).deliver_later
And since you want to use the delayed delivery, you need to have you queue workers running.
A few weeks ago I created a mailer object to send an email whenever a new "Thing" was created. It worked without a hitch, but I then commented out the relevant lines and didn't deal with it for a while. Today I tried it again, and nothing happened. I discovered that the email account I was using had been disconnected for some reason, so I tried it with another email account. Still nothing. Does anyone have a guess for why it might not be doing anything, or how I can debug it? I'm sure the username/password/domain are accurate.
config/environments/development.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'username',
password: 'password',
authentication: 'plain',
enable_starttls_auto: true
}
app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default from: 'username#gmail.com'
def notify(user)
#user = user
mail(to: #user.email,subject: "Notification")
end
end
app/views/user_mailer/notify.html.erb
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Heading</h1>
<p>First paragraph</p>
<p>Second paragraph</p>
</body>
</html>
app/controllers/users_controller.rb
def create
#...
UserMailer.notify(#user).deliver
end
Try this:
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { host:'localhost', port: '3000' }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'localhost:3000',
user_name: 'username#gmail.com',
password: 'password',
authentication: 'plain',
enable_starttls_auto: true
}
if you are testing in development env, add below lines and check
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
I'm attempting to set up Action Mailer to send reset password emails for Devise in my development environment. I'm receiving the following error when starting my local server: undefined local variable or method `“smtp', referring to the "address: “smtp.gmail.com”" line in my code. Here is the Action Mailer code I have added in my development.rb file:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
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"]
}
I have the environment variables set up in a .env file in the root directory.
Thanks!
It's because you're using smart quotes, “ ” instead of " ", probably from copy/pasting. Replace these with standard quotes:
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
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"]
}
I'm facing a weird bug.
Trying to set up welcome email after a user's registration.
According to server logs, my code sends an email but a user doesn't receive it.
Here is my code:
models/user.rb
after_create :welcome_message
private
def welcome_message
UserMailer.welcome_email(self).deliver
end
and mailers/user_mailer.rb
def welcome_email(user)
#user = user
mail to: #user.email, subject: t("mailer.welcome_email.welcome")
end
here are environments. The error occurs in both of them
config/environments/development.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mandrillapp.com',
port: '587',
domain: 'localhost:3000',
user_name: 'welcome#mysite.com',
password: 'blahblahblah',
authentication: 'plain',
enable_starttls_auto: true
}
and config/environments/production.rb
config.action_mailer.default_url_options = { :host => 'mysite.com' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mandrillapp.com',
port: '587',
domain: 'mysite.com',
user_name: 'welcome#mysite.com',
password: 'blahblahblah',
authentication: 'plain',
enable_starttls_auto: true
}
I'm using Devise to register users. So, also tried to do that via :confirmable. Outcome is the same – test user doesn't get a welcome email.
Gemfile
gem 'rails', '3.2.12'
gem 'devise', '3.0.3'
gem "mail"
and here are server logs
Sent mail to user#hismail.com (1920ms)
Date: Sat, 10 May 2014
From: welcome#mysite.com
Reply-To: welcome#mysite.com
To: user#hismail.com
Message-ID: <aaa#aaa.mail>
Subject: Confirmation instructions
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<p>Welcome user#hismail.com!</p>
Yet eventually there is no welcome email at user#hismail.com
Any ideas?
UPD:
on the internet I see that nobody else faces the same problem
So, I guess I'm just missing something. But cannot figure out what and where. Please help me.
Try this:-
Create a file named as setup_mail.rb in config/initializers/ folder so that it looks like
config/initializers/setup_mail.rb
and put the below code in that file:-
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.smtp_settings = {
:address => "smtp.mandrillapp.com",
:domain => "mysite.com",
:port => 80,
:user_name => "username",
:password => "blahblahblah",
:authentication => :plain
}
ActionMailer::Base.default_url_options[:host] = "mysite.com"
Delete this from config/environments/development.rb and config/environments/production.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.mandrillapp.com',
port: '587',
domain: 'localhost:3000',
user_name: 'welcome#mysite.com',
password: 'blahblahblah',
authentication: 'plain',
enable_starttls_auto: true
}