Transactional Email Service with a lot of complex personalization - email

We are a dating application that wants to engage our users and thereby we want the ones in a week to send to our users report email about their activity, And of course the activity of every use should be unique.
Here is the example of the report, we want to deliver:
Hi, `User`,
You are receiving this notice because you have unread messages!
Do not miss your chance, maybe one of these messages were sent by your significant other!
Unread messages from these users:
Maria, 39, Rostov, link to profile of Maria, link to image of Maria
MIA, 33, Minsk, link to profile of MIA, link to image of MIA
Elena, 33, Kiev,link to profile of Elena, link to image of Elena
Click here to see all messages
I would like to use the one of leading Transactional or Marketing Email Services, but I don't know which one of them could give us solution to this need.

I've used MailJet email transactional service for this matter. They support possibility to add unlimited number of custom properties.
So far I advanced very well with the task doing the following:
Added custom properties for all needed properties
I've uploaded contact list details with all data via a CSV file
I've written a raw html template and bounded the template's placeholders to the custom properties of list details
For example:
<div class="new__faces__img"><img src='[[data:visitor1.photo]]'></div>
<div class="new__faces__name">
<span>[[data:visitor1.name]]</span>, [[data:visitor1.age]]
</div>
> other visitors ...
<div class="new__faces__img"><img src='[[data:visitor12.photo]]'></div>
<div class="new__faces__name">
<span>[[data:visitor12.name]]</span>, [[data:visitor12.age]]
</div>

Related

Why would an email sent from a ColdFusion script to an Office 365 distribution list fail to make it to the list members?

I have an application that sends mail using the ColdFusion <cfmail> tag. When the recipient, specified in the "to" attribute, is a simple single-user mailbox or shared mailbox, the mail is delivered without issue. When the recipient is a distribution list, however, the mail never arrives at the list members' inboxes. Following is what the code looks like:
<cfprocessingdirective suppresswhitespace="no">
<cfmail
type="html"
query="getRecord"
from="Some Email Address<SomeEmail#Address.com>"
to="some_distribution#list.com"
subject="Subject Text">
<p>Some text</p>
<ul>
<li>Some Field: #encodeForHTML(getRecord.someField)#</li>
<li>Some Other Field: #encodeForHTML(getRecord.someOtherField)#</li>
</ul>
<p>Some text</p>
</cfmail>
</cfprocessingdirective>
This has been tested with multiple distribution lists, and failed with all of them. I've tested adding a single-user email address or shared mailbox address to the CC or BCC attribute of the tag, and found that the mail arrives at the CC/BCC address, but not at the addresses of the members of the distribution list.
For Office 365, all groups and distribution lists have Outside Receiving turned off by default. You should check in the configuration for the group if the "Let people outside this organization send mail to this group" check box has been turned on.
To get to this setting:
log into Office 365 as an administrator
select the group from the Active Groups list
click on the group to open the properties slide out
switch to the Settings tab
you can turn on the flag from this panel and apply the changes
Sometimes group emails like that require the sender to be "inside" the group, or at least SMTP authenticated with the server. I'd check that first.

Is it possible to 'localize' content of transactional emails in Magento 2

I want to have different transactional emails content depending of language. Is it possible to achieve that programatically, to create language specific content.
My website has ~50 store views/6 languages and I don't want to add separate template for every store.
UPDATE:
I don't want to translate, but to add completely different content for different languages. Random example: for all stores that use English language i want to have content "Welcome to our store", for stores that use French language i want to have content "How are you today(in French)" and so on. 95% of email content is completely the same, so i use translations for it, but the point is that i don't know how to 'fix' this 'different content' part
Use the trans directive in email templates. Make sure no spaces for variable assigment. Example:
<!-- Correct -->
{{trans "Thank you for your order from %store_name." store_name=$store.getFrontendName()}}
<!-- Incorrect -->
{{trans "Thank you for your order from %store_name." store_name = $store.getFrontendName()}}
The trans directive translate strings into the configured language for your store view. For example, if an email is being sent from a store view that is configured to use the fr_FR locale, the emails are translated to French.
Should have proper configs in the following paths:
Stores-->Configuration-->General-->General-->Locale Options
path_to_theme_directory/i18n/fr_FR.csv
Please check details on Magento's devdocs

SendGrid Transactional Templates - Address and Unsubscribe Link Broken

I've configured several Transactional Templates to be sent from my SendGrid account via their handy Design Tool, which work great!.
However the Address Line and Unsubscribe links on the template footer aren't activated. In an email they display as placeholders, like so
[Sender_Name]
[Sender_Address], [Sender_City], [Sender_State]
[Sender_Zip]
Unsubscribe << (Not a Hyperlink)
I've followed SendGrid's documentation and configured my account address but am unable to find the solution for this.
Any ideas on this? Thanks for any input or guidance!
To get the unsubscribe to function you will need to create one or more unsubscribe groups. If you look under the Marketing menu you will see the sub menu to create those. Once you create one it will be assigned an ID number. When you are generating your email you will need to pass that ID value in as part of the EmailMessage object. If you are using V3 of the API you will be looking for SetAsm.
As for the Sender fields, for transactional templates they do not work correctly, as they are meant for marketing campaigns. Your two options are:
Remove the Sender fields from that block in the template. Add a new text block above it with static values.
Download the template into HTML and convert the sender objects into substitution variables. You will then be able to set them in your code when you are creating the email.
GitHub Bug
The unsubscribe link will only appear if you create an unsubscribe group and specify it while sending using
asm: {
group_id: <the unsubscribe group ID>
}

Can I use HTML to create a vote button on an email that sends a reply?

Situation:
I am a HTML newbie who gets by through Google-fu and I am in charge of a tool which sends HTML email to customers.
I have been asked by our customers (Because pressing reply and typing a single word is really difficult) if I can create buttons on the emails I send which allows them a 1-click reply.
Conditions:
The reply has to come from their own email address
It needs to go back to the email address that sent the email (We have one template email which can be sent from several addresses)
It needs to maintain the same subject line (It contains a reference number to ensure the email is processed correctly when received)
Must be created using inline HTML(4 or 5) only (Restrictions of the system that generates the email)
Ideally will send the reply immediately (And show them as much in some manner), but opening up a new email already pre-populated is an acceptable alternative
I have struggled to find much at all on this, which leads me to think that it is not possible.
If using tiny bit of pure javascript, that does not need any external library on your website.
This code goes to your website where you want your check to be made.
<script>
function getURLParameter(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
}
document.addEventListener("DOMContentLoaded", function(event) {
if(getURLParameter('answ') == 0) document.getElementById('answered_yes').remove();
else if(getURLParameter('answ') == 1) document.getElementById('answered_no').remove();
else {
document.getElementById('answered_yes').remove(); document.getElementById('answered_no').remove();
}
});
</script>
<div id="answered_yes">
THIS IS HOLDER FOR YES ANSWERER //Put your wanted info hare if he answered yes
</div>
<div id="answered_no">
THIS IS HOLDER FOR NO ANSWERER //Put your wanted info hare if he answered no
</div>
Now on email links put these type of links.
<a href="yourwebsite.com/index.php?answ=0" target="_blank" >ANSWER NO</a>
<a href="yourwebsite.com/index.php?answ=1" target="_blank" >ANSWER YES</a>
What this does is simply puts a parameter on a link called answ that has 0 or 1 by my setting and once your website gets a request it checks which parameter is it 0 or 1. If its 0 that means we remove the div that says yes, otherwise do the same with no div.
with only html it is not possible unless you would give him different links as in.
<a href="yoursite.com/he_answered_no.html" >No</a>
<a href="yoursite.com/he_answered_yes.html" >Yes</a>
And put your contents inside there.
However if you are going to use this script in your website, put that code somewhere in the body, its not perfect, but it will do the job. Then put your information on yes div and on no div, its going to remove whatever div he answers too.
But like I mentioned, with purely HTML it is not possible only adding some bits with other languages, pure javascript should work on any HTML site, unless you are trying to add the code to some kind of platform that blocks any ongoing scripts.
You can just use a "mailto:" link similar to this:
Email Us
Here's the link with more info: https://css-tricks.com/snippets/html/mailto-links/
It will open up a prepopulated email with the "to" address, subject line, and body text already inserted. People will be able to modify the text if they want or just click send. You would need to some way to dynamically change the subject line to the one the customer received, but your email tool probably has that capability.

ColdFusion - Sending out a pretty email, mint style

I've used ColdFusion for sending text emails for years. I'm now interested in learning how to send those pretty emails you see from companies like Mint.
Anyone know of a good ColdFusion tutorial to teach me how to make this work and not get hit by bugs or spam filters?
As Ray said, ColdFusion supports HTML email, which is how you make an email "pretty". A quick down and dirty sample looks like this:
<cfmail from="bob#bob.com" to="someguy#email.com" subject="Check this out!" type="HTML">
<HTML>
<head><title>My Email</title>
</head>
<body>
<!--- Style Tag in the Body, not Head, for Email --->
<style type="text/css">
body { font-size: 14px; }
</style>
This is the text of my email.
</body>
</HTML>
</cfmail>
That's it, you've just sent an email. Notice how there is nothing preventing you from sticking in any old from email address you like? That leads me to my next point, in which you're wondering how to avoid getting hit by Spam filters:
The short answer is: You can't.
Oh sure, you can do intelligent things, like not including the word "VIAGRA" in your email (unless you're trying to send out penile enlargement emails and want to know how to get past spam filters, in which case I'm disinclined to help), but let's assume you just want to avoid obvious pitfalls.
I can think of two things that might help:
Send out email from a domain registered to the from email address. I didn't make the rules, but this one can be a pain. Ie., If you try to send out proxy emails for myorg.com, and your server does not host myorg.com, some spam filters are going to block it. What is usually done is to apply some branding to the from email, like this:
<cfmail from="MyOrg.Com <DONOTREPLY#registeredsite.com>" replyto="bob#myorg.com" to="someguy#email.com" subject="Test" type="HTML">
</cfmail>
In this case the email is sent from your server at registeredsite.com, with a replyto being the proxy email address. Spam filters will probably be okay with this, since the from email address of *#registeredsite.com resolves to your server. Try to send out with bob#myorg.com in the from, and you'll definitely run into some places that will block you.
Use a physical server, not a cloud site. I'm running into this very issue right now, but if you don't use a physical server that is located at a dedicated IP to send out your email, and if this server is not the originator of the email, some places are going to block it. This means no EC2 or Rackspace cloud site--sorry, some sysadmins are inclined to put down the banhammer on anything that originates from one of these providers, seeing as it is so easy to churn up your own little spam factory using EC2 or Rackspace for very little cost.
Even if you take these precautions, however, you'll run into a situation where someone gets a hold of your domain name and drags it through the mud. They'll send out thousands of emails to the internet in your name--or rather, in your domain's name--and because of the insecurity of email, your domain will get added to someone's blacklist after a thousand occurrences of hotlove4u#registeredsite.com hit the sysadmin's inbox. There's nothing you can do about it, either.
Or you can decide to run a cloud app and use a remote mail server. But some jokers will get one look at the originator being EC2 and will say, "Nope, sorry. Denied." They don't care about the legitimacy of your organization, only the origin of the email.
Email is an antiquated technology that has been rushed into mass usage before we really were able to think of a better protocol. As a protocol, it's terrible....and yet we're stuck with it, for backwards compatibility reasons. You cannot possibly avoid the spam filter. 95% of the email on the internet is junk mail, and never even reaches the intended recipient. Just absorb the enormity of that statistic for a moment, and pull your ideas back to reality. Many of the spam-prevention techniques being used today are unnecessarily aggressive, and create a great many 'false positives'. You can shoot for, say 80% of your email being sent, but what it really comes down to is this: As soon as the email has been fired off, it's completely out of your control. You can only take responsibility for so much.
What do you mean by "pretty" - HTML based? CF supports html email. Just use type="html". You can also use cfmailpart to send both text and html versions of the same content.
Here's a good article on making HTML email using CSS:
http://articles.sitepoint.com/article/code-html-email-newsletters
Ray's answer is right on the money about the CF part, but most of making this work is about HTML, CSS and testing testing testing.
And I would add to this all that you can check whether a mail will be displayed correctly and whether it will get hit by a spamfilter or not by going to a website that is called litmusapp. You can send your test newsletter to one of their emailaddresses and then they will give you screenshots of how each newsletter will look like in each type of emailclient. Also it checks the newsletter against a few popular spamblockers and gives you advice on what to change.
I would start by finding an HTML template email that you like. Then you put it in the tags with the type set to html as mentioned above. You might want to consider doing the multipart email to handle plaintext (and blackberry) users.
I subscribe to the Campaign Monitor Newsletter & they also have a list of very useful articles here: http://www.campaignmonitor.com/resources/
Might want to check out this ebook from MailChimp. Email apps render HTML in some unusual ways, so be prepared to use tables for layout.
Remember when you try to change the color of the font or background when you writing a cfmail, before you add #F0000, you need to ad extra # at the front of it, like ##F0000. Otherwise, it will cause an error.