Электронные письма не проходят через Microsoft Graph

Я создаю процесс для отправки электронных писем из моего приложения. Я зарегистрировался в организации Office 365 в Azure, чтобы проверить это. При регистрации в приложении я предоставил следующие разрешения. Для этих разрешений предоставлено согласие администратора.

Настроенные разрешения

Затем я написал этот код, основанный на проекте github.

        using Microsoft.Graph;
    using Microsoft.Graph.Auth;
    using Microsoft.Identity.Client;
    using System;
    using System.Collections.Generic;
    using System.Web.UI;

namespace DemoOutlookMail
{
    public partial class _Default : Page
    {
        protected void send_Click(object sender, System.EventArgs e)
        {

            const string tenantId = "APP REGISTRATION TENANT ID";
            const string redirectUri = "https://localhost:44316/";
            const string clientSecret = "APP REGISTRATION SECRET";
            const string clientId = "APP REGISTRATION CLIENT ID";

            const string AuthorityFormat = "https://login.microsoftonline.com/{0}/v2.0";
            IConfidentialClientApplication daemonClient;
            daemonClient = ConfidentialClientApplicationBuilder.Create(clientId)
                .WithAuthority(string.Format(AuthorityFormat, tenantId))
                .WithRedirectUri(redirectUri)
                .WithClientSecret(clientSecret)
                .Build();

            ClientCredentialProvider authProvider = new ClientCredentialProvider(daemonClient,"Mail.Send");

            GraphServiceClient graphClient = new GraphServiceClient(authProvider);
            SendEmail(graphClient);
        }

        private void SendEmail(GraphServiceClient graphClient)
        {
            var message = new Message
            {
                Subject = "Meet for lunch?",
                Body = new ItemBody
                {
                    ContentType = BodyType.Text,
                    Content = "The new cafeteria is open."
                },
                ToRecipients = new List<Recipient>()
                        {
                        new Recipient
                        {
                            EmailAddress = new EmailAddress
                            {
                                Address = "[email protected]"
                            }
                        }
            },
                CcRecipients = new List<Recipient>()
                {
                    new Recipient
                    {
                        EmailAddress = new EmailAddress
                        {
                            Address = "[email protected]"
                        }
                    }
                }
            };

            var saveToSentItems = false;
            try
            {
                graphClient.Me.SendMail(message, saveToSentItems).Request().PostAsync();
            }
            catch(Exception e)
            {
                Label1.Text = e.Message;
            }
        }

    }
}

Этот код работает, но не отправляет электронные письма, не генерирует никаких исключений. Что мне не хватает? Исходный проект github: https://github.com/Azure-Samples/ms-identity-aspnet-daemon-webapp


person abhi    schedule 21.09.2020    source источник


Ответы (1)


Поскольку вы используете разрешение приложения, конечная точка / me поддерживается

Для вызова конечной точки / me требуется авторизованный пользователь и, следовательно, делегированное разрешение. Разрешения приложений не поддерживаются при использовании конечной точки / me. https://docs.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http.

Итак, в вашем коде вам нужно указать пользователя, которого вы собираетесь отправлять, так как это должно быть легко исправить, например

 graphClient.Users["[email protected]"].SendMail(message, saveToSentItems).Request().PostAsync();
person Glen Scales    schedule 22.09.2020
comment
Я пробовал этот подход, но пока не повезло. У меня есть домен, созданный в Azure для тестирования. Я попытался ввести адрес электронной почты пользователя, но все еще не вижу отправленных писем. - person abhi; 22.09.2020
comment
Предварительными требованиями для этого будет входящий пользователь должен иметь лицензированный почтовый ящик Exchange Online. (например, они должны иметь возможность войти в систему на outlook.office365.com и отправить электронную почту). Эти конечные точки Graph предоставляют вам доступ к серверной части Exchange Online, они не являются конечной точкой общего типа SMTP. - person Glen Scales; 22.09.2020