2016-06-29 5 views
1

Я пытаюсь отправить электронное письмо с помощью API REST Outlook/Office 365, и я пытаюсь отправить его как адрес, который у меня есть как «Подключен Счет". Попытка отправить сообщение возвращает ошибку ``. Тем не менее, API будет, позвольте мне создать черновик с этим адресом.Используйте API REST Outlook/Office365 для отправки почты с подключенного адреса электронной почты

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

Есть ли способ авторизации API для отправки сообщения в качестве адреса для подключенной учетной записи?

ответ

1

Нет, API не поддерживает это сегодня. Он касается объема разрешений, на которые вы соглашаетесь. «Разрешить приложению отправлять почту по мере того, как вы» распространяется на вашу учетную запись, но не с другой учетной записи, даже если вам был предоставлен доступ.

+0

Это что-то в дорожной карте, или это то, что вряд ли будет поддерживаться? –

+1

Это что-то считается, но это не определенно. –

+0

Если вам нужна история, чтобы оправдать эту функцию, вот наш прецедент. Наше приложение отправляет письма. Люди могут зарегистрироваться у нас, используя другую учетную запись, чем та, которую они намереваются использовать для отправки электронных писем (например, зарегистрируйтесь в личной учетной записи, но хотите отправлять электронные письма из своего приложения с помощью своей корпоративной учетной записи). Это ограничивает нас тем, что позволяет людям, которые хотят отправлять с помощью Outlook/O365, зарегистрироваться с адресом, который они хотят отправить. GMail * позволяет * пересылать с подключенных учетных записей, пока учетная запись, которую мы хотим отправить, была настроена правильно. Еще раз спасибо за ваше время! –

0

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

  • Создайте приложение Azure AD.
  • Настройте приложение Azure AD, чтобы разрешить токен для приложения только , следующий за Build service and daemon apps in Office 365. Вам также нужен сертификат для запроса токена приложения.
  • Перейти к вашему Azure AD Application-> Configuration, нажмите «Добавить приложение», чтобы добавить «Office 365 Exchange Online». Выберите «Отправить письмо как любой пользователь» в раскрывающемся списке «Разрешение приложения». Это позволяет вашим приложениям Azure AD иметь разрешение на отправку электронной почты от имени .
  • После настройки приложения Azure AD вы можете отправить следующий код для отправки электронной почты от имени конкретного пользователя.

    string tenantId = "yourtenant.onmicrosoft.com"; 
    string clientId = "your client id"; 
    string resourceId = "https://outlook.office.com/"; 
    string resourceUrl = "https://outlook.office.com/api/v2.0/users/[email protected]/sendmail"; //this is your on behalf user's UPN 
    string authority = String.Format("https://login.windows.net/{1}", AUTHORITYURL, tenantId); 
    string certificatPath = @"c:\test.pfx"; //this is your certficate location. 
    string certificatePassword = "xxxx"; // this is your certificate password 
    var itemPayload = new 
    { 
        Message = new 
        { 
         Subject = "Test email", 
         Body = new { ContentType = "Text", Content = "this is test email." }, 
         ToRecipients = new[] { new { EmailAddress = new { Address = "[email protected]" } } } 
        } 
    }; 
    
    //if you need to load from certficate store, use different constructors. 
    X509Certificate2 certificate = new X509Certificate2(certficatePath, certificatePassword, X509KeyStorageFlags.MachineKeySet); 
    AuthenticationContext authenticationContext = new AuthenticationContext(authority, false); 
    
    ClientAssertionCertificate cac = new ClientAssertionCertificate(clientId, certificate); 
    
    //get the access token to Outlook using the ClientAssertionCertificate 
    var authenticationResult = await authenticationContext.AcquireTokenAsync(resourceId, cac); 
    string token = authenticationResult.AccessToken; 
    
    //initialize HttpClient for REST call 
    HttpClient client = new HttpClient(); 
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); 
    client.DefaultRequestHeaders.Add("Accept", "application/json"); 
    
    //setup the client post 
    HttpContent content = new StringContent(JsonConvert.SerializeObject(itemPayload)); 
    //Specify the content type. 
    content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose"); 
    HttpResponseMessage result = await client.PostAsync(url, content); 
    if(result.IsSuccessStatusCode) 
    { 
        //email send successfully. 
    }else 
    { 
        //email send failed. check the result for detail information from REST api. 
    } 
    

Для полного объяснения, пожалуйста, ссылку на мой блог Send email on behalf of a service account using Office Graph API

Я надеюсь, что это помогает, и дайте мне знать, если у вас есть вопросы.