Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  《Windows Azure Platform 系列文章目录

 

  本文介绍如何使用Azure Logic App,通过Azure Graph发送邮件。

 

  首先我们需要准备:

  1.一个有效的Microsoft 365订阅

  2.一个有效的Azure订阅

 

  1.首先我们需要准备应用注册,具体创建过程可以参考:Azure AD (7) 应用程序和服务主体 (App and Service Principal)

  记录好应用ID, 应用秘钥和目录ID

  2.然后针对上面创建成功的应用注册,需要设置Microsoft Graph里的Mail Send权限,设置类型为Application Permission。如下图:

  

  3.创建1个新的Azure Logic App,我们这里设置为Consumption Plan (按消耗量计费),步骤略

 

  4.我们创建Logic App的设计思路如下所示:

  (1)用户在调用Logic App的时候,需要传入三个参数:邮件标题,邮件正文、邮件收件人

  (2)需要在Log App里保存三个值:应用ID, 应用秘钥和目录ID

  (3)首先通过应用ID, 应用秘钥和目录ID,访问Azure AD获得Access Token

  (4)通过Azure AD Access Token,调用Azure Graph API,推送邮件

 

  4.设置Log App Designer,如下图:

  

  

  5.When a HTTP request is received配置入下:

  主要传入三个参数:

  mailbody是邮件正文。

  mailreceiver是收件人

  mailsubject是邮件标题

  

 

  6.HTTP Get Bearer Token配置入下:

  

 

  7.Parse JSON的配置如下:

  

 

  8.发送邮件的逻辑如下:

  请注意修改下面的URI地址,在users后面的参数修改为具有发送邮件权限的Microsoft 365邮箱地址

  

 

 

  9.Azure Logic App的Code文件如下:

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "HTTP": {
                "inputs": {
                    "body": {
                        "message": {
                            "body": {
                                "content": "@variables('mailBody')",
                                "contentType": "Text"
                            },
                            "subject": "@variables('mailSubject')",
                            "toRecipients": [
                                {
                                    "emailAddress": {
                                        "address": "@variables('mailReceiver')"
                                    }
                                }
                            ]
                        },
                        "saveToSendItems": "false"
                    },
                    "headers": {
                        "Authorization": "@{concat('Bearer ', body('Parse_JSON')?['access_token'])}",
                        "Content-Type": "application/json"
                    },
                    "method": "POST",
                    "uri": "https://microsoftgraph.chinacloudapi.cn/v1.0/users/admin@leizha01.partner.onmschina.cn/sendMail"
                },
                "runAfter": {
                    "Parse_JSON": [
                        "Succeeded"
                    ]
                },
                "type": "Http"
            },
            "HTTP_Get_Bearer_Token": {
                "inputs": {
                    "body": "client_id=@{variables('clientId')}&scope=https://microsoftgraph.chinacloudapi.cn/.default&client_secret=@{variables('clientSecret')}&grant_type=client_credentials",
                    "headers": {
                        "Content-Type": "application/x-www-form-urlencoded"
                    },
                    "method": "POST",
                    "uri": "https://login.chinacloudapi.cn/@{variables('tenantId')}/oauth2/v2.0/token"
                },
                "runAfter": {
                    "Initialize_mail_Receiver": [
                        "Succeeded"
                    ]
                },
                "type": "Http"
            },
            "Initialize_clientId": {
                "inputs": {
                    "variables": [
                        {
                            "name": "clientId",
                            "type": "string",
                            "value": "这里是Client ID"
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Initialize_clientSecret": {
                "inputs": {
                    "variables": [
                        {
                            "name": "clientSecret",
                            "type": "string",
                            "value": "这里是Client秘钥"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_clientId": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_mail_Body": {
                "inputs": {
                    "variables": [
                        {
                            "name": "mailBody",
                            "type": "string",
                            "value": "@triggerBody()?['mailbody']"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_mail_Subject": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_mail_Receiver": {
                "inputs": {
                    "variables": [
                        {
                            "name": "mailReceiver",
                            "type": "string",
                            "value": "@triggerBody()?['mailreceiver']"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_mail_Body": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_mail_Subject": {
                "inputs": {
                    "variables": [
                        {
                            "name": "mailsubject",
                            "type": "string",
                            "value": "@{triggerBody()?['mailsubject']}"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_tentantId": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_tentantId": {
                "inputs": {
                    "variables": [
                        {
                            "name": "tenantId",
                            "type": "string",
                            "value": "这里是tenandId"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_clientSecret": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Parse_JSON": {
                "inputs": {
                    "content": "@body('HTTP_Get_Bearer_Token')",
                    "schema": {
                        "properties": {
                            "access_token": {
                                "type": "string"
                            },
                            "expires_in": {
                                "type": "integer"
                            },
                            "ext_expires_in": {
                                "type": "integer"
                            },
                            "token_type": {
                                "type": "string"
                            }
                        },
                        "type": "object"
                    }
                },
                "runAfter": {
                    "HTTP_Get_Bearer_Token": [
                        "Succeeded"
                    ]
                },
                "type": "ParseJson"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {
                        "mailbody": {
                            "type": "string"
                        },
                        "mailreceiver": {
                            "type": "string"
                        },
                        "mailsubject": {
                            "type": "string"
                        }
                    }
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

 

  10.配置成功后,我们通过POSTMAN进行调用:

  

  

  11.调用成功后,我们就可以收到Logic App发送的邮件

  

 

 

  12.如果我们需要通过Azure Automation调用Logic App发送邮件,可以使用下面的PowerShell脚本:

$Url = "这里输入Logic App的URL地址"


$body = @{
    mailbody='This is Mail Body 2022-09-26'
    mailsubject='This is Mail Subject 2022-09-26'
    mailreceiver='leizha@microsoft.com'
    }
    
Invoke-WebRequest -Method POST -Uri $url -Body ($body|ConvertTo-Json) -UseBasicParsing -ContentType 'application/json'

 

posted on 2022-09-26 15:54  Lei Zhang的博客  阅读(471)  评论(0编辑  收藏  举报