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. Я не совсем уверен, что еще можно попробовать, и не могу найти никакой информации о том, что могло бы вызвать это.
Любая помощь очень ценится!
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