我知道这似乎很简单,但我无法在网上找到任何帮助。
当我使用Visual Studio发布文件时,我希望包含一个文件(.html)和我的azure函数。然后我希望能够在Azure功能中访问此文件。 为什么?我发布时似乎只有.dll被发送到服务器。
此文件将是一个.html文件,它将是一个电子邮件模板。我想在我的函数中阅读它,然后发送电子邮件。
非常感谢任何帮助。
我看到我可以使用[在Azure功能中发送网格] [1],但看起来我只能发送一封电子邮件而不是多封电子邮件,这就是我想要的。
答案 0 :(得分:24)
首先,您需要将html文件添加到项目中,并在属性中将Copy to Output Directory设置为“Copy if newer”。
然后在您的功能代码中,接收一个额外的ExecutionContext context
参数(请注意,这是Microsoft.Azure.WebJobs.ExecutionContext
和不 System.Threading.ExecutionContext
)。当你需要访问你的html文件时,你可以写:
string htmlFilePath = Path.Combine(context.FunctionAppDirectory, "test.html");
假设您在VS项目的 root 中添加了该文件。如果您将其添加到某个Data
文件夹中(更好的做法),您可以写:
string htmlFilePath = Path.Combine(context.FunctionAppDirectory, "Data", "test.html");
有关完整的工作样本,请参阅here。
答案 1 :(得分:0)
我看到我可以在Azure功能中使用发送网格,但看起来我只能发送一封电子邮件而不是多封电子邮件,这就是我想要的。
在使用SendGrid期间,我们还可以使用Azure功能发送多封电子邮件。我们可以使用ICollector作为输出。我们可以使用Microsoft.Azure.WebJobs.Extensions.SendGrid SDK来做到这一点。
以下是演示代码。
using System;
using SendGrid.Helpers.Mail;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
namespace FunctionApp1
{
public static class TestSendGrid
{
[FunctionName("TestSendGrid")]
public static void Run([TimerTrigger("0 0 */1 * * *")]TimerInfo myTimer, TraceWriter log, [SendGrid(ApiKey = "sendGridKey", From ="send email")]ICollector<Mail> mails)
{
log.Info($"C# function executed at: {DateTime.Now}");
for (int i = 0; i < number; i++) // you could use your own logic
{
Mail message = new Mail()
{
Subject = $"multiple mails from SendGrid with Azure function !"
};
var personalization = new Personalization();
personalization.AddTo(new Email("sunguiguan@hotmail.com"));
Content content = new Content
{
Type = "text/plain",
Value = $"Hello Azure SendGrid!{i}"
};
message.AddContent(content);
message.AddPersonalization(personalization);
mails.Add(message);
}
}
}
}
local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "xxxx",
"AzureWebJobsDashboard": "xxxx",
"sendgridapikey": "xxxxx"
}
}