如何在 Azure 函数中使用 SendGrid?
How do I use SendGrid in an Azure Function?
我试图了解我应该如何在 Azure 门户中开发的 Azure 函数中使用 SendGrid。正如 Google 所建议的那样,我从多个角度进行了研究,但似乎有许多过时的方法,我无法用 Azure 门户中可用的方法来解决。下面是我当前发送电子邮件的基本迭代,我直接从 SendGrid 博客 (https://sendgrid.com/blog/using-sendgrid-with-azure-functions-to-send-mobile-app-survey-data) 中提取它。我已经看到使用 project.json 文件来确保安装了 SendGrid 包的引用,但是我无法在我的函数中创建这样的文件,我只能操作run.csx 和 function.json 文件。下面是我的代码和我 运行 遇到的错误。我错过了什么?
#r "Newtonsoft.Json"
#r "SendGrid"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using SendGrid.Helpers.Mail;
public static void Run(HttpRequest req, ILogger log, out Message message)
{
log.LogInformation("C# HTTP trigger function processed a request.");
message = new Mail {
Subject = "Test Notification"
};
string requestBody = new StreamReader(req.Body).ReadToEnd();
Content content = new Content {
Type = "text/html",
Value = requestBody
};
message.AddContent(content);
}
错误:
[错误] run.csx(10,58):错误 CS0246:找不到类型或命名空间名称 'Message'(是否缺少 using 指令或程序集引用?)
[错误] run.csx(14,19):错误 CS0246:找不到类型或命名空间名称 'Mail'(是否缺少 using 指令或程序集引用?)
也许尝试使用 SendGridMessage message = new SendGridMessage()
???
我首先建议您尝试以下操作以确保您的 SendGrid 流程正常工作:
- 创建“发送网格”通知类型的新函数。您将能够看到有关如何以这种方式使用 SendGrid 的正确 C#。看到这张图片
然后您可以更新现有代码以使其正常工作。
我能够创建一个示例 HTTP 触发函数来发送 SendGrid 消息。我已附上 function.json 和 run.csx 供您参考。
function.json
{
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"apiKey": "sendgridkey",
"to": "receiver@test.com",
"from": "sender@test.com",
"direction": "out",
"type": "sendGrid"
}
]
}
此处的“sendgridkey”是一个以 SendGrid API 键作为其值的应用程序配置。我为电子邮件添加了虚拟值。
我的run.csx如下:
#r "SendGrid"
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using SendGrid.Helpers.Mail;
public static async Task<SendGridMessage> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
SendGridMessage message = new SendGridMessage()
{
Subject = $"Thanks for your order (#{name})!"
};
message.AddContent("text/plain", "Your order is being processed now!!");
return message;
}
我试图了解我应该如何在 Azure 门户中开发的 Azure 函数中使用 SendGrid。正如 Google 所建议的那样,我从多个角度进行了研究,但似乎有许多过时的方法,我无法用 Azure 门户中可用的方法来解决。下面是我当前发送电子邮件的基本迭代,我直接从 SendGrid 博客 (https://sendgrid.com/blog/using-sendgrid-with-azure-functions-to-send-mobile-app-survey-data) 中提取它。我已经看到使用 project.json 文件来确保安装了 SendGrid 包的引用,但是我无法在我的函数中创建这样的文件,我只能操作run.csx 和 function.json 文件。下面是我的代码和我 运行 遇到的错误。我错过了什么?
#r "Newtonsoft.Json"
#r "SendGrid"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using SendGrid.Helpers.Mail;
public static void Run(HttpRequest req, ILogger log, out Message message)
{
log.LogInformation("C# HTTP trigger function processed a request.");
message = new Mail {
Subject = "Test Notification"
};
string requestBody = new StreamReader(req.Body).ReadToEnd();
Content content = new Content {
Type = "text/html",
Value = requestBody
};
message.AddContent(content);
}
错误:
[错误] run.csx(10,58):错误 CS0246:找不到类型或命名空间名称 'Message'(是否缺少 using 指令或程序集引用?)
[错误] run.csx(14,19):错误 CS0246:找不到类型或命名空间名称 'Mail'(是否缺少 using 指令或程序集引用?)
也许尝试使用 SendGridMessage message = new SendGridMessage()
???
我首先建议您尝试以下操作以确保您的 SendGrid 流程正常工作:
- 创建“发送网格”通知类型的新函数。您将能够看到有关如何以这种方式使用 SendGrid 的正确 C#。看到这张图片
然后您可以更新现有代码以使其正常工作。 我能够创建一个示例 HTTP 触发函数来发送 SendGrid 消息。我已附上 function.json 和 run.csx 供您参考。
function.json
{
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"name": "$return",
"apiKey": "sendgridkey",
"to": "receiver@test.com",
"from": "sender@test.com",
"direction": "out",
"type": "sendGrid"
}
]
}
此处的“sendgridkey”是一个以 SendGrid API 键作为其值的应用程序配置。我为电子邮件添加了虚拟值。
我的run.csx如下:
#r "SendGrid"
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using SendGrid.Helpers.Mail;
public static async Task<SendGridMessage> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
SendGridMessage message = new SendGridMessage()
{
Subject = $"Thanks for your order (#{name})!"
};
message.AddContent("text/plain", "Your order is being processed now!!");
return message;
}