it-swarm.com.ru

Включение файла при публикации моей функции Azure в Visual Studio

Я знаю, что это кажется простой вещью, но я не могу найти какую-либо помощь онлайн.

Я хочу включить файл (.html) вместе с моей функцией Azure, когда я публикую его с помощью Visual Studio. Затем я хочу получить доступ к этому файлу в моей функции Azure . Почему? Кажется, что только DLL-файл отправляется на сервер, когда я публикую.

Этот файл будет HTML-файлом, который будет шаблоном электронной почты. Я хочу прочитать это в моей функции, а затем отправлять электронные письма.

Буду признателен за любую оказанную помощь.

Я вижу, что могу использовать [отправить сетку в функциях Azure] [1], но похоже, что я могу отправлять только одно письмо, а не несколько писем, что я и хочу.

8
user1186050

Сначала вам нужно добавить html-файл в ваш проект, а в свойствах установить «Копировать в выходной каталог» на «Копировать, если новее».

Затем в коде вашей функции добавьте дополнительный параметр ExecutionContext context (обратите внимание, что это Microsoft.Azure.WebJobs.ExecutionContext и notSystem.Threading.ExecutionContext). И когда вам нужно получить доступ к html-файлу, вы можете написать:

string htmlFilePath = Path.Combine(context.FunctionAppDirectory, "test.html");

Это предполагает, что вы добавили файл в root вашего проекта VS. Если вместо этого вы добавили его в какую-то папку Data (лучше практиковать), вы должны написать:

string htmlFilePath = Path.Combine(context.FunctionAppDirectory, "Data", "test.html");

Смотрите здесь для полного рабочего образца.

20
David Ebbo

Я вижу, что я могу использовать сетку отправки в функциях Azure, но похоже, что я могу отправлять только одно электронное письмо, а не несколько электронных, что я и хочу.

Мы также можем отправлять несколько писем с помощью функции Azure во время использования SendGrid. Мы могли бы использовать 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("[email protected]"));

                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" 
  }
}
0
Tom Sun