Trabajando con opciones de votación y reacciones en MSG

Crear opciones de votación con MapiMessage

Microsoft Outlook ofrece una función para crear una encuesta al redactar un nuevo correo electrónico, permitiendo a los usuarios incluir opciones de votación como Sí, No, Tal vez, etc. Aspose.Email permite una funcionalidad similar al crear un nuevo mensaje de Outlook programáticamente. El FollowUpOptions class proporciona el VotingButtons propiedad que puede usarse para establecer u obtener las opciones de votación. MapiMessage se refiere a una clase dentro del espacio de nombres Aspose.Email que representa un mensaje de correo electrónico en el formato Messaging Application Programming Interface (MAPI) comúnmente usado por Microsoft Outlook. Al usar la clase MapiMessage, los desarrolladores pueden añadir botones de encuesta a un correo electrónico. Este artículo proporciona un ejemplo detallado de cómo crear un MapiMessage con opciones de votación para crear una encuesta.

Crear encuestas

El siguiente fragmento de código muestra cómo crear una encuesta en un mensaje de Outlook usando Aspose.Email. El FollowUpManager la clase facilita la configuración de las opciones de votación.

// Create a MapiMessage with the sender, recipient, subject, and body
var msg = new MapiMessage(
    "from@test.com",
    "to@test.com",
    "Flagged message",
    "Make it nice and short, but descriptive. The description may appear in search engines' search results pages..."
);

// Create FollowUpOptions and set the voting buttons
var options = new FollowUpOptions
{
    VotingButtons = "Yes;No;Maybe;Exactly!"
};

// Apply the follow-up options to the message
FollowUpManager.SetOptions(msg, options);
  • FollowUpOptions: Proporciona propiedades para configurar acciones de seguimiento como botones de votación.
  • VotingButtons: Una propiedad de cadena donde diferentes opciones de votación están separadas por punto y coma.
  • FollowUpManager.SetOptions: Aplica las opciones de seguimiento especificadas al mensaje.

Leer opciones de votación

Para recuperar opciones de votación de un MapiMessage, puedes usar el GetOptions método. Este método no solo recupera los botones de votación, sino que también puede proporcionar parámetros adicionales como categorías si es necesario.

// Retrieve follow-up options from the message
var options = FollowUpManager.GetOptions(msg);

// Voting buttons are returned as a string with a semicolon separator
string votingButtons = options.VotingButtons;

// Display the voting buttons
Console.WriteLine($"Voting Options: {votingButtons}");
  • GetOptions: Recupera el FollowUpOptions objeto del mensaje, que incluye los botones de votación y potencialmente otras propiedades.
  • VotingButtons: Las opciones se extraen como una cadena separada por punto y coma, lo que permite una fácil visualización o manipulación.

Leer botones de votación

Si necesitas acceder solo a los botones de votación como una lista de cadenas individuales, puedes usar el GetVotingButtons método, que los devuelve como una colección.

// Read only voting buttons as a collection of string values
var votingButtons = FollowUpManager.GetVotingButtons(msg);

// Display each voting button
foreach (var button in votingButtons)
{
    Console.WriteLine($"Voting Button: {button}");
}
  • GetVotingButtons: Devuelve una colección de cadenas de botones de votación, facilitando iterar sobre ellas y realizar operaciones como mostrarlas o modificarlas.

Agregar botones de votación

Puedes agregar botones de votación adicionales a un mensaje existente usando el AddVotingButton método. Esto puede ser útil para actualizar dinámicamente las opciones de votación.

// Add a new voting button to the existing message
FollowUpManager.AddVotingButton(msg, "Indeed!");
  • AddVotingButton: Agrega una nueva opción de votación a los botones de votación existentes del mensaje, permitiendo la personalización dinámica de las encuestas.

Eliminar botones de votación

Puede que desees eliminar botones de votación específicos o limpiar todos los botones de un mensaje. El siguiente código demuestra ambas acciones usando RemoveVotingButton y ClearVotingButtons métodos.

// Delete a specific voting button
FollowUpManager.RemoveVotingButton(msg, "Exactly!");

// Or delete all voting buttons from the MapiMessage
FollowUpManager.ClearVotingButtons(msg);
  • RemoveVotingButton: Elimina un botón de votación específico por nombre.
  • ClearVotingButtons: Elimina todos los botones de votación, restableciendo efectivamente las opciones de votación.

Leer resultados de la votación

Aspose.Email también permite leer los resultados de la votación de los destinatarios de un mensaje. Puedes acceder a propiedades como la respuesta del destinatario y el tiempo de respuesta.

// Load a MapiMessage from a file
var msg = MapiMessage.Load("sample.msg");

// Iterate through each recipient and display their vote information
foreach (var recipient in msg.Recipients)
{
    Console.WriteLine($"Recipient: {recipient.DisplayName}");

    // Get the recipient's response using the appropriate MapiPropertyTag
    var response = recipient.Properties[MapiPropertyTag.PR_RECIPIENT_AUTORESPONSE_PROP_RESPONSE].GetString();
    Console.WriteLine($"Response: {response}");

    // Get the response time
    var responseTime = recipient.Properties[MapiPropertyTag.PR_RECIPIENT_TRACKSTATUS_TIME].GetDateTime();
    Console.WriteLine($"Response time: {responseTime}\n");
}

Recuperar información de reacción de MSG

El GetReactions método del FollowUpManager La clase permite recuperar una lista de reacciones en un mensaje MAPI, facilitando el análisis del compromiso del usuario. El siguiente ejemplo de código muestra cómo obtener las reacciones disponibles para un mensaje especificado, proporcionando información sobre las interacciones de los usuarios:

// Load the message file
var msg = MapiMessage.Load(fileName);

// Retrieve the list of reactions on the message
var reactions = FollowUpManager.GetReactions(msg);

// Iterate through each reaction and output the details to the console
foreach (var reaction in reactions)
{
    Console.WriteLine($"User: {reaction.Name}, Email: {reaction.Email}, Reaction: {reaction.Type}, Date: {reaction.ReactionDateTime}");
}