Joindre un élément de contact Outlook à un message Email

Cette rubrique explique comment joindre par programmation une copie d’un élément Microsoft Outlook, tel qu’un contact, un élément de calendrier ou un autre message électronique, à un message électronique avant d’envoyer le message.

Fourni par : Ken Getz, MCW Technologies, LLC

Pour joindre un ou plusieurs fichiers ou éléments Outlook à un message électronique, vous pouvez utiliser la propriété Attachments de l’objet MailItem qui représente votre courrier sortant et appeler la méthode Add(Object, Object, Object, Object) de l’objet Attachments pour chacune des pièces jointes. La méthode Add vous permet de spécifier le nom du fichier et la façon dont vous souhaitez associer la pièce jointe. Pour joindre des éléments Outlook, tels que l’élément contact indiqué dans l’exemple de code de cette rubrique, spécifiez le paramètreType de la méthode Add comme valeur énumérée Outlook.olAttachmentType.olEmbeddedItem .

L’exemple SendMailItem de procédure dans l’exemple de code plus loin dans cette rubrique accepte les éléments suivants :

  • Référence à l’objet Application Outlook.

  • Des chaînes contenant l'objet et le corps du message.

  • Liste générique de chaînes qui contiennent les adresses SMTP des destinataires du message.

  • Une chaîne contenant l'adresse SMTP de l'expéditeur.

Après avoir créé un élément de courrier, le code effectue une boucle dans toutes les adresses des destinataires, en ajoutant chacune à la collection Recipients du message. Une fois que le code appelle la méthode ResolveAll() de l’objet Recipients , il définit les propriétés Subject et Body de l’élément de courrier. Ensuite, le code crée un objet ContactItem Outlook et ajoute ce nouvel élément de contact en tant que pièce jointe au message électronique, en spécifiant la valeur Outlook.olAttachmentType.olEmbeddedItem en tant que paramètre à l’appel de méthode Add . Avant l'envoi réel du courrier électronique, vous devez spécifier le compte à partir duquel l'envoyer. Pour trouver ces informations, vous pouvez utiliser l'adresse SMTP de l'expéditeur. La GetAccountForEmailAddress fonction accepte une chaîne qui contient l’adresse e-mail SMTP de l’expéditeur et retourne une référence pour l’objet Account correspondant. Cette méthode compare l’adresse SMTP de l’expéditeur à l’adresse SmtpAddress pour chaque compte de messagerie configuré défini pour le profil de la session. application.Session.Accounts renvoie une collection Accounts pour le profil actuel, permettant de suivre des informations pour tous les comptes, y compris les comptes Exchange, IMAP et POP3, chacun pouvant être associé à une banque de remise différente. L'objet Account qui possède une valeur de propriété SmtpAddress associée correspondant à l'adresse SMTP est le compte à utiliser pour envoyer le message électronique. Après avoir identifié le compte approprié, le code se termine en définissant la propriété SendUsingAccount de l’élément de courrier sur cet objet Account, puis en appelant la méthode Send(). Les exemples de code managé suivants sont écrits dans C# et Visual Basic. Pour exécuter un exemple de code managé .NET Framework qui doit appeler un modèle COM (Component Object Model), vous devez utiliser un assembly d’interopérabilité qui définit et mappe des interfaces managées avec des objets COM dans la bibliothèque de types de modèle objet. Pour Outlook, vous pouvez utiliser Visual Studio et l’assembly d’interopérabilité de base (PIA) d’Outlook. Avant d’exécuter des exemples de code managé pour Outlook 2013, assurez-vous que vous avez installé le PIA d’Outlook 2013 et que vous avez ajouté une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 dans Visual Studio. Vous devez utiliser les exemples de code suivants dans la ThisAddIn classe d’un complément Outlook (à l’aide des outils de développement Office pour Visual Studio). L'objet Application dans le code doit être un objet Application Outlook approuvé fourni par ThisAddIn.Globals. Pour plus d’informations sur l’utilisation de l’assembly PIA Outlook pour développer des solutions Outlook managées, consultez bienvenue dans la référence de l’assembly d’interopérabilité principal Outlook sur MSDN. Le code suivant montre comment joindre par programmation une copie d’un élément de contact à un message électronique. Pour illustrer cette fonctionnalité, dans Visual Studio, créez un complément Outlook managé nommé EmbedOutlookItemAddInet remplacez le contenu du fichier ThisAddIn.vb ou ThisAddIn.cs par l’exemple de code présenté ici. Modifiez la ThisAddIn_Startup procédure et mettez à jour les adresses e-mail de manière appropriée. L'adresse SMTP comprise dans l'appel à la procédure SendMailWithAttachments doit correspondre à l'adresse SMTP d'un des comptes de messagerie émetteurs que vous avez configurés précédemment dans Outlook.

using System;
using System.Collections.Generic;
using Outlook = Microsoft.Office.Interop.Outlook;
 
namespace EmbedOutlookItemAddIn
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            List<string> recipients = new List<string>();
            recipients.Add("john@contoso.com");
            recipients.Add("john@example.com");
 
            // Replace the SMTP address for sending.
            SendMailItem(Application, "Outlook started", "Outlook started at " + 
                DateTime.Now, recipients, "john@contoso.com");
        }
 
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
 
        public void SendMailItem(Outlook.Application application, 
            string subject, string body, 
            List<string> recipients, string smtpAddress)
        {
 
            Outlook.MailItem newMail = 
                application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
 
            // Set up all the recipients.
            foreach (var recipient in recipients)
            {
                newMail.Recipients.Add(recipient);
            }
            if (newMail.Recipients.ResolveAll())
            {
                // Set the details.
                newMail.Subject = subject;
                newMail.Body = body;
 
                Outlook.ContactItem contact = (Outlook.ContactItem)(application.CreateItem
                    Outlook.OlItemType.olContactItem));
 
                // Create a new contact. Use an existing contact instead, 
                // if you have one to work with.
                contact.FullName = "Kim Abercrombie";
                contact.LastName = "Kim";
                contact.FirstName = "Abercrombie";
                contact.HomeTelephoneNumber = "555-555-1212";
                contact.Save();
 
                newMail.Attachments.Add(contact, Outlook.OlAttachmentType.olEmbeddeditem);
                newMail.SendUsingAccount = GetAccountForEmailAddress(application, smtpAddress);
                newMail.Send();
             }
          }
 
        public Outlook.Account GetAccountForEmailAddress(Outlook.Application application, 
            string smtpAddress)
        {
            // Loop over the Accounts collection of the current Outlook session.
            Outlook.Accounts accounts = application.Session.Accounts;
            foreach (Outlook.Account account in accounts)
            {
                // When the email address matches, return the account.
                if (account.SmtpAddress == smtpAddress)
                {
                    return account;
                }
             }
             // If you get here, no matching account was found.
             throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!",
                 smtpAddress));
        }
    }
 
    #region VSTO generated code
 
    /// <summary>
    /// Required method for Designer support - don't modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    }
        
    #endregion
 
}
Public Class ThisAddIn
 
    Private Sub ThisAddIn_Startup() Handles Me.Startup
        Dim recipients As New List(Of String)
        recipients.Add("john@contoso.com")
        recipients.Add("john@example.com")
     
        ' Replace the SMTP address for sending.
        SendMailItem(Application, "Outlook started",
            "Outlook started at " & DateTime.Now, recipients,
            "john@contoso.com")
    End Sub
 
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
 
    End Sub
 
    Private Sub SendMailItem(ByVal application As Outlook.Application, _
        ByVal subject As String, ByVal body As String, ByVal recipients As List(Of String), _
        ByVal smtpAddress As String)
 
        Dim newMail As Outlook.MailItem = _
            DirectCast(application.CreateItem(Outlook.OlItemType.olMailItem), _
            Outlook.MailItem)
 
        ' Set up all the recipients.
        For Each recipient In recipients
            newMail.Recipients.Add(recipient)
        Next
        If newMail.Recipients.ResolveAll() Then
          ' Set the details.
          newMail.Subject = subject
          newMail.Body = body
 
          Dim contact As Outlook.ContactItem =_
             DirectCast(application.CreateItem(
             Outlook.OlItemType.olContactItem), Outlook.ContactItem)
 
          ' Create a new contact. Use an existing contact instead, 
          ' if you have one to work with.
          contact.FullName = "Kim Abercrombie"
          contact.LastName = "Kim"
          contact.FirstName = "Abercrombie"
          contact.HomeTelephoneNumber = "555-555-1212"
          contact.Save()
 
          newMail.Attachments.Add(contact, Outlook.OlAttachmentType.olEmbeddeditem)
          newMail.SendUsingAccount = GetAccountForEmailAddress(application, smtpAddress)
          newMail.Send()
        End If
    End Sub
 
    Private Function GetAccountForEmailAddress(ByVal application As Outlook.Application,_
        ByVal smtpAddress As String) As Outlook.Account
        ' Loop over the Accounts collection of the current Outlook session.
        Dim accounts As Outlook.Accounts = application.Session.Accounts
        For Each account In accounts
            ' When the email address matches, return the account.
            If account.SmtpAddress = smtpAddress Then
                Return account
            End If
        Next
        ' If you get here, no matching account was found.
        Throw New System.Exception(_
            String.Format("No Account with SmtpAddress: {0} exists!", smtpAddress))
    End Function
End Class

Voir aussi

Joindre un fichier à un élément de courrierLimiter la taille d’une pièce jointe à un message de Email OutlookModifier une pièce jointe d’un message Email Outlook

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.