Comment : copier un message électronique à l'aide d'une commande de menu personnalisée
Mise à jour : novembre 2007
S'applique à |
---|
Les informations de cette rubrique s'appliquent uniquement aux projets et versions Visual Studio Tools pour Office spécifiés de Microsoft Office. Type de projet
Version de Microsoft Office
Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet. |
Cet exemple crée la commande Copy to Picnic Folder dans le menu contextuel d'un élément de messagerie électronique si le courrier électronique dispose d'un élément Picnic dans le champ Subject. Lorsque l'utilisateur clique sur Copy to Picnic Folder, le code crée une copie du courrier électronique et la place dans le dossier Picnic.
Exemple
Dim WithEvents explorer As Outlook.Explorer = Nothing
Const FOLDER_NAME As String = "Picnic"
Dim selectedItems As New System.Collections.ArrayList()
Private Sub ThisAddIn_Startup(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Startup
explorer = Me.Application.Explorers.Application.ActiveExplorer
AddHandler explorer.SelectionChange, _
AddressOf explorer_SelectionChange
End Sub
Private Sub explorer_SelectionChange() _
Handles explorer.SelectionChange
selectedItems.Clear()
For Each selectedItems As Object In explorer.Selection
Dim mailItem As Outlook.MailItem = _
TryCast(selectedItems, Outlook.MailItem)
If (mailItem IsNot Nothing) Then
If mailItem.Subject.Contains(FOLDER_NAME) Then
Dim newAction As Outlook.Action = _
mailItem.Actions(String.Format _
("Copy to {0} Folder", FOLDER_NAME))
If (newAction Is Nothing) Then
newAction = mailItem.Actions.Add()
newAction.Name = String.Format _
("Copy to {0} Folder", FOLDER_NAME)
newAction.ShowOn = _
Outlook.OlActionShowOn.olMenu
newAction.Enabled = True
mailItem.Save()
End If
AddHandler mailItem.CustomAction, _
AddressOf mailItem_CustomAction
End If
End If
Next
End Sub
Private Sub mailItem_CustomAction(ByVal Action As Object, _
ByVal Response As Object, ByRef Cancel As Boolean)
Try
Dim mailAction As Outlook.Action = _
CType(Action, Outlook.Action)
' Get the current selection from the explorer and
' copy it to the FOLDER_NAME folder
Select Case mailAction.Name
Case String.Format("Copy to {0} Folder", FOLDER_NAME)
Dim mailItem As Outlook.MailItem = _
TryCast(explorer.Selection(1), _
Outlook.MailItem)
Dim mailItemCopy As Outlook.MailItem = _
TryCast(mailItem.Copy, Outlook.MailItem)
Dim inbox As Outlook.MAPIFolder = _
Me.Application.GetNamespace("MAPI"). _
GetDefaultFolder( _
Outlook.OlDefaultFolders.olFolderInbox)
Dim folder As Outlook.MAPIFolder = Nothing
' If the folder does not exist, create it.
Try
folder = inbox.Folders(FOLDER_NAME)
Catch ex As _
System.Runtime.InteropServices.COMException
' This exception is thrown
' when the folder is not found.
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
If (folder Is Nothing) Then
folder = inbox.Folders.Add(FOLDER_NAME, _
Outlook.OlDefaultFolders.olFolderInbox)
End If
mailItemCopy.Move(folder)
' Do not display the inspector object.
Cancel = True
End Select
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Outlook.Explorer explorer = null;
private const string FOLDER_NAME = "Picnic";
System.Collections.ArrayList selectedItems = new
System.Collections.ArrayList();
private void ThisAddIn_Startup(object sender,
System.EventArgs e)
{
explorer = this.Application.Explorers.Application.ActiveExplorer();
explorer.SelectionChange += new Outlook.
ExplorerEvents_10_SelectionChangeEventHandler
(explorer_SelectionChange);
}
void explorer_SelectionChange()
{
selectedItems.Clear();
foreach (object selectedItem in explorer.Selection)
{
Outlook.MailItem mailItem = selectedItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.Subject.Contains(FOLDER_NAME))
{
Outlook.Action newAction = mailItem.Actions[
string.Format("Copy to {0} Folder", FOLDER_NAME)];
if (newAction == null)
{
newAction = mailItem.Actions.Add();
newAction.Name = string.Format
("Copy to {0} Folder", FOLDER_NAME);
newAction.ShowOn =
Outlook.OlActionShowOn.olMenu;
newAction.Enabled = true;
mailItem.Save();
}
mailItem.CustomAction += new Outlook.
ItemEvents_10_CustomActionEventHandler
(mailItem_CustomAction);
selectedItems.Add(mailItem);
}
}
}
}
void mailItem_CustomAction(object Action, object Response,
ref bool Cancel)
{
try
{
Outlook.Action mailAction = (Outlook.Action)Action;
// Get the current selection from the explorer and
// copy it to the FOLDER_NAME folder
switch (mailAction.Name)
{
case "Copy to " + FOLDER_NAME + " Folder":
Outlook.MailItem mailItem =
explorer.Selection[1] as Outlook.MailItem;
Outlook.MailItem mailItemCopy =
mailItem.Copy() as Outlook.MailItem;
Outlook.MAPIFolder inbox =
this.Application.GetNamespace("MAPI").GetDefaultFolder
(Outlook.OlDefaultFolders.olFolderInbox);
Outlook.MAPIFolder folder = null;
// If the folder does not exist, Create it.
try
{
folder = inbox.Folders[FOLDER_NAME];
}
catch (System.Runtime.InteropServices.COMException)
{
// This exception is thrown when the folder is not found.
}
catch (Exception ex)
{
throw ex;
}
if (folder == null)
{
folder = inbox.Folders.Add(FOLDER_NAME,
Outlook.OlDefaultFolders.olFolderInbox);
}
mailItemCopy.Move(folder);
// Do not display the inspector object.
Cancel = true;
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Voir aussi
Concepts
Utilisation d'éléments de messagerie
Mise en route de la programmation de compléments d'application