I'm working on an application with Rails 4 on Ruby 2.0.0. The application sends out an email after a registration in Devise.
This is the code that sends the email:
app/models/sponsor.rb:
after_create :send_email_to_admin
private
def send_email_to_admin
AdminMailer.new_sponsor_email(self).deliver
end
app/mailers/admin_mailer.rb
class AdminMailer < ActionMailer::Base
default to: '**removed**'
def new_sponsor_email(sponsor)
#sponsor = sponsor
p #sponsor
mail(subject: "New Sponsor Registration")
end
end
And this is the generated email from the log file:
Sent mail to **removed** (725.5ms)
Date: Mon, 02 Sep 2013 15:01:03 -0400
From: **removed**
To: **removed**
Message-ID: <5224e06f4dddd_2e5a3fa0452dcfd874597#centaur.mail>
Subject: New Sponsor Registration
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_5224e06f4cca1_2e5a3fa0452dcfd87441a";
charset=UTF-8
Content-Transfer-Encoding: 7bit
----==_mimepart_5224e06f4cca1_2e5a3fa0452dcfd87441a
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
A new sponsor has signed up!
==========================
----==_mimepart_5224e06f4cca1_2e5a3fa0452dcfd87441a
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<!DOCTYPE html>
<html lang='en'>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
</head>
<body>
<h1>A new sponsor has signed up!</h1>
</body>
</html>
----==_mimepart_5224e06f4cca1_2e5a3fa0452dcfd87441a--
when I try to test the code by creating a sponsor, I just get this error:
Net::SMTPSyntaxError in Devise::RegistrationsController#create
501 5.5.4 Invalid argument
My understanding is that this is typically because the email is and invalid email, but all of my emails are very simple, in the format of name#domain.tld and no-reply#domain.tld.
The issue seemed to be that I was using "domain" in my smtp_settings. When I removed that, I was able to send emails from both Mailgun and Gmail
Related
I've tried every possibility I can think of but just keep getting the same error when sending data through a form to a rails mailer. Any idea why I'm getting the "No template found for MailerController#sign_up" response at the bottom?
routes.rb
scope '/mailer' do
post '/signup' => 'mailer#sign_up'
end
app/controller/mailer_controller.rb
class MailerController < ApplicationController
def sign_up
#Create user object
#user = { first_name: params[:first_name],
last_name: params[:last_name],
email: params[:email],
package: params[:package_type],
username: params[:username],
followers: params[:followers],
age: params[:age],
hashtags: params[:hashtags],
comments: params[:comments]
}
AppMailer.sign_up(#user).deliver_now
end
end
app/mailers/app_mailer.rb
class AppMailer < ActionMailer::Base
default from: 'redacted_email'
def sign_up(user)
#user = user
mail(to: "redacted_email", from: #user['email'], subject: 'Sign Up | IAS')
end
end
app/views/app_mailer/sign_up.html.erb
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<strong>First Name: </strong><p><%= #user[:first_name] %></p><br>
<strong>Last Name: </strong><p><%= #user[:last_name] %></p><br>
<strong>Email: </strong><p><%= #user[:email] %></p><br>
<strong>Package: </strong><p><%= #user[:package] %></p><br>
<strong>Username: </strong><p><%= #user[:username] %></p><br>
<strong>Current Followers: </strong><p><%= #user[:followers] %></p><br>
<strong>Age: </strong><p><%= #user[:age] %></p><br><br>
<strong>Hashtags: </strong><p><%= #user[:hashtags] %></p><br><br>
<strong>Comments: </strong><p><%= #user[:comments] %></p>
</body>
</html>
server response
Started POST "/mailer/signup" for ::1 at 2017-10-23 15:15:48 -0400
Processing by MailerController#sign_up as HTML
Parameters: {redacted but all going through successfully}
Rendering app_mailer/sign_up.html.erb
Rendered app_mailer/sign_up.html.erb (1.7ms)
Rendering app_mailer/sign_up.text.erb
Rendered app_mailer/sign_up.text.erb (0.6ms)
AppMailer#sign_up: processed outbound mail in 395.7ms
Sent mail to redacted#email.com (25.0ms)
Date: Mon, 23 Oct 2017 15:15:49 -0400
To: redacted#email.com
Message-ID: <59ee3fe573c8_17c8e3fcc17436908788c#Sephs-MBP-5.fios-router.home.mail>
Subject: Sign Up | IAS
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_59ee3fe529f6_17c8e3fcc1743690877b7";
charset=UTF-8
Content-Transfer-Encoding: 7bit
----==_mimepart_59ee3fe529f6_17c8e3fcc1743690877b7
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Mail unable to send. Please contact IAS Support.
----==_mimepart_59ee3fe529f6_17c8e3fcc1743690877b7
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<strong>First Name: </strong><p>redacted</p><br>
<strong>Last Name: </strong><p>redacted</p><br>
<strong>Email: </strong><p>redacted</p><br>
<strong>Package: </strong><p>$25/mo | Basic</p><br>
<strong>Username: </strong><p>redacted</p><br>
<strong>Current Followers: </strong><p>58.5k</p><br>
<strong>Age: </strong><p>1</p><br><br>
<strong>Hashtags: </strong><p>hash tagsss</p><br><br>
<strong>Comments: </strong><p>commentssss</p>
</body>
</html>
----==_mimepart_59ee3fe529f6_17c8e3fcc1743690877b7--
No template found for MailerController#sign_up, rendering head :no_content
Completed 204 No Content in 484ms
Your issue is that you are missing the view for the controller not for the mailer. The mailer is working wonderfully. The issue is that you are sending the mail through an HTTP POST to the controller. After sending the request, it is not sure what it needs to respond to.
Is this a JS / JSON request to the controller? Adding something like:
render json: { status: 'ok' }
to the end of your action should solve the issue.
I am migrating an application from Rails 2.3 to Rails 3.1, the emails are not working, when i send an email with attachment i see a plain/text email with the encoded pdf content in the email instead of as an attachment.
here is the command i used to send email
ret = UserMailer.return_forms(#customer[:email], #store, id, #customer[:document]).deliver
here is the definition of returns_form, the return_forms is a method in UserMailer class (class UserMailer < ActionMailer::Base)
def return_forms(email, store, order, pdf_document_path)
load_smtp_settings("noreply")
#recipients = email
#subject = "#{business_name}: Return forms"
#body = "Please follow the instructions within the forms to return your merchandise. Thank You."
attachments['free_book.pdf'] = {mime_type: 'application/pdf',content: File.read(pdf_document_path) }
#from = email
#date = Time.zone.now
#headers = {}
end
I see the content as
--
Date: Mon, 10 Aug 2015 16:16:26 +0530
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <55c881028af96_48d43fe94782e9a0658aa#amol-desktop.mail>
Please follow the instructions within the forms to return your merchandise. Thank You.
--
Date: Mon, 10 Aug 2015 16:16:26 +0530
Mime-Version: 1.0
Content-Type: application/pdf;
charset=UTF-8
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=free_book.pdf
Content-ID: <55c88102872ba_48d43fe94782e9a0657a0#amol-desktop.mail>
JVBERi0xLjQKJcfsj6IKNyAwIG9iago8PC9MZW5ndGggOCAwIFIvRmlsdGVy
IC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nH1W227bOBB991cM0AWqABZLUvc8
bTZNivTiuLUX2GKzD6xE22pk0aWktOnX75CSbUW+xEhkDufMGc4cjvIDKGFA
zad7puvRmy8JLKuRtYJejnyfghd5MQRBSIGjTY4W1srDkB+xeh4HHocQ92yM
clxzr7NFLD6w7fx6WOtn4gWhD2ewjEfeaZIeuHW0GUYxg3Nwn/rhGaI+vnVt
8wzhHN4PqX+GqQ+3njbTxIez8DhOzhD14dZzUM+j8MD3zxH14K3nIOZReEjp
The return_forms call should have a call for mail() method at the end. Something like:
mail(:from => your_from, :to => your_to, :subject => your_subject, :body => your_body)
It is also a good idea to enable mailer errors in your development.rb to see if any errors appear:
config.action_mailer.raise_delivery_errors = true
I am trying to send emails through using sendgrid template. But still sent, standard template.
def send_test_email(user)
#user = user
sendgrid_unique_args "filters" => {
templates" => {
"settings" => {
"enable" => 1,
"template_id" => "5e4a1ef6-a948-455f-b194-cec87ef88b0e"
}
}
}
mail( :to => #user.email,
:subject => 'Thanks for signing up for our amazing app' )
end
After sending
Sent mail to test#ya.net (699.1ms)
Date: Thu, 13 Aug 2015 10:00:04 +0300
From: example#example.com
To: test#ya.net
Message-ID: <55cc407412764_23922fba2642131f#Vlad.mail>
Subject: Thanks for signing up for our amazing app
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
X-SMTPAPI: {"unique_args": {"filters": {"templates": {"settings":
{"enable":1,"template_id": "5e4a1ef6-a948-455f-b194-cec87ef88b0e"}}}}}
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Thanks for signing up, Jovani!</h1>
<p>Thanks for joining and have a great day! Now sign in and do
awesome things!</p>
</body>
</html>
How do I make that poisoned sendgrid template?
Your question does not clearly state the problem, but one thing I did notice is that your HTML does not have <%body%> which send grid needs in order to work with templates properly.
I want to send a mail to all my users when an article is published. I have this code :
Mailer class
class AdminMailer < ApplicationMailer
def notification_mail(user)
#user = user
mail(to: #user.email, subject: '**TEST**')
end
end
Article.rb
after_create :send_email_to_users
def send_email_to_users
User.all.each do |user|
AdminMailer.notification_mail(user).deliver_now
end
end
Configuration
ActionMailer::Base.smtp_settings = {
:user_name => 'simon.m#********.com',
:password => '********',
:address => 'smtp.*******.com',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
This code seems to work because when I post an article I can see on my console that e-mail are send but I didn't receive them into my mailbox.
CONSOLE
AdminMailer#notification_mail: processed outbound mail in 23.1ms
Sent mail to simon.m#*******.fr (30014.1ms)
Date: Mon, 08 Jun 2015 05:21:05 -0700
From: simon.m#******.com
To: simon.m#*********.fr
Message-ID: <557588b117179_ae53f7fcf56e0d0328b8#localhost.localdomain.mail>
Subject: **TEST**
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_557588b114e80_ae53f7fcf56e0d0327be";
charset=UTF-8
Content-Transfer-Encoding: 7bit
----==_mimepart_557588b114e80_ae53f7fcf56e0d0327be
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: base64
VW5lIGlkw6llIHZpZW50IGQnw6p0cmUgcHVibGnDqWUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
----==_mimepart_557588b114e80_ae53f7fcf56e0d0327be
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html>
<body>
<!DOCTYPE html>
<html>
<head>
<meta content=3D'text/html; charset=3DUTF-8' http-equiv=3D'Content-Ty=
pe' />
</head>
<body>
<h1>Une id=C3=A9e vient d'=C3=AAtre publi=C3=A9e </h1>
</body>
</html>
</body>
</html>
Anyone know how to make it works ?
Make sure you have deliveries and delivery errors enabled for the environment your app is running in.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
Last time I did this I had to enable less secure apps on my google apps account, it might be the same for you. It's hard to say without any errors. Visit https://www.google.com/settings/security/lesssecureapps to enable that. More info
Make sure Google hasn't blocked your IP. Go to http://www.google.com/accounts/DisplayUnlockCaptcha and click continue.
Source
Seeing some sort of error would help to narrow this down but hopefully this helps!
So I've been reading about the little action icons in Google Mail and I'm trying to set this up inside Rails 3. I have the template, I have the message itself, I have SMTP set up to Google Mail as well.
According to this article:
http://googleappsdeveloper.blogspot.com/2013/05/introducing-actions-in-inbox-powered-by.html
(read the comments) the only way to test this out is to send the messages from you to you (the sender and recipient have to be the same). Unfortunately, it looks like you still have to DKIM or SPF validate the message as well.
So here's the question: Has anybody been able to test this inside a dev environment? When I use GMail SMTP, I don't get a DKIM signature so it won't show the action icon on the far right.
Message Body:
Received: -
Date: Sat, 22 Feb 2014 15:25:45 -0800
From: me
To: me
Message-ID: <530931f945de6_17c563fc73085e6e86978c#BigMac.local.mail>
Subject: Testing Gmail action Schemas :
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_530931f943db6_17c563fc73085e6e869643";
charset=UTF-8
Content-Transfer-Encoding: 7bit
----==_mimepart_530931f943db6_17c563fc73085e6e869643
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
EMAIL CONTENT GOES HERE
----==_mimepart_530931f943db6_17c563fc73085e6e869643
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<html>
<header>
<div itemscope itemtype="http://schema.org/EmailMessage">
<meta itemprop="description" content="Click here to view your ticket."/>
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
<link itemprop="url" href="https://support.und0.com/tickets/1"/>
<meta itemprop="name" content="View ticket"/>
</div>
</div>
</header>
<body>
<div>EMAIL CONTENT GOES HERE</div>
</body>
</html>
----==_mimepart_530931f943db6_17c563fc73085e6e869643--