web-dev-qa-db-fra.com

Inclusion d'un fichier lorsque je publie ma fonction Azure dans Visual Studio

Je sais que cela semble être une chose simple, mais je ne trouve aucune aide en ligne.

Je souhaite inclure un fichier (.html) avec ma fonction Azure lorsque je le publie à l'aide de Visual Studio. Ensuite, je veux pouvoir accéder à ce fichier dans ma fonction Azure. Pourquoi? Il semble que seul le fichier .dll soit envoyé au serveur lorsque je publie.

Ce fichier sera un fichier .html qui sera un modèle de courrier électronique. Je veux le lire dans ma fonction et ensuite envoyer des emails.

Toute aide est très appréciée.

Je vois que je peux utiliser [envoyer la grille dans les fonctions Azure] [1], mais il semble que je ne peux envoyer qu'un seul courrier électronique et non plusieurs courriels, ce que je veux.

8
user1186050

Tout d'abord, vous devez ajouter le fichier html à votre projet et, dans les propriétés, définir "Copier dans le répertoire de sortie" sur "Copier si plus récent".

Ensuite, dans votre code de fonction, prenez un paramètre ExecutionContext context supplémentaire (notez qu'il s'agit de Microsoft.Azure.WebJobs.ExecutionContext et not System.Threading.ExecutionContext). Et lorsque vous aurez besoin d'accéder à votre fichier html, vous pourrez alors écrire:

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

Cela suppose que vous avez ajouté le fichier à la racine de votre projet VS. Si vous l'aviez plutôt ajouté dans un dossier Data (meilleure pratique), vous écririez:

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

Voir ici pour un échantillon complet.

20
David Ebbo

Je vois que je peux utiliser la grille d'envoi dans les fonctions Azure, mais il semble que je ne peux envoyer qu'un seul courrier électronique et non plusieurs, comme je le souhaite.

Nous pourrions également envoyer plusieurs courriels avec la fonction Azure lors de l’utilisation de SendGrid. Nous pourrions utiliser ICollector comme sortie. Nous pourrions utiliser le SDK Microsoft.Azure.WebJobs.Extensions.SendGrid pour le faire.

Ce qui suit est un code de démonstration. 

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