Receiving empty email from a delayed job Rails app - ruby-on-rails

I'm sending an email with a delayed job from a rails app, we get the email as well but received empty only with subscription email link at the bottom, but any content as well.
When I send it normally without a delayed job we get it with content and it display ok, I already check Email Activity on Sendgrid and it display my emails. We are not sure what could be causing this bug.
Already talked with Engine Yard guys and told us that can be Subscription Tracking app, but we already disabled it and it's not...
I will appreciate any clue about this...

Probably this might be because the what ever the parameter which you are sending as the mail content is not correctly passing to delayed_job
class GenerateFileJob < Struct.new(:claim_id)
def perform
claim = Claim.find(claim_id)
#do some stuff
end
end
Above is a sample code when I used in my app with delayed job, if you could paste any code we might be able to help you more

Related

Rails, How to deliver dynamic email depending on user status after session expiration

So I have a website similar to an e-commerce site. I want to send out an email to the user after session expiry(preferably 30min after expiry), with dynamic content - with respect to their status, i.e. if they have items in their cart, if they haven't paid, or if the payment was successful.
So there are three questions here?
What are different ways to achieve this?
Is it possible to run a section of code after 30min of session expiration?
Is it possible to put an if-else statement to the mail delivery depending on the user status?
Currently, I'm using Rails 5.0.0, and sendgrid to send emails. Sendgrid has codes like Mail.deliver_after(30 mins). But I can't seem to put an if else condition to make the content of the email dynamic. Also, I want to send the email after 30 mins after session expiry.
What are different ways to achieve this?
- Using background job. Create asynchronous jobs with run time and priority.
Is it possible to run a section of code after 30min of session expiration?
- Use delayed_job gem or use some other background job gems. Using asynchronously
Is it possible to put an if-else statement to the mail delivery depending on the user status?
- Called mail delivery using background job so you can send mail whenever you want.

How do notifications work with Mailboxer gem?

I'm trying to figure out how to setup a notifications system using Mailboxer.
I've already used it to setup an in-site messaging system so that users can message each other. Now I'd like to use it to send notifications from the site, to notify users of changes in their reputation points or remind them of actions they must complete. Something like Facebook or Stackoverflow's dropdown notification menus.
As an example, it might contain these types of notices:
User gets some points for performing an action:
"You received 50 points for helping #{user.name} with #{request.title}.
A reminder that the user must perform an action:
"You must review #{user.name}'s help with #{request.title}!
Will link to a page to complete that action.
User receives a reply to a message they sent:
"You've received a message from #{sender.name}"
Will link to the message.
Here are some details:
I don't want all notifications to send an email. Most will only need to be seen in the notifications menu. Is there an option in Mailboxer to control what is emailed, or would I have to bypass Mailboxer's mailers?
I'll want to format each type of notification differently in the dropdown. Add a specific glyphicon to each for example. Could I use the notification type field for this (using it to set a conditional)? How does type work? Can I just set it to a string, such as "reputation", depending on the notification?
Objects can be passed to the notify method. I'm confused about the purpose of this. How can that object be used? What objects would I want to send?
Feel free to leave some general info on Mailboxer notifications rather than specifically answering everything.
I've had pretty bad luck finding documentation for the notifications features, so would appreciate it if someone with some Mailboxer knowledge could chime in on this. Thanks in advance.
This is an late answer but just in case someone came upon this question like me, this is what I ended up doing.
There is an user identities method defined as https://github.com/mailboxer/mailboxer#user-identities
If it returns an email, an email will be sent. If it returns nil, no email will be sent.
There is a notify method in mailboxer, and you can use it to send notifications as,
alice.notify("Hi","Bob has just viewed your profile!")
And in mailboxer_email, check if the object is a notification or not.If it is, do not send an email.
def mailboxer_email(object)
if object.class==Mailboxer::Notification
return nil
else
email
end
end
You can defined more complex logic here such as disable email for certain type of users, etc.

Rails, check if email was sent or not

I have an app that sends email to registred users. This app sends an automatic email to the user while he is using some functions. Plus, on the admin screen, the admin can send emails to all persons that didn't get the email sent automatically for any reason. I store in database a value showing if the email was delivered or not, so the admin won't send emails to someone that already got one.
The problem is: how can I check if the email was delivered correctly in order to update this value? I am not talking about tests, I need to check right after the method deliver is called if the email was sent, or if any problem happened, like connection loss or email is invalid. Is there any method or way to do this?
Thanks.
When you send a message and no error is raised, you can assume that the mail was delivered (at least you can assume that some system accepted the responsibility to deliver your message).
Nevertheless, there are many reasons for delivery failure; sometimes you may get an error hours or even days later. You will need to have a bouncing mail address and inspect returned messages. If you want to process bouncing, inspect an open source software with bouncing treatment such as phplist. This is no so trivial as you might think.
Another alternative is send e-mails through a dedicated service such us SendGrid. This services provide APIs that will allow you to retrieve information about your messages.
You can also use the mailman gem to parse reply email messages for bad email.

How to test whether a mail was sent successfully using ActionMailer?

I'm using ActionMailer in Rails 3 to send periodic emails. I need to know whether an email was sent correctly (as far as it is possible to do so).
#lists.each do |list|
email = Reminder.deadline_reminder(list)
email.deliver
end
Is there a property of the email object (class Mail::message from the Mail library) that will tell me whether the send went correctly (no connection issues, authentication problems, etc)? I've looked through the classes on Github but haven't been able to figure anything out.
It all depends on what you consider successful.
You can test to see whether your code sent the message. You can often check the log to see if the mail-forwarding host received it and moved it on toward its destination.
But, only proprietary mail systems support delivery-receipts. SMTP doesn't and probably never will because of privacy issues and the inability of the mail-client vendors to agree on how to do it. So, even if it is delivered all the way to the intended destination there's no way to know if the person read it.
Your best bet is to put a link in the message that the user clicks which will tickle an app on the server with a token that was unique for that message. When the app sees the token it sets a flag letting you know they got the message AND at least read the part about clicking the link. Then, if there has to be a response within a given time you also track when the message was sent and escalate if the token wasn't received back within the time-limit.

How to trace Bouncing E-mails in Action mailer (Rails)

I am using Active mailer to sending Emails,
I want to trace the mail ids which are bounced when i am sending the mails to the user.
Please give your valuable comments guys.
Thanks in Advance.
*HIKKU
One solution is to use unique From-addresses when sending emails.
For example when sending email to user with ID 666, use the from address no-reply-666#example.com.
Then setup a script that receives the replies. If the reply is a bounce pull out the msg-id or whatever you need from the mail and store it.
Detecting whether the reply was a bounce or an actual reply from a real user can be tricky, because not all MTAs format the bounce messages properly.
An alternative to Postmark could be MadMimi.
I recently switch to using the email service Postmark, just so I could know about bounced emails better. They have a bounce api and support webhooks. I never could figure out a way to get that information back to my app from the MTA I had running. It is a pay service so it might not work for you, but it has been useful for my project.
There is a good explanation in Recepie #70 http://www.pragprog.com/titles/fr_rr/rails-recipes
Also take a look at http://blog.gipoo.net/2010/5/26/handling-bounced-emails-in-ruby-on-rails

Resources