Fonctions utilitaires
Envoi d’un message avec option de vote
Microsoft Outlook permet aux utilisateurs de créer un sondage lors de la composition d’un nouveau message. Cela se fait en incluant des options de vote telles que Oui, Non, Peut‑être, etc. La classe FollowUpOptions fournie par Aspose.Email offre la propriété VotingButtons qui peut être utilisée pour définir ou obtenir la valeur des options de vote. Cet article fournit un exemple détaillé de création d’un MapiMessage avec des options de vote pour créer un sondage, puis d’envoi du message à l’aide du client Exchange Web Service (EWS).
Création et envoi d’un message avec options de vote
L’extrait de code suivant montre comment créer un nouveau message puis l’envoyer avec des options de vote.
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.setVotingButtons("Yes;No;Maybe;Exactly!");
client.send(message, options);
Exemples de méthodes utilisées
L’extrait de code suivant montre comment utiliser les méthodes employées dans l’exemple ci‑dessus.
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;
}
Création de messages RE et FW à partir de fichiers MSG
IEWSClient permet aux développeurs de créer des messages RE (Répondre/Répondre à tous) et FW (Transférer) à partir d’un message source. Le message source est identifié en sélectionnant un certain ExchangeMessageInfo de ExchangeMessageInfoCollection obtenu par IEWSClient.listMessages(). L’autre argument est le réel MailMessage à envoyer en tant que message RE ou FW. L’extrait de code suivant montre comment créer un compte d’exemple utilisé pour envoyer un message, puis les fonctionnalités de réponse et de transfert sont démontrées sur ce message d’exemple. Pour effectuer cette tâche :
- Initialisez l’objet IEWSClient en fournissant des informations d’identification valides.
- Envoyez quelques messages d’exemple.
- Appelez les fonctions IEWSClient.reply(), IEWSClient.replyAll() et IEWSClient.forward() pour envoyer des messages.
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
try {
MailMessage message = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
client.send(message);
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
if (messageInfoCol.size() == 1)
System.out.println("1 message in Inbox");
else
System.out.println("Error! No message in Inbox");
MailMessage message1 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
client.send(message1);
messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
if (messageInfoCol.size() == 2)
System.out.println("2 messages in Inbox");
else
System.out.println("Error! No new message in Inbox");
MailMessage message2 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
message2.getAttachments().addItem(Attachment.createAttachmentFromString("Test attachment 1", "Attachment Name 1"));
message2.getAttachments().addItem(Attachment.createAttachmentFromString("Test attachment 2", "Attachment Name 2"));
// Reply, Replay All and forward Message
client.reply(message2, messageInfoCol.get_Item(0));
client.replyAll(message2, messageInfoCol.get_Item(0));
client.forward(message2, messageInfoCol.get_Item(0));
} catch (java.lang.RuntimeException ex) {
System.out.println("Error in program" + ex.getMessage());
}
Support OAuth pour EWS avec Office 365
L’API Aspose.Email fournit le support du service Web Exchange (EWS) avec Office 365. Les EWSClient l’interface fournit une méthode surchargée qui fournit le OAuthNetworkCredential en tant qu’entrée pour accéder au compte Exchange via OAuth. L’utilisateur doit fournir l’Authority, l’ID client, l’URI de l’application cliente et les paramètres de Ressource pour que cela fonctionne. L’extrait de code suivant montre le support OAuth pour EWS avec Office 365.
// token provider
/*ITokenProvider provider = new ITokenProvider() {
@Override
public void dispose() {
}
@Override
public OAuthToken getAccessToken(boolean ignoreExistingToken) {
return null;
}
@Override
public OAuthToken getAccessToken() {
return null;
}
};
NetworkCredential credentials = new OAuthNetworkCredential(provider);*/
// accessToken
NetworkCredential credentials = new OAuthNetworkCredential("accessToken");
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", credentials);
client.listMessages();
Prise en charge de la journalisation dans les clients Exchange
L’API Aspose.Email offre la capacité de fournir une fonctionnalité de journalisation du client Exchange Web Service.
Journalisation pour le client EWS
client.setLogFileName("logs/ews");
// OR
EWSClient.setCommonLogFileName("logs/ews");
Ajout d’en-têtes aux requêtes EWS
L’API Aspose.Email permet d’ajouter des en-têtes aux requêtes Exchange. Cela peut être utilisé pour ajouter des en-têtes aux requêtes EWS pour différents besoins. Un exemple serait d’ajouter l’en-tête X-AnchorMailbox qui est utilisé pour gérer les problèmes de limitation sur le serveur Exchange. La méthode addHeader de IEWSClient est utilisée pour ajouter des en-têtes aux requêtes EWS comme le montre l’extrait de code suivant.
final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com/ews/Exchange.asmx", "username", "password", "");
try {
client.addHeader("X-AnchorMailbox", "username@domain.com");
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
} finally {
client.dispose();
}
Retourner l’ID de requête client dans l’en-tête
Le return-client-request-id L’en-tête est envoyé dans la requête et utilisé par le serveur pour déterminer si le client-request-id L’en-tête spécifié par le client doit être renvoyé dans la réponse du serveur. Les méthodes suivantes sont utilisées dans cette opération :
- getReturnClientRequestId()
- setReturnClientRequestId(boolean value) - Obtenir ou définir un indicateur pour indiquer si le client nécessite que le serveur renvoie l’ID de requête.
try (IEWSClient client = createEWSClient())
{
// Client will create random id and pass it to the server.
// The server should include this id in request-id header of all responses.
client.setReturnClientRequestId(true);
client.setLogFileName("ews.log");
client.getMailboxInfo();
}
Travailler avec la messagerie unifiée
Aspose.Email peut récupérer les informations de messagerie unifiée depuis Exchange Server 2010. La messagerie unifiée tel que l’obtention d’informations de configuration, l’initiation d’un appel sortant, la récupération d’informations d’appel téléphonique par ID d’appel et la déconnexion d’un appel par ID est actuellement prise en charge. L’exemple de code suivant montre comment récupérer les informations de configuration de messagerie unifiée depuis Microsoft Exchange Server 2010.
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.getUMConfiguration();
Obtention des astuces de messagerie
Microsoft Exchange Server a ajouté plusieurs nouvelles fonctionnalités avec Exchange Server 2010 et 2013. L’une d’elles permet aux utilisateurs d’obtenir des astuces de messagerie lors de la rédaction d’un courriel. Ces astuces sont très utiles car elles fournissent des informations avant l’envoi du courriel. Par exemple, si une adresse électronique est incorrecte dans la liste des destinataires, une astuce s’affiche pour indiquer que l’adresse est invalide. Les astuces de messagerie permettent également de voir les réponses d’absence avant d’envoyer un courriel : Exchange Server (2010 & 2013) envoie l’astuce pendant la rédaction si un ou plusieurs destinataires ont configuré des réponses d’absence. Le Service Pack 1 de Microsoft Exchange Server 2010 est requis pour toutes les fonctionnalités démontrées dans cet article. L’extrait de code suivant montre comment utiliser le EWSClient classe qui utilise les services Web Exchange, disponibles dans Microsoft Exchange Server 2007 et versions ultérieures.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
System.out.println("Connected to Exchange server...");
// Provide mail tips options
MailAddressCollection addrColl = new MailAddressCollection();
addrColl.addMailAddress(new MailAddress("test.exchange@ex2010.local", true));
addrColl.addMailAddress(new MailAddress("invalid.recipient@ex2010.local", true));
GetMailTipsOptions options = new GetMailTipsOptions(MailAddress.to_MailAddress("administrator@ex2010.local"), addrColl, MailTipsType.All);
// Get Mail Tips
MailTips[] tips = client.getMailTips(options);
// Display information about each Mail Tip
for (MailTips tip : tips) {
// Display Out of office message, if present
if (tip.getOutOfOffice() != null) {
System.out.println("Out of office: " + tip.getOutOfOffice().getReplyBody().getMessage());
}
// Display the invalid email address in recipient, if present
if (tip.getInvalidRecipient() == true) {
System.out.println("The recipient address is invalid: " + tip.getRecipientAddress());
}
}
Imitation Exchange
L’imitation Exchange permet à quelqu’un d’usurper l’identité d’un autre compte et d’effectuer des tâches et opérations en utilisant les permissions du compte usurpé plutôt que les leurs. Alors que la délégation permet aux utilisateurs d’agir au nom d’autres utilisateurs, l’imitation leur permet d’agir comme d’autres utilisateurs. Aspose.Email prend en charge l’imitation Exchange. Le EWSClient classe fournit les méthodes ImpersonateUser et ResetImpersonation pour faciliter cette fonctionnalité.
Pour effectuer cette tâche :
- Initialiser le ExchangeWebServiceClient pour l’utilisateur 1.
- Initialiser le ExchangeWebServiceClient pour l’utilisateur 2.
- Ajouter des messages de test aux comptes.
- Activer l’imitation.
- Réinitialiser l’imitation.
L’extrait de code suivant montre comment utiliser le EWSClient classe pour implémenter la fonctionnalité d’imitation.
// 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 {
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client1.listMessages(folder))
client1.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
String subj1 = "NETWORKNET_33354 User User1";
client1.appendMessage(folder, new MailMessage("User1@exchange.conholdate.local", "To@aspsoe.com", subj1, ""));
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client2.listMessages(folder))
client2.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
String subj2 = "NETWORKNET_33354 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 {
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client1.listMessages(folder))
client1.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client2.listMessages(folder))
client2.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
} catch (java.lang.RuntimeException e) {
}
}
}
Fonction Auto Discover avec EWS
L’API Aspose.Email vous permet de découvrir les paramètres du serveur Exchange en utilisant le client EWS.
AutodiscoverService svc = new AutodiscoverService();
svc.setCredentials(new NetworkCredential(email, password));
IGenericDictionary</* UserSettingName */Integer, Object> userSettings = svc.getUserSettings(email, UserSettingName.ExternalEwsUrl).getSettings();
String ewsUrl = (String) userSettings.get_Item(UserSettingName.ExternalEwsUrl);
System.out.println("Auto discovered EWS Url: " + ewsUrl);
Abandonner la restauration PST sur le serveur Exchange
L’API Aspose.Email vous permet de restaurer un fichier PST sur le serveur Exchange. Cependant, si l’opération prend du temps en raison de la grande taille du fichier PST, il peut être nécessaire de spécifier un critère d’annulation de l’opération. Cela peut être réalisé en utilisant l’API comme indiqué dans le code d’exemple suivant.
final IEWSClient client = EWSClient.getEWSClient("https://exchange.office365.com/ews/exchange.asmx", "username", "password");
try {
final long startTime = System.currentTimeMillis();
final AtomicInteger processedItems = new AtomicInteger(0);
final long S15 = 15 * 1000;
BeforeItemCallback callback = new BeforeItemCallback() {
public void invoke(ItemCallbackArgs item) {
if (System.currentTimeMillis() - startTime > S15) {
throw new AbortRestoreException();
}
processedItems.incrementAndGet();
}
};
try {
// create a test pst and add some test messages to it
PersonalStorage pst = PersonalStorage.create(new ByteArrayOutputStream(), FileFormatVersion.Unicode);
FolderInfo folder = pst.getRootFolder().addSubFolder("My test folder");
for (int i = 0; i < 20; i++) {
MapiMessage message = new MapiMessage("from@gmail.com", "to@gmail.com", "subj", "body");
folder.addMessage(message);
}
RestoreSettings rs = new RestoreSettings();
rs.setBeforeItemCallback(callback);
// now restore the PST with callback
client.restore(pst, rs);
System.out.println("Success!");
} catch (AbortRestoreException e) {
System.out.println("Timeout! " + processedItems.get());
}
} finally {
client.dispose();
}