Hi everyone,
In April 2019, we’ve done a custom newsletter system linked to Sendgrid for a customer because he wanted to send all of his events database in a newsletter template to his subscribers database. All was working good since this week where nothing is sent anymore and nothing has moved in our code (we have checked a lot of things in the code but all seem good …). The code runs indefinetely now and after a few time make crash our browser …
We don’t know if the issue comes from Wix or Sendgrid and why before it was working and now it doesn’t work …
Thanks in advance if someone know what it could be (all the details below) ?
The Sendgrid template that show all the events database
And the database shown on his website : https://reversewebagency.wixsite.com/website-2/chercher-evenement
The subscribers database :
The process of sending :
It’s on a dashboard page. He has a field to put the text that he wants and a button to activate the e-mails sending (“Titre 1” is just a message that says “sent to X mail / sent so X mail / Sent to X mail / …”) :
So after pushing the button sent the e-mail to all entry in “getsubscribers” databases
Our code in Wix :
On the dashboard page :
// For full API documentation, including code examples, visit http://wix.to/94BuAAs
import wixCRM from 'wix-crm';
import wixData from 'wix-data';
import {sendEmail} from 'backend/email.jsw';
$w.onReady(function () {
//TODO: write your page related code here...
});
export async function button1_click(event) {
//Add your code for this event here:
if ($w('#input1').value != "") {
$w('#button1').hide();
await email()
.then( (result) => {
//let items = result.items;
//let totalCount = result.totalCount;
//let offset = result.offset;
$w('#button1').show();
} )
.catch( (err) => {
let errMsg = err.message;
let errCode = err.code;
} );
}
}
async function email () {
var message = {
"user":{
"orderHistory":[
]
}
}
var emailAdress = $w('#input1').value;
//var message = "https://reversewebagency.wixsite.com/permanences/stripeannuel";
await wixData.query("getSubscribers")
.eq("enabled", true)
.limit(1000)
.find()
.then( async(results) => {
if(results.items.length > 0) {
let mails = results.items; //see item below
await wixData.query("evenements")
.eq("publie", true)
.ascending("dateDebut")
.limit(1000)
.find()
.then( async(results) => {
if(results.items.length > 0) {
let evenements = results.items; //see item below
for (var i = 0; i < evenements.length; i++) {
console.log(evenements[i]);
var minutes1 = (evenements[i].dateDebut.getMinutes()).toString();
var minutes2 = (evenements[i].dateFin.getMinutes()).toString();
if (minutes1 == "0") {
minutes1 = "00"
}
if (minutes2 == "0") {
minutes2 = "00"
}
await message.user.orderHistory.push(
{
"type":evenements[i].type,
"jour":await formatDay( evenements[i].dateDebut.getDay() ),
"date":await formatDate(evenements[i].dateDebut),
"heures":(evenements[i].dateDebut.getHours())+":"+minutes1+"-"+(evenements[i].dateFin.getHours())+":"+minutes2,
"nom":evenements[i].nomEvenement,
"localite":evenements[i].localite,
"adresse":evenements[i].adresseMap,
"site":evenements[i].site,
"facebook":evenements[i].facebook,
"mail":evenements[i].mail,
"prix":evenements[i].prix,
"description":evenements[i].description,
"image":evenements[i].image
}
);
console.log(message);
}
for (var i = 0; i < mails.length; i++) {
await sendEmail(mails[i].eMail, message)
.then( (result) => {
//let items = result.items;
//let totalCount = result.totalCount;
//let offset = result.offset;
console.log("EMAIL ENVOYE !");
$w('#text1').text = "email envoyé avec succès !"+mails[i].eMail;
$w('#text1').show();
} )
.catch( (err) => {
let errMsg = err.message;
let errCode = err.code;
console.log(err);
} );
}
} else {
// handle case where no matching items found
}
} )
.catch( (err) => {
let errorMsg = err;
} );
} else {
// handle case where no matching items found
}
} )
.catch( (err) => {
let errorMsg = err;
} );
}
function formatDate(date) {
var monthNames = [
"Janvier", "Fevrier", "Mars",
"Avril", "Mai", "Juin", "Juillet",
"Aout", "Septembre", "Octobre",
"Novembre", "Decembre"
];
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
return day + ' ' + monthNames[monthIndex] + ' ' + year;
}
function formatDay(date) {
var day = [
"Dimanche", "Lundi", "Mardi",
"Mercredi", "Jeudi", "Vendredi", "Samedi"
];
return day[date];
}
SendGrid.js (backend) :
import wixData from 'wix-data';
import { fetch } from 'wix-fetch';
export async function sendWithService(key, sender, recipient, message) {
const url = "https://api.sendgrid.com/v3/mail/send";
const headers = {
"Authorization": "Bearer " + key,
"Content-Type": "application/json"
};
var template_id = "d-ccf72614219f4cf7b85bbe4eb44be9fd";
const data = {
"personalizations": [{
"to": [{
"email": recipient
}],
"dynamic_template_data": message
}],
"from": {
"email": "info@agendatango.ch"
},
"subject": "bonjour",
//"text": body,
/*"content": [{
"type": "text/html",
"value": body
}],*/
"template_id": template_id
//"html" : '<a href='+file+'>Claim your offer!</a>'
/*"attachments" : [{
"content" : file,
"filename" : "devis.pdf",
"type" : "application/pdf"
},
{
"content" : pdfToSend,
"filename" : "bon.pdf",
"type" : "application/pdf"
}
]*/
};
return await fetch(url, {
"method": "POST",
"headers": headers,
"body": JSON.stringify(data)
})
.then(response => response.text);
}
email.jsw (backend) :
import {sendWithService} from 'backend/sendGrid';
export async function sendEmail(email, message) {
const key = "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";
const sender = "contact@reverseweb.ch";
//const recipient = "guillaume.brut@gmail.com";
const recipient = email;
return await sendWithService(key, sender, recipient, message);
}
data.js (backend) :
export function getSubscribers_beforeInsert(item, context) {
//TODO: write your code here...
item.enabled = true;
return item;
}
Our code in the Sendgrid template :
<p style="text-align: center;"><span style="text-decoration: underline; color: #0000ff;"><strong><a href="https://www.agendatango.ch/se-desabonner?utm_campaign=7db084d2-3e88-4b09-bda5-af702a940ea7&utm_source=so" target="_blank"><span style="font-size: 8pt;">Se désabonner</span></a></strong></span></p>
<p>{{#each user.orderHistory}}</p>
<div style="text-align: center;" data-start-index="5410" data-end-index="5443"><hr></div>
<div style="text-align: center;" data-start-index="5410" data-end-index="5443">
<div style="text-align: left;"> </div>
<div style="text-align: left;">
<table style="border-collapse: collapse; width: 100.098%; height: 36px;" border="1">
<tbody>
<tr>
<td style="width: 64.7826%;">
<div style="text-align: left;"><strong>{{this.nom}}</strong></div>
</td>
<td style="width: 35.2174%;"><strong>{{this.localite}}</strong></td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: left;">
<table style="border-collapse: collapse; width: 99.9617%; height: 26px;" border="1">
<tbody>
<tr>
<td style="width: 23.2164%;">{{this.type}}</td>
<td style="width: 10.117%;">
<div style="text-align: center;">{{this.jour}}</div>
</td>
<td style="width: 11.2802%; text-align: center;">{{this.date}}</td>
<td style="width: 11.42241%; text-align: center;">{{this.heures}}</td>
<td style="width: 6.67442%;">
<div style="text-align: center;">{{this.prix}}</div>
</td>
</tr>
</tbody>
</table>
<table style="border-collapse: collapse; width: 99.9982%; height: 26px;" border="1">
<tbody>
<tr style="height: 26px;">
<td style="width: 24.6093%; text-align: center; height: 18px;"><a href="{{this.adresse}}">plan</a></td>
<td style="width: 21.3907%; text-align: center; height: 18px;"><a href="{{this.site}}">site web</a></td>
<td style="width: 24.363%; text-align: center; height: 18px;"><a href="{{this.facebook}}">facebook</a></td>
<td style="width: 23.637%; text-align: center; height: 18px;"><a href="{{this.mail}}">e-mail</a></td>
</tr>
</tbody>
</table>
</div>
</div>
<p>{{/each}}</p>