c# - 防止 SendGrid 消息中出现重复的电子邮件地址?
问题描述
使用用于 C# 库和 SendGrid API v3 的 SendGrid,如果您不小心包含两次相同的电子邮件地址,则会导致根本无法发送电子邮件。
根据 SendGrid文档:
单个个性化对象(在 to、cc 或 bcc 字段中)中的所有收件人将看到完全相同的电子邮件,正如该个性化中的数据所定义的那样,因此我们不允许在这 3 个数组之间重复电子邮件单一的个性化。
例如:
var msg = new SendGridMessage();
msg.AddTo("test@example.com");
msg.AddBcc("test@example.com"); // duplicate email address, nothing will be sent
在发送电子邮件之前,我想检查 SendGridPersonalizations
并删除任何重复的电子邮件。
这是我到目前为止的代码:
var msg = new SendGridMessage();
msg.AddTo("test@example.com");
msg.AddBcc("test@example.com"); //has a duplicate email address, nothing will be sent
foreach (var p in msg.Personalizations)
{
var emails = new List<EmailAddress>();
emails.AddRange(p.Tos);
emails.AddRange(p.Ccs);
emails.AddRange(p.Bccs);
// find duplicates
var duplicates = emails.GroupBy(x => x.Email)
.Where(g => g.Count() > 1)
.Select(y => y.Key)
.ToList();
// remove all but one...
// remove duplicates from Bccs first, then Ccs, then Tos
foreach (var d in duplicates)
{
}
}
我被困在将重复的电子邮件地址减少到一个唯一的电子邮件地址的最佳方法上。有没有人找到一个好方法来强制使用 SendGrid 没有重复的电子邮件地址?
解决方案
最好不要通过维护您已添加的所有电子邮件的列表来添加它们,从“收件人”列表开始。如果您不能这样做并且您必须在事后删除它们,请在上面创建该超级列表,然后通过抄送,然后通过密件抄送删除已经在超级列表中的那些。
var existingEmails = new HashSet<String>();
foreach (String email in MyToList)
{
if(!existingEmails.ContainsKey(email)
{
msg.AddTo(email);
existingEmails.Add(email);
}
}
foreach (String email in MyCCList)
{
if(!existingEmails.ContainsKey(email)
{
msg.AddCC(email);
existingEmails.Add(email);
}
}
foreach (String email in MyBCCList)
{
if(!existingEmails.ContainsKey(email)
{
msg.AddBCC(email);
existingEmails.Add(email);
}
}
如果您想使用上面的代码执行此操作,则在获得重复列表后,您必须对foreach
每个p.Tos
等进行操作。p.CCs
然后检查当前电子邮件地址的重复列表。如果它是重复的,则将其从列表中删除。您永远不需要检查To
列表,因为您总是想要这些。
推荐阅读
- php - PHP中的会话变量没有出现
- automation - 对命令“gcloud compute instance-templates delete”自动回答是
- python - 如何从一个 csv 文件中读取多个矩阵?
- javascript - 获取 ENOENT:没有这样的文件或目录,打开...尝试将 App.js/index.js 文件移动到 /src 文件夹中的子文件夹时出错
- android - 如何仅在反应原生的底部设置高程阴影?
- linux - Linux Monodevelop 中的选项卡控件是否有问题?
- docker - 如何从外部 IP 访问容器?
- vba - 如何查找和替换Word的内容?
- python - PCA 对模型性能的影响是什么?
- javascript - 有人可以分解这段代码(解释),因为我对 javascript 不是很好吗?