【问题标题】:cannot convert from 'string' to 'SendGrid.Helpers.Mail.EmailAddress'无法从“字符串”转换为“SendGrid.Helpers.Mail.EmailAddress”
【发布时间】:2018-11-19 16:30:18
【问题描述】:

我正在尝试在 c# asp.net 应用程序中构建一些基本的电子邮件功能。我的技能有限,我正在学习。

我正在尝试向应用程序发送电子邮件地址列表。创建列表时出现以下错误:

无法从“字符串”转换为“SendGrid.Helpers.Mail.EmailAddress”

我可以看到列表阅读器将电子邮件地址列为字符串,我需要将其转换为 [SendGrid.Helpers.Mail.EmailAddress] 但我不知道如何执行此操作。

protected async void sendButton_Click(object sender, EventArgs e)
    {
            // Prepare the email message info model
            var apiKey = System.Web.Configuration.WebConfigurationManager.AppSettings["SendGrid_API_Key"];
            var client = new SendGridClient(apiKey);
            var com = new SqlConnection("Myconn");
            com.Open();
            string qry = "SELECT EmailAddress FROM MyTable";
            var con = new SqlCommand(qry, com);

            //var recipients = new List<EmailAddress>{
            //new EmailAddress("Recipient1@test.co.uk", "User 1"),
            //new EmailAddress("Recipient2@test.co.uk", "User 2") };

            List<EmailAddress> columnData = new List<EmailAddress>();
            using (SqlCommand command = new SqlCommand(qry, com))
            {
                using (SqlDataReader bb = command.ExecuteReader())
                {
                    while (bb.Read())
                    {
                        columnData.Add(bb.GetString(0));
                    }
                }
            }
            var msg = new SendGridMessage();

            msg.SetFrom(new EmailAddress("Sender@azure.com", "Me"));


            var recipients3 = columnData;
            msg.AddTos(recipients3);

            msg.SetSubject("Without ttttt");

            msg.AddContent(MimeType.Text, "Dear Sir or Madam,!");
            msg.AddContent(MimeType.Html, "<p>Dear Sir or Madam,!</p>");

            var response = await client.SendEmailAsync(msg);
        }
    }

【问题讨论】:

  • 看起来语法是 :myMessage.From = new EmailAddress("you@youremail.com", "First Last");
  • columnData.Add(new EmailAddress(bb.GetString(0)));

标签: c# sendgrid


【解决方案1】:

正如 cmets 中所指出的,您正在尝试将字符串添加到电子邮件地址列表中:

  while (bb.Read())
  {
      columnData.Add(bb.GetString(0)); //error is here.
  }

您需要创建一个新对象 EmailAddress - 使用您的检索字符串作为 EmailAddress 构造函数的参数:

while (bb.Read())
{
    columnData.Add(new EmailAddress(bb.GetString(0)));
}

编辑:

如果您在 myTable 中有另一个字段,请将您的查询更改为:

string qry = "SELECT EmailAddress, Car FROM MyTable"; 

创建一个列表来保存汽车值:

我假设 Car 列是一个字符串

var columnDataCar = new List<string>();

检索值:

while (bb.Read())
{
 columnData.Add(new EmailAddress(bb.GetString(0)));
 columnDataCar.Add(bb.GetString(1);
}

现在 columnDataCar 保存 Car 字段的数据。

foreach(var item in columnDataCar)
{
 msg.AddContent(MimeType.Text, item);
}

希望对你有帮助。

【讨论】:

  • 太棒了。非常感谢各位大佬。太棒了。完全按照我的意愿工作。
  • 如果我的数据表中有一个附加字段,例如车。有没有办法可以从列表中拉出该列并包含在电子邮件文本中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2021-10-09
  • 2016-12-02
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多