Joindre un fichier à un message électronique Outlook
Cette rubrique décrit comment joindre par programmation un ou plusieurs fichiers à un message électronique sortant dans Microsoft Outlook.
Fourni par : Ken Getz, MCW Technologies, LLC
Prise en charge du modèle objet pour les pièces jointes
Dans Outlook, la propriété Attachments de l’objet MailItem prend en charge l’attachement d’un ou de plusieurs fichiers à un e-mail. Pour joindre un ou plusieurs fichiers à un élément de messagerie avant de l'envoyer, appelez la méthode Add(Object, Object, Object, Object) de l'objet Attachments pour chacun des fichiers à joindre. La méthode Add vous permet de spécifier le nom de fichier (paramètreSource) et le type de pièce jointe (paramètre theType) à l’aide de l’énumération OlAttachmentType . Pour les fichiers du système de fichiers, spécifiez le paramètreType comme valeur énumérée Outlook.olAttachmentType.olByValue .
Note Depuis Microsoft Office Outlook 2007, vous utilisez toujours cette valeur pour joindre une copie d’un fichier dans le système de fichiers ; Outlook.olAttachmentType.olByReference n’est plus pris en charge.
En outre, lorsque vous envoyez un e-mail au format RTF (Rich Text Format), vous pouvez également spécifier deux autres paramètres facultatifs, Position etDisplayName, lorsque vous appelez la méthode Add . Le paramètrePosition vous permet de spécifier la position dans l’e-mail où la pièce jointe doit apparaître. Utilisez l’une des valeurs suivantes pour le paramètrePosition :
La valeur 0 masque la pièce jointe dans le corps du message électronique.
La valeur 1 place la pièce jointe avant le premier caractère.
Une valeur supérieure au nombre de caractères dans le corps du message place la pièce jointe à la fin du corps de texte.
Pour les messages électroniques RTF, vous pouvez également spécifier le paramètre DisplayName, qui fournit le nom affiché dans le corps du message pour la pièce jointe. Pour les messages électroniques HTML ou en texte brut, seul le nom du fichier s’affiche.
Envoi d’un message avec des fichiers en pièces jointes
L’exemple SendEmailWithAttachments
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.
Une liste générique de chaînes contenant la liste des adresses SMTP des destinataires du message.
Une chaîne contenant l'adresse SMTP de l'expéditeur.
Une liste générique de chaînes contenant les chemins d'accès aux fichiers à joindre.
Après avoir créé un élément de courrier électronique, le code ajoute chaque destinataire à la propriété de collection Recipients de l’élément de courrier. Une fois que le code a appelé la méthode ResolveAll(), il définit les propriétés Subject et Body de l'élément de messagerie avant l'itération de chaque élément contenu dans la liste fournie de chemins de pièce jointe, en les ajoutant à la propriété Attachments de l'élément de messagerie.
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 permet de comparer l'adresse SMTP de l'expéditeur et la propriété SmtpAddress de chaque compte de messagerie configuré 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 indique comment joindre des fichiers à un message électronique sortant dans Outlook par programmation. Pour illustrer cette fonctionnalité, dans Visual Studio, créez un complément Outlook managé nommé AttachFileAddIn
et remplacez le contenu du fichier ThisAddIn.vb ou ThisAddIn.cs par l’exemple de code présenté ici. Modifiez la ThisAddIn_Startup
procédure pour inclure une référence à un fichier dans votre système de fichiers 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.Collections.Generic;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace AttachFileAddIn
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
List<string> attachments = new List<string>();
attachments.Add("c:\\somefile.txt");
List<string> recipients = new List<string>();
recipients.Add("john@contoso.com");
recipients.Add("john@example.com");
SendEmailWithAttachments(Application, "Test", "Body", recipients, "john@example.com",
attachments);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
private void SendEmailWithAttachments(Outlook.Application application,
string subject, string body, List<string> recipients,
string smtpAddress, List<string> attachments)
{
// Create a new MailItem and set the To, Subject, and Body properties.
var 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())
{
newMail.Subject = subject;
newMail.Body = body;
foreach (string attachment in attachments)
{
newMail.Attachments.Add(attachment, Outlook.OlAttachmentType.olByValue);
}
}
// Retrieve the account that has the specific SMTP address.
Outlook.Account account = GetAccountForEmailAddress(application, smtpAddress);
// Use this account to send the email.
newMail.SendUsingAccount = account;
newMail.Send();
}
private 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 attachments As New List(Of String)
attachments.Add("c:\somefile.txt")
Dim recipients As New List(Of String)
recipients.Add("john@contoso.com")
recipients.Add("john@example.com")
SendEmailWithAttachments(Application, "Test", "Body", recipients, "john@contoso.com", attachments)
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub SendEmailWithAttachments(ByVal application As Outlook.Application, _
ByVal subject As String, ByVal body As String,
ByVal recipients As List(Of String),
ByVal smtpAddress As String,
ByVal attachments As List(Of String))
' Create a new MailItem and set the To, Subject, and Body properties.
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
newMail.Subject = subject
newMail.Body = body
For Each attachment As String In attachments
newMail.Attachments.Add(attachment, Outlook.OlAttachmentType.olByValue)
Next
End If
' Retrieve the account that has the specific SMTP address.
Dim account As Outlook.Account = GetAccountForEmailAddress(application, smtpAddress)
' Use this account to send the email.
newMail.SendUsingAccount = account
newMail.Send()
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 élément de contact Outlook à un message EmailLimiter 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.