SendGrid: отправка электронной почты нескольким получателям без отображения других сообщений электронной почты на вкладке & quot; поле

Я хочу отправить электронное письмо нескольким получателям.

я использовал персонализации, но все электронные письма появляются в поле «to», что нарушает их конфиденциальность.

Я не хочу использовать BCC, так как это часто приводит к ненужным результатам (например, http://www.standss.com/blog/index.php/why-you-should-avoid-using-bcc-for-emails/).

Поэтому мой вопрос заключается в том, как я могу отправить электронное письмо нескольким получателям, чтобы в поле «Кому» не отображались все электронные письма.

Единственная альтернатива, которую я вижу, — это отправлять отдельный запрос в API для каждого письма, используя цикл, который очень ресурсоемкий и занимает много времени, когда у меня много писем для отправки!

1

Решение

При использовании Персонализации SendGrid с несколькими группами получателей вам необходимо определить несколько объектов 1-го уровня в массиве Personalization.

Так что вместо:

{"personalizations": [
{"to": [
{"email": "[email protected]"},
{"email": "[email protected]"}
]}]}

что все будет общим To: массив, который может видеть друг друга,

Ты хочешь:

{"personalizations": [
{"to": [{"email": "[email protected]"}]},
{"to": [{"email": "[email protected]"}]}
]}

На каждом уровне персонализации вы можете настроить контент, тему, теги подстановки и многое другое.

Таким образом, вы можете создать полную персонализацию и повторить эти 1000 раз. Получив 1000 получателей, объедините их в один вызов API и отправьте.

5

Другие решения

Чтобы построить @jacobmovingfwd, вот пример в Python, который отправляет одно и то же электронное письмо нескольким получателям с индивидуализированными полями «to». Я проверил код, и он работает для меня.

# Given a list of email addresses that are strings
sublist = [...]

mail = Mail()

for to_email in sublist:
# Create new instance for each email
personalization = Personalization()
# Add email addresses to personalization instance
personalization.add_to(Email(to_email))
# Add personalization instance to Mail object
mail.add_personalization(personalization)

# Add data that is common to all personalizations
mail.from_email = Email(from_email)
mail.subject = subject
mail.add_content(Content('text/plain', message_txt))
mail.add_content(Content('text/html', message_html))

# Send
sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
response = sg.client.mail.send.post(request_body=mail.get())
0

Вот версия C #, которая клонирует Personalization для каждого получателя для отправки по почте отдельно, но все же с помощью одного вызова API SendGrid:

    public static void SendEachReceipient(SendGridMessage msg, IEnumerable<string> recipients)
{
if (msg == null || recipients == null || !recipients.Any())
return;

if (msg.Personalizations == null) //can easily be null if no substitutions have not been added
msg.Personalizations = new List<Personalization>();

var substitutionsCopy = msg.Personalizations.FirstOrDefault()?.Substitutions; //all substitutions (if any) are always all contained in the first personalization
msg.Personalizations.Clear(); //we will start fresh - one personalization per each receipient to keep emails private from each other

foreach (var email in recipients.Where(x => !string.IsNullOrEmpty(x)).Distinct())
{
var personalization = new Personalization();
personalization.Substitutions = substitutionsCopy;
personalization.Tos = new List<EmailAddress>() { new EmailAddress(email) };
msg.Personalizations.Add(personalization);
}

var result = new SendGridClient("api-key").SendEmailAsync(msg).Result;
}
0
По вопросам рекламы [email protected]