Office 365 клиент API SendMailAsync возвращает несанкционированные



Я пытаюсь настроить интеграцию Office 365 из моего веб-приложения ASP MVC на C#, для которого я использую Outlook Mail REST API (клиентская версия). Я использовал ссылку на API здесь: https://msdn.microsoft.com/office/office365/APi/mail-rest-operations



Я могу войти в Office 365 нормально, и получить маркер, а затем прочитать почтовые папки (т. е. отправленные элементы / входящие), но когда я пытаюсь отправить электронное письмо, я получаю следующую ошибку:





Несанкционированный



Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.



Сведения Об Исключении: Microsoft.Службы OData.Клиент.DataServiceClientException: Несанкционированный





Я добавил разрешения на чтение / запись и отправку электронной почты, поэтому при входе в Office 365 он говорит:



Office Integration Test App needs permission to:

Access your data anytime
Sign in as you
Send mail as you
Read and write access to your mail


Поэтому я предполагаю, что "отправить почту как вы" - это то, что мне нужно. Однако я все еще получаю Сообщение об ошибке самовольные.

Вот код, который я запускаю, чтобы отправить письмо:



    string AccessToken = (string)Session["Office365Token"];

OutlookServicesClient client = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
async () =>
{
return AccessToken;
});

ItemBody EmailBody = new ItemBody
{
Content = "Test email from the project",
ContentType = BodyType.HTML
};

List<Recipient> toRecipients = new List<Recipient>();

toRecipients.Add(new Recipient() { EmailAddress = new EmailAddress() { Address = "[email protected]" } });

Message newMessage = new Message
{
Subject = "Test Subject For Email",
Body = EmailBody,
ToRecipients = toRecipients
};

await client.Me.SendMailAsync(newMessage, true);


Ошибка возникает в последней строке, когда я вызываю SendMailAsync. Я не совсем уверен, что еще можно попробовать, и не могу найти никакой информации о том, что могло бы вызвать это.



Любая помощь очень ценится!

747   2  

2 ответов:

Я также пытался использовать метод SendMailAsyncOutlookServicesClient и получил несанкционированный ответ.

Fiddler показал, что маркер не включен в запрос, созданный SendMailAsync, однако я вижу, что маркер включен, когдаOutlookServicesClient генерирует запрос Get для чтения сообщений. Это было подтверждено для меня этим выпуском GitHub , который также заявил, что он работал в версии 1.0.22 библиотека, но не начиная с версии 1.0.34.

Осмотревшись еще немного, я обнаружил, что другие пробовалиальтернативный подход к отправке почты , сначала создавая черновик, а затем отправляя его. Вот как это выглядит:

OutlookServicesClient outlookClient = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
    async () =>
    {
        // already retrieved my AccessToken using AuthenticationContext
        return AccessToken;
    });

// Save to Drafts folder
await outlookClient.Me.Messages.AddMessageAsync(newMessage);

// Now send
await newMessage.SendAsync();

Мой вывод заключается в том, что метод SendMailAsync просто сломан. Сначала сохраняя новое сообщение в виде черновика, мы можем обойти его.

Проверьте значение вашего токена. Если вы скопируете строку и перейдете к http://jwt.calebb.net/, Вы можете вставить его и получить его анализ. Проверьте утверждение scp и убедитесь, что оно существует.

Comments

    Ничего не найдено.