sendgrid多个收件人c#
本文关键字:收件人 sendgrid | 更新日期: 2023-09-27 18:00:04
我正在使用此代码从web应用程序发送电子邮件。只有一个收件人没有问题。我研究过使用来自https://sendgrid.com/docs/Integrate/Code_Examples/v3_Mail/csharp.html向多个收件人发送电子邮件。我尝试使用逗号分隔的字符串作为destinatario(请参阅代码中的args),即you@example.com,she@example.com,he@example.com但SendGrid只接收第一个收件人。我也尝试过使用数组,但结果是simmilar,SG只接受最后一个收件人。传递收件人列表的正确方式是什么?
public class email
{
public void enviar(string destinatario, string asunto, string contenido)
{
Execute(destinatario, asunto, contenido).Wait();
}
static async Task Execute(string destinatario, string asunto, string contenido)
{
string apiKey = "SG...............";
dynamic sg = new SendGridAPIClient(apiKey);
Email from = new Email("someone@example.com");
string subject = asunto;
Email to = new Email(destinatario);
Content content = new Content("text/plain", contenido);
Mail mail = new Mail(from, subject, to, content);
dynamic response = await sg.client.mail.send.post(requestBody: mail.Get());
}
}
您需要为此添加个性化列表。以下代码适用于我。
var apiKey = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
var client = new SendGridClient(apiKey);
var msg = new SendGridMessage()
{
From = new EmailAddress("sender@email.com", "Sender Name"),
Subject = "Subject",
PlainTextContent = "Text for body",
HtmlContent = "<strong>Hello World!",
Personalizations = new List<Personalization>
{
new Personalization
{
Tos = new List<EmailAddress>
{
new EmailAddress("abc@email.com", "abc"),
new EmailAddress("efg@email.com", "efg")
}
}
}
};
var response = await client.SendEmailAsync(msg);
有关更多详细信息,请查看以下邮件发送
public static SendGridMessage CreateSingleEmailToMultipleRecipients(EmailAddress from, List<EmailAddress> tos, string subject, string plainTextContent, string htmlContent, bool showAllRecipients = false);
以下代码适用于我的
using SendGrid;
using SendGrid.Helpers.Mail;
public async Task<bool> sendEmailMonthlyReports(List<string> emailAddress, string filePath)
{
try
{
var client = new SendGridClient("API Key");
var msg = new SendGridMessage()
{
From = new EmailAddress("from@xxxx.com", "xxxxx"),
Subject = "xxxx",
HtmlContent = ""
};
var tosList = new List<EmailAddress>();
if (emailAddress.Count() > 0)
{
foreach (var i in emailAddress)
{
tosList.Add(new EmailAddress(i));
}
}
// you can skip this attachment part if you don't have attachments
using (var webClient = new WebClient())
{
if (filePath != null && filePath != "")
{
var bytes = webClient.DownloadData(filePath);
var file = Convert.ToBase64String(bytes);
msg.AddAttachment("exx.pdf", file);
}
}
var result2 = MailHelper.CreateSingleEmailToMultipleRecipients(msg.From,tosList,msg.Subject,"",msg.HtmlContent);
result2.Attachments = msg.Attachments;
msg.SetClickTracking(false, false);
var result = await client.SendEmailAsync(result2);
if (result.StatusCode.ToString() == "Accepted")
{
return true;
}
return false;
}
catch (Exception ex)
{
var exe = ex.ToString();
return false;
}
}
问题的答案可以在库的源代码中找到,有两个构造函数可以创建Mail对象。正如您所说,您使用的构造函数只适用于向一个收件人发送邮件。您必须使用无参数构造函数。
var mail = new Mail();
mail.Subject = "subject";
mail.From = new Email("from@example.com", "fromName");
mail.AddContent(new Content("text/html", "<p>this is a mail<p>"));
mail.AddPersonalization(personalization);
实际收件人是通过Personalization对象添加的:
var personalization = new Personalization();
foreach (Email email in emailList)
{
personalization.AddTo(email);
}
此个性化对象还允许更多的自定义,如将收件人添加为抄送或密件抄送。
为多个收件人发送邮件语法:
命名空间:
using SendGrid;
using SendGrid.Helpers.Mail;
语法:
var client = new SendGridClient("XXXXXXX");
var msg = new SendGridMessage() {
From = new EmailAddress("Yourmail@address", " your Address name"),
Subject = subject,
PlainTextContent = message,
HtmlContent = message
};
var timeToSend = DateTime.Now
// to add time to datetime refer https://stackoverflow.com/questions/2146296/adding-a-time-to-a-datetime-in-c-sharp
if (timeToSend != null && timeToSend.Value.Date >= DateTime.Now.Date) {
var offset = new DateTimeOffset(timeToSend.Value);
long sendAtUnixTime = offset.ToUnixTimeSeconds();
msg.SendAt = sendAtUnixTime;
}
var emails = to.Split(';');
foreach(var email in emails) {
msg.AddTo(new EmailAddress(email));
}
if (!string.IsNullOrEmpty(bcc)) {
msg.AddBcc(new EmailAddress(bcc));
}
var response = await client.SendEmailAsync(msg);