web-dev-qa-db-ja.com

Visual StudioでAzure関数を公開するときにファイルを含める

これは簡単なことのようですが、オンラインでヘルプを見つけることができません。

Visual Studioを使用してパブリッシュするときに、ファイル(.html)とAzure関数を含めたいです。次に、Azure関数でこのファイルにアクセスできるようにします。どうして?公開すると、.dllだけがサーバーに送信されるようです。

このファイルは、メールテンプレートになる.htmlファイルになります。自分の関数で読んでからメールを送りたいです。

どんな助けでも大歓迎です。

[Azure関数のグリッドの送信] [1]は使用できるようですが、送信できるのは1つのメールのみで、複数のメールは送信できないようです。これが目的です。

22
user1186050

まず、プロジェクトにhtmlファイルを追加し、プロパティで[出力ディレクトリにコピー]を[新しい場合はコピーする]に設定する必要があります。

次に、関数コードで、追加のExecutionContext contextパラメーターを受け取ります(これはMicrosoft.Azure.WebJobs.ExecutionContextであり、notでないことに注意してください)System.Threading.ExecutionContext)。そして、あなたがあなたのhtmlファイルにアクセスする必要があるとき、あなたはそれから書くことができます:

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

これは、VSプロジェクトのrootにファイルを追加したことを前提としています。代わりにDataフォルダーに追加した場合(ベタープラクティス)、次のように記述します。

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

完全に機能するサンプルについては こちら を参照してください。

28
David Ebbo

Azure関数で送信グリッドを使用できるようですが、送信できるのは1つのメールのみで、複数のメールは送信できないようです。これが目的です。

また、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("[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