Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NodeJS Sendgrid Issue in sending email to multiple recipients

I am having issue in sending mails to multiple recipients.

My script is

var SendGrid = require('sendgrid').SendGrid;
var sendgrid = new SendGrid('<<username>>', '<<password>>');      
    sendgrid.send({
    to: '[email protected]',   
from: '[email protected]',
bcc: ["[email protected]","[email protected]"],

I have two questions here

  1. Can I have an array of recipients in to list?
  2. How can I get an array of recipients in bcc list?

Solutions related to above two queries will be indeed helpful

Thanks Nabarun

like image 889
Nabs Avatar asked Dec 09 '22 14:12

Nabs


2 Answers

You may use an array of recipients in both the to and bcc fields.

For example:

var SendGrid = require('sendgrid').SendGrid;
var sendgrid = new SendGrid('{{sendgrid username}}', '{{sendgrid password}}');      
sendgrid.send({
    to: ['[email protected]', '[email protected]'],
    from: '[email protected]',
    bcc: ['[email protected]', '[email protected]'],
    subject: 'This is a demonstration of SendGrid sending email to mulitple recipients.',
    html: '<img src="http://3.bp.blogspot.com/-P6jNF5dU_UI/TTgpp3K4vSI/AAAAAAAAD2I/V4JC33e6sPM/s1600/happy2.jpg" style="width: 100%" />'
});

If this isn't working for you and Node isn't spitting out any errors, check to see if the emails are being sent, by logging into SendGrid's website and looking at the Email Activity Log.

One thing I came across while testing your code sample is if you're sending the to and bcc to the same gmail address, gmail will combine it all into one email (so it appears it didn't work). Make sure when testing you're sending email to entirely different accounts.

If you need some email accounts to test with Guerrilla Mail is an excellent option for creating temporary test accounts.

like image 123
Nick Q. Avatar answered Dec 11 '22 08:12

Nick Q.


This is the solution that I ended up with and thought it was more straightforward and could be helpful for folks.

Note the difference in the shape of the personalizations object.

Recipients can see each other:


const sgMail = require('@sendgrid/mail')
sgMail.setApiKey(process.env.SENDGRID_API_KEY)

// Declare the content we'll use for the email
const FROM_EMAIL = '[email protected]' // <-- Replace with your email
const subject = 'Test Email Subject'
const body = '<p>Hello HTML world!</p>'
const recipients = ['[email protected]', '[email protected]'] // <-- Add your email(s) here to test

// Create the personalizations object that will be passed to our message object
let personalizations = [{
    to: [],
    subject
}]

// Iterate over our recipients and add them to the personalizations object
for (let index in recipients) {
    personalizations[0].to[index] = { email: recipients[index] }
}

const msg = {
    personalizations,
    from: FROM_EMAIL,
    html: body,
}

// Log to see what our message object looks like
console.log(msg)

// Send the email, if success log it, else log the error message
sgMail.send(msg)
    .then(() => console.log('Mail sent successfully'))
    .catch(error => console.error(error.toString()))

Personalizations Object:

{
    personalizations: [{
        to: [
            {email: "[email protected]"},
            {email: "[email protected]"},
        ],
        subject: "Test Email Subject"
    }]
}

Recipients can not see each other:

// Create the personalizations object that will be passed to our message object
personalizations = []

// Iterate over our recipients and add them to the personalizations object
for (let index in recipients) {
    personalizations[index] = { to: recipients[index], subject}
}

Personalizations Object:

{ 
    personalizations: [
        {
            to:  "[email protected]",
            subject: "Test Email Subject"
        }, 
        { 
            to:  "[email protected]",
            subject: "Test Email Subject"
        }
    ]
}

I created a RunKit with the full solution and where you can test it out.

like image 40
foba Avatar answered Dec 11 '22 08:12

foba