c# - office - outlook api sendmail
Consumir la API REST de Office 365 sin interfaz de usuario (3)
Tengo entendido que esto es posible, pero la autenticación parece bastante complicada. Para empezar, cualquier aplicación que requiera la integración de Office 365 también debe integrarse con el Azure AD asociado. Puede registrar su aplicación para usuarios específicos para que tenga los permisos necesarios para cualquier operación que necesite realizar. Consulte aquí para obtener un buen resumen de este componente: https://msdn.microsoft.com/en-us/office/office365/howto/connect-your-app-to-o365-app-launcher?f=255&MSPPError=-2147217396 #sección 2
Para la autenticación, necesita un modelo de aplicación daemon / servidor. No he intentado esto todavía, pero está documentado aquí y parece que debería satisfacer sus necesidades (consulte la sección Aplicación de servidor o Daemon a la API web): https://azure.microsoft.com/en-us/documentation/articles / active-directory-authentication-scenarios / # daemon-o-server-application-to-web-api
Necesito insertar entradas de calendario en la cuenta de Outlook de un cliente. Esto es bastante directo con Exchange. Simplemente se autentica con un usuario que tiene acceso y luego puede ingresar las entradas a las cuentas de otros usuarios. Parece ser completamente diferente en Office 365.
Traté de seguir las instrucciones aquí: https://dev.outlook.com/restapi/getstarted
Creé la aplicación y obtuve el ID de cliente de la aplicación. Pero, toda la documentación está alrededor de OAuth. En términos generales, oAuth está diseñado para escenarios en los que un usuario necesita ingresar sus credenciales a través de una ventana del navegador que luego confirmará con el usuario qué credenciales están dispuestas a permitir que tenga la aplicación.
Esto no coincide con mi escenario. Necesito poder insertar las entradas del calendario en la cuenta sin ninguna IU. Esta es la integración de back-end. Solo necesita hacer su trabajo en silencio.
Miré esta aplicación de ejemplo: https://github.com/OfficeDev/O365-Win-Snippets
Pero, esta es una aplicación de front-end. Cuando necesita autenticarse, aparece una ventana para obligar al usuario a ingresar sus credenciales.
Cuando intento llamar a la API REST que se menciona en la página de inicio, devuelve HTML. Esta es la URL que menciona:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=&redirect_uri = http% 3A% 2F% 2Flocalhost% 2Fmyapp% 2F & response_type = código & scope = https% 3A% 2F% 2Foutlook.office.com% 2Fmail.read
He intentado algunas permutaciones de esta URL con mi ID de cliente. Intenté pasar mis credenciales de Office 365 a través de la autenticación HTTP básica.
Estoy atascado.
La respuesta es simple. Use la API de Exchange, no la API de Office 365.
Estaba confundido porque asumí que Office 365 era una entidad diferente a Exchange, pero el servidor de correo electrónico de Office 365 solo es un servidor gigante de Exchange. Aquí hay un código de muestra para una buena medida. Este es un ejemplo de iniciar sesión en el servidor Exchange de Office 365 y enviar una entrada de calendario a una dirección de correo electrónico. Sencillo.
Hice una conjetura sobre la URL de intercambio y fue correcta: https://outlook.office365.com/ews/exchange.asmx
//Connect to exchange
var ewsProxy = new ExchangeService(ExchangeVersion.Exchange2013);
ewsProxy.Url = new Uri("https://outlook.office365.com/ews/exchange.asmx");
//Create the meeting
var meeting = new Appointment(ewsProxy);
ewsProxy.Credentials = new NetworkCredential(_Username, _Password);
meeting.RequiredAttendees.Add(_Recipient);
// Set the properties on the meeting object to create the meeting.
meeting.Subject = "Meeting";
meeting.Body = "Please go to the meeting.";
meeting.Start = DateTime.Now.AddHours(1);
meeting.End = DateTime.Now.AddHours(2);
meeting.Location = "Location";
meeting.ReminderMinutesBeforeStart = 60;
// Save the meeting to the Calendar folder and send the meeting request.
meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy);
Para llamar a la API REST de Office 365, la aplicación requiere un token de acceso de Azure Active Directory, por eso es necesario (obligatorio) registrar la aplicación en Microsoft Azure Active Directory (Azure AD). Su cuenta de Office 365 a su vez debe estar asociada con Azure AD . Esta respuesta resume cómo registrar la aplicación en Azure AD para consumir la API de Office 365.
Esquema Basic
autenticación
Al renovar la autenticación Basic
, actualmente está habilitada para la API versión 1.0 , el siguiente ejemplo muestra cómo consumir la API REST del calendario de Outlook en la aplicación .NET.
Prerrequisitos:
domain: https://outlook.office365.com/
API version: v1.0
Aquí hay un ejemplo que obtiene mis calendarios e imprime sus nombres
private static async Task ReadCalendars()
{
var handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential()
{
UserName = ConfigurationManager.AppSettings["UserName"],
Password = ConfigurationManager.AppSettings["Password"]
};
using (var client = new HttpClient(handler))
{
var url = "https://outlook.office365.com/api/v1.0/me/calendars";
var result = await client.GetStringAsync(url);
var data = JObject.Parse(result);
foreach (var item in data["value"])
{
Console.WriteLine(item["Name"]);
}
}
}