我在Visual Studio中发布我的azure函数时包含一个文件

时间:2017-10-03 05:31:19

标签: c# visual-studio azure azure-functions

我知道这似乎很简单,但我无法在网上找到任何帮助。

当我使用Visual Studio发布文件时,我希望包含一个文件(.html)和我的azure函数。然后我希望能够在Azure功能中访问此文件。 为什么?我发布时似乎只有.dll被发送到服务器。

此文件将是一个.html文件,它将是一个电子邮件模板。我想在我的函数中阅读它,然后发送电子邮件。

非常感谢任何帮助。

我看到我可以使用[在Azure功能中发送网格] [1],但看起来我只能发送一封电子邮件而不是多封电子邮件,这就是我想要的。

2 个答案:

答案 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" 
  }
}