Невозможно использовать SendGrid для запуска электронной почты для изменений в хранилище больших двоичных объектов. - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в функциях MS и пытаюсь создать функцию C # для запуска электронной почты при добавлении нового файла в хранилище BLOB-объектов Azure.

Пример кода ниже:

#r "SendGrid"
using Microsoft.Extensions.Logging;
using System;
using System.Text.RegularExpressions;
using SendGrid.Helpers.Mail;


public static void Run(string myBlob, string filename, ILogger log, out Mail message)
{
    var email = Regex.Match(myBlob, @"^email\:\ (.+)$", RegexOptions.Multiline).Groups[1].Value;
    log.LogInformation($"Got order from {email}\n License File Name: {filename} ");

    message = new Mail();
    var personalization = new Personalization();
    personalization.AddTo(new Email(email));
    message.AddPersonalization(personalization);

    Attachment attach = new Attachment();
    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(myBlob);
    attach.Content = System.Convert.ToBase64String(plainTextBytes);
    attach.Type = "text/plain";
    attach.Filename = "license.lic";
    attach.Disposition = "attachment";
    attach.ContentId = "License File";
    message.AddAttachment(attach);

    var msgContent = new Content("text/html", "Your license file attached");
    message.AddContent(msgContent);
    message.Subject = "Thanks for your order";
    message.From = new Email("test3@test.com");  

}

Я запускаю версию функции ~ 2 (проверил переменные настроек приложения).

У меня вопрос, почему я получаюошибка для параметра Mail (out Mail message)?

SendGrid установлен правильно в последний раз, когда я проверял.

Ниже приведен журнал, который показывает ошибку компиляции: (Я понятия не имею,почему он не может распознать параметр Mail в методе)

2018-11-26T05: 46: 57.013 [Ошибка] run.csx (8,73): ошибка CS0246: тип или пространство именне удалось найти имя 'Mail' (отсутствует директива using или ссылка на сборку?)

1 Ответ

0 голосов
/ 26 ноября 2018

Mail - это класс, используемый в функциях v1, который работает с SDK v8 SendGrid.В то время как для функций v2 SDK - это v9, и мы используем SendGridMessage, Mail больше не доступен, поэтому возникает ошибка.

Если вы уверены, что расширения Storage и SendGrid установлены, попробуйте кодниже.

#r "SendGrid"

using System.Text.RegularExpressions;
using SendGrid.Helpers.Mail;

public static void Run(string myBlob, string filename, ILogger log, out SendGridMessage message)
{  
    var email = Regex.Match(myBlob, @"^email\:\ (.+)$", RegexOptions.Multiline).Groups[1].Value;
    log.LogInformation($"Got order from {email}\n License File Name: {filename} ");

    message = new SendGridMessage();
    message.AddTo(new EmailAddress(email));
    var base64Content = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(myBlob));

    message.AddAttachment(
        "license.lic",
        base64Content,
        "text/plain",
        "attachment",
        "License File"
    );

    message.AddContent("text/html", "Your license file attached");
    message.Subject = "Thanks for your order";
    message.From = new EmailAddress("test3@test.com");
}

function.json

{
  "bindings": [
    {
      "name": "myBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "yourContainerName/{filename}",
      "connection": "AzureWebJobsStorage"
    },
    {
      "type": "sendGrid",
      "name": "message",
      "apiKey": "YOURSENDAPIKEYAPPSETTING",
      "direction": "out"
    }
  ]
}
...