Corvid with Sendgrid issue since this week

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 … :frowning:

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&amp;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;">&nbsp;</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>