وظائف Azure روابط SendGrid

تشرح هذه المقالة كيفية إرسال البريد الإلكتروني باستخدام روابط SendGrid في وظائف Azure. تدعم وظائف Azure ربط الإخراج لـ SendGrid.

هذه معلومات مرجعية لمطوري Azure Functions. إذا كنت مستخدما جديدا لوظائف Azure، فابدأ بالموارد التالية:

تثبيت الإضافة

تعتمد حزمة NuGet الإضافية التي تقوم بتثبيتها على وضع C # الذي تستخدمه في تطبيق الوظائف:

يتم تنفيذ الوظائف في نفس العملية مثل مضيف الوظائف. لمعرفة المزيد، راجع تطوير دالات مكتبة الفئة C# باستخدام وظائف Azure.

تختلف وظائف الإضافة وفقا لإصدار الملحق:

أضف الامتداد إلى مشروعك عن طريق تثبيت حزمة NuGet ، الإصدار 3.x.

تثبيت الحزمة

بدءا من الإصدار 2.x من الوظائف، يعد ملحق HTTP جزءا من حزمة امتداد، والتي يتم تحديدها في ملف مشروع host.json. لمعرفة المزيد، راجع حزمة الإضافات.

يجب أن يكون هذا الإصدار من الإضافة متاحا بالفعل لتطبيق الوظائف الخاص بك مع حزمة الإضافات، الإصدار 2.x.

مثال

يمكن إنشاء الدالة C # باستخدام أحد أوضاع C # التالية:

توضح الأمثلة التالية الدالة C#‎ التي تستخدم مشغل قائمة انتظار ناقل الخدمة وربط إخراج SendGrid.

المثال التالي هو تنفيذ متزامن:

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

...

[FunctionName("SendEmail")]
public static void Run(
    [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] Message email,
    [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] out SendGridMessage message)
{
var emailObject = JsonSerializer.Deserialize<OutgoingEmail>(Encoding.UTF8.GetString(email.Body));

message = new SendGridMessage();
message.AddTo(emailObject.To);
message.AddContent("text/html", emailObject.Body);
message.SetFrom(new EmailAddress(emailObject.From));
message.SetSubject(emailObject.Subject);
}

public class OutgoingEmail
{
    public string To { get; set; }
    public string From { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

يوضح هذا المثال التنفيذ غير المتزامن:

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

...

[FunctionName("SendEmail")]
public static async Task Run(
 [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] Message email,
 [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] IAsyncCollector<SendGridMessage> messageCollector)
{
 var emailObject = JsonSerializer.Deserialize<OutgoingEmail>(Encoding.UTF8.GetString(email.Body));

 var message = new SendGridMessage();
 message.AddTo(emailObject.To);
 message.AddContent("text/html", emailObject.Body);
 message.SetFrom(new EmailAddress(emailObject.From));
 message.SetSubject(emailObject.Subject);

 await messageCollector.AddAsync(message);
}

public class OutgoingEmail
{
 public string To { get; set; }
 public string From { get; set; }
 public string Subject { get; set; }
 public string Body { get; set; }
}

يمكنك حذف تعيين خاصية ApiKey السمة إذا كان لديك مفتاح واجهة برمجة التطبيقات في إعداد تطبيق يسمى "AzureWebJobsSendGridApiKey".

يوضح المثال التالي ارتباط إخراج SendGrid في ملف function.json و دالة JavaScript تستخدم الربط.

فيما يلي بيانات الربط في ملف function.json:

{
    "bindings": [
        {
            "name": "$return",
            "type": "sendGrid",
            "direction": "out",
            "apiKey" : "MySendGridKey",
            "to": "{ToEmail}",
            "from": "{FromEmail}",
            "subject": "SendGrid output bindings"
        }
    ]
}

يشرح قسم التكوين هذه الخصائص.

هنا رمز JavaScript:

module.exports = function (context, input) {
    var message = {
        "personalizations": [ { "to": [ { "email": "sample@sample.com" } ] } ],
        from: { email: "sender@contoso.com" },
        subject: "Azure news",
        content: [{
            type: 'text/plain',
            value: input
        }]
    };

    return message;
};

لا تتوفر أمثلة PowerShell الكاملة حاليا لارتباطات SendGrid.

يوضح المثال التالي وظيفة يتم تشغيلها بواسطة HTTP والتي ترسل بريدًا إلكترونيًا باستخدام ربط SendGrid. يمكنك توفير القيم الافتراضية في تكوين الربط. على سبيل المثال، تم تكوين عنوان البريد الإلكتروني من في function.json.

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "type": "httpTrigger",
      "authLevel": "function",
      "direction": "in",
      "name": "req",
      "methods": ["get", "post"]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "sendGrid",
      "name": "sendGridMessage",
      "direction": "out",
      "apiKey": "SendGrid_API_Key",
      "from": "sender@contoso.com"
    }
  ]
}

توضح الوظيفة التالية كيف يمكنك توفير قيم مخصصة للخصائص الاختيارية.

import logging
import json
import azure.functions as func

def main(req: func.HttpRequest, sendGridMessage: func.Out[str]) -> func.HttpResponse:

    value = "Sent from Azure Functions"

    message = {
        "personalizations": [ {
          "to": [{
            "email": "user@contoso.com"
            }]}],
        "subject": "Azure Functions email with SendGrid",
        "content": [{
            "type": "text/plain",
            "value": value }]}

    sendGridMessage.set(json.dumps(message))

    return func.HttpResponse(f"Sent")

يستخدم المثال التالي @SendGridOutput التعليق التوضيحي من مكتبة وقت تشغيل وظائف Java لإرسال بريد إلكتروني باستخدام ربط إخراج SendGrid.

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class HttpTriggerSendGrid {

    @FunctionName("HttpTriggerSendGrid")
    public HttpResponseMessage run(

        @HttpTrigger(
            name = "req",
            methods = { HttpMethod.GET, HttpMethod.POST },
            authLevel = AuthorizationLevel.FUNCTION)
                HttpRequestMessage<Optional<String>> request,

        @SendGridOutput(
            name = "message",
            dataType = "String",
            apiKey = "SendGrid_API_Key",
            to = "user@contoso.com",
            from = "sender@contoso.com",
            subject = "Azure Functions email with SendGrid",
            text = "Sent from Azure Functions")
                OutputBinding<String> message,

        final ExecutionContext context) {

        final String toAddress = "user@contoso.com";
        final String value = "Sent from Azure Functions";

        StringBuilder builder = new StringBuilder()
            .append("{")
            .append("\"personalizations\": [{ \"to\": [{ \"email\": \"%s\"}]}],")
            .append("\"content\": [{\"type\": \"text/plain\", \"value\": \"%s\"}]")
            .append("}");

        final String body = String.format(builder.toString(), toAddress, value);

        message.setValue(body);

        return request.createResponseBuilder(HttpStatus.OK).body("Sent").build();
    }
}

السمات

تستخدم كل من مكتبات C#‎ قيد المعالجة والعملية المعزولة سمات لتحديد ربط المخرجات. يستخدم البرنامج النصي C # بدلا من ذلك ملف تكوين function.json.

في تطبيقات الوظائف قيد المعالجة ، استخدم SendGridAttribute، الذي يدعم المعلمات التالية.

خاصية السمة / التعليق التوضيحي الوصف
ApiKey اسم إعداد التطبيق الذي يحتوي على مفتاح API الخاص بك. إذا لم يتم تعيينه، فسيكون اسم إعداد التطبيق الافتراضي هو AzureWebJobsSendGridApiKey.
لكي تتمكن من (اختياري) عنوان البريد الإلكتروني للمستلم.
من (اختياري) عنوان البريد الإلكتروني للمرسل.
Subject (اختياري) موضوع البريد الإلكتروني.
النص (اختياري) محتوى البريد الإلكتروني.

تعليقات توضيحية

يسمح لك التعليق التوضيحي SendGridOutput بتكوين ربط SendGrid بشكل معلن من خلال توفير قيم التكوين التالية.

تهيئة

يسرد الجدول التالي خصائص تكوين الربط المتوفرة في ملف function.json والسمة/التعليق التوضيحي SendGrid .

function.json الوصف
النوع يجب تعيينها إلى sendGrid.
⁩direction⁧ يجب تعيينها إلى out.
الاسم اسم المتغير المستخدم في كود الوظيفة للطلب أو جسم الطلب. هذه القيمة هي $return عندما يكون هناك قيمة إرجاع واحدة فقط.
apiKey اسم إعداد التطبيق الذي يحتوي على مفتاح API الخاص بك. إذا لم يتم تعيينه، فإن اسم إعداد التطبيق الافتراضي هو AzureWebJobsSendGridApiKey.
⁩إلى⁦ (اختياري) عنوان البريد الإلكتروني للمستلم.
⁩من⁦ (اختياري) عنوان البريد الإلكتروني للمرسل.
الموضوع (اختياري) موضوع البريد الإلكتروني.
نص (اختياري) محتوى البريد الإلكتروني.

قد تحتوي الخصائص الاختيارية على قيم افتراضية محددة في الربط وإما أن تتم إضافتها أو تجاوزها برمجيًا.

عند التطوير محليا، أضف إعدادات التطبيق في الملف local.settings.json في Values المجموعة.

إعدادات host.json

يصف هذا القسم إعدادات التكوين المتوفرة لهذا الربط في الإصدارات 2.x والإصدارات الأحدث. تنطبق الإعدادات في الملف host.json على جميع الوظائف في مثيل تطبيق دالة. يحتوي مثال ملف host.json أدناه على إعدادات الإصدار 2.x + فقط لهذا الربط. للحصول على مزيدٍ من المعلومات عن إعدادات تكوين التطبيق الوظيفي في الإصدارات 2.x والإصدارات الأحدث، راجع مرجع host.json لوظائف Azure.

ملاحظة

للحصول على مرجع لـ host.json في الوظائف 1.x، راجع ⁧⁩مرجع host.json لوظائف Azure 1.x⁧⁩.

{
    "version": "2.0",
    "extensions": {
        "sendGrid": {
            "from": "Azure Functions <samples@functions.com>"
        }
    }
}
الخاصية افتراضي الوصف
⁩من⁦ غير متوفر عنوان البريد الإلكتروني للمرسل عبر جميع الوظائف.

الخطوات التالية