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());
    }

}

sendgrid多个收件人c#

您需要为此添加个性化列表。以下代码适用于我。

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);