Características de utilidad
Enviar un mensaje con opción de votación
Microsoft Outlook permite a los usuarios crear una encuesta al redactar un nuevo mensaje. Esto se hace incluyendo opciones de votación como Sí, No, Tal vez, etc. La clase FollowUpOptions ofrecida por Aspose.Email, proporciona la propiedad VotingButtons que se puede usar para establecer o obtener el valor de las opciones de votación. Este artículo proporciona un ejemplo detallado de cómo crear un MapiMessage con opciones de votación para crear una encuesta y luego enviar el mensaje utilizando el cliente de Exchange Web Service (EWS).
Crear y enviar un mensaje con opciones de votación
El siguiente fragmento de código muestra cómo crear un nuevo mensaje y luego enviarlo con opciones de votación.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string address = "firstname.lastname@aspose.com"; | |
IEWSClient client = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain"); | |
MailMessage message = CreateTestMessage(address); | |
// Set FollowUpOptions Buttons | |
FollowUpOptions options = new FollowUpOptions(); | |
options.VotingButtons = "Yes;No;Maybe;Exactly!"; | |
client.Send(message, options); |
Métodos de ejemplo utilizados en los ejemplos
El siguiente fragmento de código muestra cómo usar los métodos utilizados en el ejemplo anterior.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
private static MailMessage CreateTestMessage(string address) | |
{ | |
MailMessage eml = new MailMessage( | |
address, | |
address, | |
"Flagged message", | |
"Make it nice and short, but descriptive. The description may appear in search engines' search results pages..."); | |
return eml; | |
} |
Ignorar o evitar un certificado SSL inválido o caducado
Aspose.Email puede manejar certificados SSL en el servidor Exchange utilizando tanto las clases ExchangeClient como EWSClient. Si el certificado SSL ha caducado o se ha vuelto inválido, Aspose.Email lanza una excepción debido al certificado SSL inválido. Evite tales errores de certificados SSL ignorándolos utilizando el método que se usa en el código a continuación. Registre el controlador de devolución de llamada en su método main() o init() y agregue el método a continuación como miembro de la clase.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
public static void Run() | |
{ | |
// Register callback method for SSL validation event | |
ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidationHandler; | |
} | |
// This event handler is called when SSL certificate is verified | |
private static bool RemoteCertificateValidationHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) | |
{ | |
return true; //Ignore the checks and go ahead | |
} |
Crear mensajes RE y FW a partir de archivos MSG
IEWSClient permite a los desarrolladores crear mensajes RE (Respuesta/Responder a Todos) y FW (Reenviar) a partir de un mensaje fuente. El mensaje fuente se identifica seleccionando un ExchangeMessageInfo particular de ExchangeMessageInfoCollection obtenido mediante IEWSClient.ListMessages(). El otro argumento es el MailMessage que se enviará como mensaje RE o FW. El siguiente fragmento de código muestra cómo crear una cuenta de muestra que se utiliza para enviar un mensaje y luego se demuestran las características de respuesta y reenvío contra ese mensaje de muestra. Para realizar esta tarea:
- Inicializar el objeto IEWSClient proporcionando credenciales válidas.
- Enviar algunos mensajes de muestra.
- Llamar a las funciones IEWSClient.Reply(), IEWSClient.ReplyAll() y IEWSClient.Forward() para enviar mensajes.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string dataDir = RunExamples.GetDataDir_Exchange(); | |
const string mailboxUri = "https://exchange.domain.com/ews/Exchange.asmx"; | |
const string domain = @""; | |
const string username = @"username"; | |
const string password = @"password"; | |
NetworkCredential credential = new NetworkCredential(username, password, domain); | |
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential); | |
try | |
{ | |
MailMessage message = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + Guid.NewGuid().ToString(), | |
"TestMailRefw Implement ability to create RE and FW messages from source MSG file"); | |
client.Send(message); | |
ExchangeMessageInfoCollection messageInfoCol = client.ListMessages(client.MailboxInfo.InboxUri); | |
if (messageInfoCol.Count == 1) | |
Console.WriteLine("1 message in Inbox"); | |
else | |
Console.WriteLine("Error! No message in Inbox"); | |
MailMessage message1 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + Guid.NewGuid().ToString(), | |
"TestMailRefw Implement ability to create RE and FW messages from source MSG file"); | |
client.Send(message1); | |
messageInfoCol = client.ListMessages(client.MailboxInfo.InboxUri); | |
if (messageInfoCol.Count == 2) | |
Console.WriteLine("2 messages in Inbox"); | |
else | |
Console.WriteLine("Error! No new message in Inbox"); | |
MailMessage message2 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + Guid.NewGuid().ToString(), | |
"TestMailRefw Implement ability to create RE and FW messages from source MSG file"); | |
message2.Attachments.Add(Attachment.CreateAttachmentFromString("Test attachment 1", "Attachment Name 1")); | |
message2.Attachments.Add(Attachment.CreateAttachmentFromString("Test attachment 2", "Attachment Name 2")); | |
// Reply, Replay All and forward Message | |
client.Reply(message2, messageInfoCol[0]); | |
client.ReplyAll(message2, messageInfoCol[0]); | |
client.Forward(message2, messageInfoCol[0]); | |
} | |
catch (Exception ex) | |
{ | |
Console.WriteLine("Error in program"+ex.Message); | |
} |
Soporte para el seguimiento de correos electrónicos
La API de Aspose.Email proporciona soporte para el seguimiento de correos electrónicos utilizando la Notificación de Disposición de Mensajes (MDN). Esto se logra solicitando los recibos de lectura y creando la información requerida. La propiedad MailMessage.ReadReceiptTo obtiene o establece la dirección del recibo de lectura. Los métodos CreateReadReceipt y ReadReceiptRequested se utilizan para crear y recuperar la información sobre si se han solicitado recibos de lectura. El siguiente fragmento de código muestra cómo rastrear correos electrónicos utilizando la API de Aspose.Email.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Send message with the requested read receipt | |
MailMessage mailMessage = new MailMessage("fromAddress", "toAddress", "test MDN","This is a test message with read receipt requested"); | |
// request the read receipt | |
mailMessage.ReadReceiptTo = "fromAddress"; | |
SendMessage(mailMessage, SendMethod.SMTP); | |
// Add multiple ReadReceiptTo addresses. Send message with the requested read receipt. | |
mailMessage = new MailMessage("fromAddress", "toAddress", "test MDN","This is a test message with read receipt requested"); | |
var addressCollection = new Aspose.Email.Mail.MailAddressCollection(); | |
addressCollection.Add("fromAddress"); | |
addressCollection.Add(anotherAddress); | |
mailMessage.ReadReceiptTo = addressCollection; | |
SendMessage(mailMessage, SendMethod.SMTP); | |
// Send message by Exchange | |
mailMessage = new MailMessage("fromAddress", "toAddress", "test MDN","This is a test message with read receipt requested"); | |
mailMessage.ReadReceiptTo = "fromAddress"; | |
SendMessage(mailMessage, SendMethod.Exchange); | |
// Check the request, create and send read receipt. | |
MailMessage emlMDN = FetchMessage(); | |
if (emlMDN.ReadReceiptTo.Count > 0) | |
{ | |
SendMessage(emlMDN.CreateReadReceipt("toAddress", null), SendMethod.SMTP); | |
} | |
// Create the MapiMessage with requested read receipt | |
MapiMessage mapiMessage = new MapiMessage("fromAddress", "toAddress", "test MDN", "This is a read requested mapiMessage", OutlookMessageFormat.Unicode); | |
mapiMessage.ReadReceiptRequested = true; | |
// Create the MailMessage with requested read receipt and convert it to MapiMessage | |
mailMessage = new MailMessage("fromAddress", "toAddress", "test MDN","This is a test message with read receipt requested"); | |
mailMessage.ReadReceiptTo = "fromAddress"; | |
mapiMessage = MapiMessage.FromMailMessage(mailMessage, MapiConversionOptions.UnicodeFormat); | |
mapiMessage = new MapiMessage("dmitry.samodurov@aspose.com", "dmitry.samodurov@aspose.com", "test MDN", "This is a read requested mapiMessage", OutlookMessageFormat.Unicode); | |
mapiMessage.ReadReceiptRequested = true; | |
var getData = MailMessageInterpretorFactory.Instance.GetIntepretor(mapiMessage.MessageClass); | |
var getMessage = mi.Interpret(mapiMessage); |
Soporte para la creación de registros en clientes de Exchange
La API de Aspose.Email proporciona la capacidad de proporcionar una instalación de registro para el cliente de Exchange Web Service. Esto se puede lograr configurando el archivo App.config.
Registro para el cliente EWS
<?xml version="1.0" encoding="utf-8" ?> | |
<configuration> | |
<configSections> | |
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > | |
<section name="Aspose.Email.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> | |
</sectionGroup> | |
</configSections> | |
<applicationSettings> | |
<Aspose.Email.Properties.Settings> | |
<setting name="EWSDiagnosticLog" serializeAs="String"> | |
<value>..\..\..\Log\Aspose.Email.EWS.log</value> | |
</setting> | |
<setting name="EWSDiagnosticLog_UseDate" serializeAs="String"> | |
<value>True</value> | |
</setting> | |
</Aspose.Email.Properties.Settings> | |
</applicationSettings> | |
</configuration> |
Agregar encabezados en las solicitudes de EWS
La API de Aspose.Email permite agregar encabezados a las solicitudes de Exchange. Esto se puede usar para agregar encabezados a las solicitudes de EWS para diferentes encabezados que pueden usarse para diferentes propósitos. Un ejemplo podría ser agregar el encabezado X-AnchorMailbox que se utiliza para gestionar problemas de limitación en el servidor Exchange. El método AddHeader de la clase IEWSClient se utiliza para agregar encabezados a las solicitudes de EWS como se muestra en el siguiente fragmento de código.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
using (IEWSClient client = EWSClient.GetEWSClient("exchange.domain.com/ews/Exchange.asmx", "username", "password", "")) | |
{ | |
client.AddHeader("X-AnchorMailbox", "username@domain.com"); | |
ExchangeMessageInfoCollection messageInfoCol = client.ListMessages(client.MailboxInfo.InboxUri); | |
} |
Trabajando con mensajería unificada
Aspose.Email puede recuperar información de mensajería unificada desde el servidor Exchange 2010. Se admite la mensajería unificada, como obtener información de configuración, iniciar una llamada saliente, recuperar información de llamadas telefónicas por ID de llamada y desconectar una llamada telefónica por ID. El siguiente fragmento de código muestra cómo recuperar información de configuración de mensajería unificada del servidor Microsoft Exchange 2010.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential); | |
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration(); |
Obtener consejos de correo
Microsoft Exchange Server agregó varias nuevas características con Exchange Server 2010 y 2013. Una de ellas permite a los usuarios obtener consejos de correo al redactar un mensaje de correo electrónico. Estos consejos son muy útiles ya que proporcionan información antes de enviar el correo electrónico. Por ejemplo, si una dirección de correo electrónico es incorrecta en la lista de destinatarios, se muestra un consejo para hacerle saber que la dirección de correo electrónico es inválida. Los consejos de correo también le permiten ver respuestas automáticas antes de enviar un correo electrónico: el servidor Exchange (2010 y 2013) envía el consejo de correo cuando se está redactando el correo electrónico si uno o más de los destinatarios han configurado respuestas automáticas. Se requiere Microsoft Exchange Server 2010 Service Pack 1 para todas las funciones demostradas en este artículo. El siguiente fragmento de código muestra cómo usar la clase EWSClient que utiliza los Servicios Web de Exchange, disponibles en Microsoft Exchange Server 2007 y versiones posteriores.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Create instance of EWSClient class by giving credentials | |
IEWSClient client = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain"); | |
Console.WriteLine("Connected to Exchange server..."); | |
// Provide mail tips options | |
MailAddressCollection addrColl = new MailAddressCollection(); | |
addrColl.Add(new MailAddress("test.exchange@ex2010.local", true)); | |
addrColl.Add(new MailAddress("invalid.recipient@ex2010.local", true)); | |
GetMailTipsOptions options = new GetMailTipsOptions("administrator@ex2010.local", addrColl, MailTipsType.All); | |
// Get Mail Tips | |
MailTips[] tips = client.GetMailTips(options); | |
// Display information about each Mail Tip | |
foreach (MailTips tip in tips) | |
{ | |
// Display Out of office message, if present | |
if (tip.OutOfOffice != null) | |
{ | |
Console.WriteLine("Out of office: " + tip.OutOfOffice.ReplyBody.Message); | |
} | |
// Display the invalid email address in recipient, if present | |
if (tip.InvalidRecipient == true) | |
{ | |
Console.WriteLine("The recipient address is invalid: " + tip.RecipientAddress); | |
} | |
} |
Impersonación en Exchange
La impersonación en Exchange permite que alguien imite a otra cuenta y realice tareas y operaciones utilizando los permisos de la cuenta impersonada en lugar de los suyos. Mientras que la delegación permite a los usuarios actuar en nombre de otros usuarios, la impersonación les permite actuar como otros usuarios. Aspose.Email admite la impersonación de Exchange. La clase EWSClient proporciona los métodos ImpersonateUser y ResetImpersonation para facilitar esta función.
Para realizar esta tarea:
- Inicializar el ExchangeWebServiceClient para el usuario 1.
- Inicializar el ExchangeWebServiceClient para el usuario 2.
- Anexar mensajes de prueba a las cuentas.
- Habilitar la impersonación.
- Reiniciar la impersonación.
El siguiente fragmento de código muestra cómo usar la clase EWSClient para implementar la función de impersonación.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
// Create instance's of EWSClient class by giving credentials | |
IEWSClient client1 = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser1", "pwd", "domain"); | |
IEWSClient client2 = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser2", "pwd", "domain"); | |
{ | |
string folder = "Drafts"; | |
try | |
{ | |
foreach (ExchangeMessageInfo messageInfo in client1.ListMessages(folder)) | |
client1.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently); | |
string subj1 = string.Format("NETWORKNET_33354 {0} {1}", "User", "User1"); | |
client1.AppendMessage(folder, new MailMessage("User1@exchange.conholdate.local", "To@aspsoe.com", subj1, "")); | |
foreach (ExchangeMessageInfo messageInfo in client2.ListMessages(folder)) | |
client2.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently); | |
string subj2 = string.Format("NETWORKNET_33354 {0} {1}", "User", "User2"); | |
client2.AppendMessage(folder, new MailMessage("User2@exchange.conholdate.local", "To@aspose.com", subj2, "")); | |
ExchangeMessageInfoCollection messInfoColl = client1.ListMessages(folder); | |
//Assert.AreEqual(1, messInfoColl.Count); | |
//Assert.AreEqual(subj1, messInfoColl[0].Subject); | |
client1.ImpersonateUser(ItemChoice.PrimarySmtpAddress, "User2@exchange.conholdate.local"); | |
ExchangeMessageInfoCollection messInfoColl1 = client1.ListMessages(folder); | |
//Assert.AreEqual(1, messInfoColl1.Count); | |
//Assert.AreEqual(subj2, messInfoColl1[0].Subject); | |
client1.ResetImpersonation(); | |
ExchangeMessageInfoCollection messInfoColl2 = client1.ListMessages(folder); | |
//Assert.AreEqual(1, messInfoColl2.Count); | |
//Assert.AreEqual(subj1, messInfoColl2[0].Subject); | |
} | |
finally | |
{ | |
try | |
{ | |
foreach (ExchangeMessageInfo messageInfo in client1.ListMessages(folder)) | |
client1.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently); | |
foreach (ExchangeMessageInfo messageInfo in client2.ListMessages(folder)) | |
client2.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently); | |
} | |
catch { } | |
} | |
} |
Función de descubrimiento automático usando EWS
La API de Aspose.Email le permite descubrir la configuración del servidor Exchange utilizando el cliente EWS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
string email = "asposeemail.test3@aspose.com"; | |
string password = "Aspose@2017"; | |
AutodiscoverService svc = new AutodiscoverService(); | |
svc.Credentials = new NetworkCredential(email, password); | |
IDictionary<UserSettingName, object> userSettings = svc.GetUserSettings(email, UserSettingName.ExternalEwsUrl).Settings; | |
string ewsUrl = (string)userSettings[UserSettingName.ExternalEwsUrl]; | |
Console.WriteLine("Auto discovered EWS Url: " + ewsUrl); |
Abortar la operación de restauración de PST al servidor Exchange
La API de Aspose.Email le permite restaurar un archivo PST al servidor Exchange. Sin embargo, si la operación está tardando mucho debido al gran tamaño del archivo PST, puede ser necesario especificar un criterio para abortar la operación. Esto se puede lograr utilizando la API como se muestra en el siguiente código de ejemplo.
Nota: El ejemplo necesita que se agregue la siguiente clase también.
public class CustomAbortRestoreException : Exception { }
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
using (IEWSClient client = EWSClient.GetEWSClient("https://exchange.office365.com/ews/exchange.asmx", "username", "password")) | |
{ | |
DateTime startTime = DateTime.Now; | |
TimeSpan maxRestoreTime = TimeSpan.FromSeconds(15); | |
int processedItems = 0; | |
BeforeItemCallback callback = delegate | |
{ | |
if (DateTime.Now >= startTime.Add(maxRestoreTime)) | |
{ | |
throw new CustomAbortRestoreException(); | |
} | |
processedItems++; | |
}; | |
try | |
{ | |
//create a test pst and add some test messages to it | |
var pst = PersonalStorage.Create(new MemoryStream(), FileFormatVersion.Unicode); | |
var folder = pst.RootFolder.AddSubFolder("My test folder"); | |
for (int i = 0; i < 20; i++) | |
{ | |
var message = new MapiMessage("from@gmail.com", "to@gmail.com", "subj", new string('a', 10000)); | |
folder.AddMessage(message); | |
} | |
//now restore the PST with callback | |
client.Restore(pst, new Aspose.Email.Clients.Exchange.WebService.RestoreSettings | |
{ | |
BeforeItemCallback = callback | |
}); | |
Console.WriteLine("Success!"); | |
} | |
catch (CustomAbortRestoreException) | |
{ | |
Console.WriteLine($"Timeout! {processedItems}"); | |
} |