Redmine : send mail via gmail error SSL_connect or STARTTLS - ruby-on-rails

i try to configure redmine for email notifications
So my configuration in configuration.yml is :
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: true
address: "smtp.gmail.com"
port: '587'
domain: "smtp.gmail.com"
authentication: :plain
user_name: "mymail#gmail.com"
password: "mypass"
According to this tutorial :
http://www.redmine.org/projects/redmine/wiki/EmailConfiguration#Simple-Login-Authentication-default-settings
But when i try : Send a test mail, i have this error :
An error occurred while sending mail (530 5.7.0 Must issue a STARTTLS command first. n7sm25368265eef.5 - gsmtp )
If i have :
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
tls: true
enable_starttls_auto: true
address: "smtp.gmail.com"
port: '587'
domain: "smtp.gmail.com"
authentication: :plain
user_name: "mymail#gmail.com"
password: "mypass"
I have this error :
An error occurred while sending mail (SSL_connect returned=1 errno=0 state=unknown state: unknown protocol)
Any ideas ? Redmine version : 2.0.1, Ruby : 1.9.3

1.Save the following code within your rails app in lib/smtp_tls.rb:
require "openssl"
require "net/smtp"
Net::SMTP.class_eval do
private
def do_start(helodomain, user, secret, authtype)
raise IOError, 'SMTP session already started' if #started
check_auth_args user, secret, authtype if user or secret
sock = timeout(#open_timeout) { TCPSocket.open(#address, #port) }
#socket = Net::InternetMessageIO.new(sock)
#socket.read_timeout = 60 ##read_timeout
##socket.debug_output = STDERR ##debug_output
check_response(critical { recv_response() })
do_helo(helodomain)
if starttls
raise 'openssl library not installed' unless defined?(OpenSSL)
ssl = OpenSSL::SSL::SSLSocket.new(sock)
ssl.sync_close = true
ssl.connect
#socket = Net::InternetMessageIO.new(ssl)
#socket.read_timeout = 60 ##read_timeout
##socket.debug_output = STDERR ##debug_output
do_helo(helodomain)
end
authenticate user, secret, authtype if user
#started = true
ensure
unless #started
# authentication failed, cancel connection.
#socket.close if not #started and #socket and not #socket.closed?
#socket = nil
end
end
def do_helo(helodomain)
begin
if #esmtp
ehlo helodomain
else
helo helodomain
end
rescue Net::ProtocolError
if #esmtp
#esmtp = false
#error_occured = false
retry
end
raise
end
end
def starttls
getok('STARTTLS') rescue return false
return true
end
def quit
begin
getok('QUIT')
rescue EOFError, OpenSSL::SSL::SSLError
end
end
end
2.Add this code to config/environment.rb (after everything else):
require “smtp_tls”
ActionMailer::Base.smtp_settings = {
:address => “smtp.gmail.com”,
:port => 587,
:authentication => :plain,
:user_name => “someone#openrain.com”,
:password => ’someonesPassword’
}
3.Use ActionMailer as normal.

Related

sending mail via IMAP through action-mailer in rails

i am already implemented send mail through smtp protocol
now i trying to implement via IMAP..protocol....what should i have to change in
config/devlopment .rb
config.action_mailer.default_url_options = { host: 'localhost', port: 9292}
config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
address: 'imap.gmail.com'or'imap.hotmail.com'or'imap.yahoo.com', # default: localhost
port: '25', # default: 25
user_name: 'debasish.industrify2016#gmail.com',
password: 'debxxxxxxxx',
authentication: :plain # :plain, :login or :cram_md5
}

Rails devise not sending an email confirmation in development

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

Sending mail with Rails 4 in development environment

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

rails not sending mails on local environment

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.

Ruby, RoR, gmail and NET::SMTP

Is there any way to use gmail as a smtp server on rails 2.3.5/ruby 1.9.1?
My smtp settings for actionmailer are
options = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'REMOVED',
:user_name => 'REMOVED',
:password => 'REMOVED',
:authentication => 'plain',
:enable_starttls_auto => true }
and these result in the error
Net::SMTPAuthenticationError: 530 5.7.0 Must issue a STARTTLS command first.
Try this:
#config/initializers/smtp_tls.rb
require "openssl"
require "net/smtp"
Net::SMTP.class_eval do
private
def do_start(helodomain, user, secret, authtype)
raise IOError, 'SMTP session already started' if #started
if RUBY_VERSION == "1.8.6"
check_auth_args user, secret, authtype if user or secret
else
check_auth_args user, secret if user or secret
end
sock = timeout(#open_timeout) { TCPSocket.open(#address, #port) }
#socket = Net::InternetMessageIO.new(sock)
#socket.read_timeout = 60 ##read_timeout
#socket.debug_output = STDERR ##debug_output
check_response(critical { recv_response() })
do_helo(helodomain)
raise 'openssl library not installed' unless defined?(OpenSSL)
starttls
ssl = OpenSSL::SSL::SSLSocket.new(sock)
ssl.sync_close = true
ssl.connect
#socket = Net::InternetMessageIO.new(ssl)
#socket.read_timeout = 60 ##read_timeout
#socket.debug_output = STDERR ##debug_output
do_helo(helodomain)
authenticate user, secret, authtype if user
#started = true
ensure
unless #started
# authentication failed, cancel connection.
#socket.close if not #started and #socket and not #socket.closed?
#socket = nil
end
end
def do_helo(helodomain)
begin
if #esmtp
ehlo helodomain
else
helo helodomain
end
rescue Net::ProtocolError
if #esmtp
#esmtp = false
#error_occured = false
retry
end
raise
end
end
def starttls
getok('STARTTLS')
end
def quit
begin
getok('QUIT')
rescue EOFError
end
end

Resources