Comment append une signature par défaut dans Outlook

J’écris un script VBA dans Access qui crée et remplit automatiquement quelques dizaines d’e-mails. Le codage s’est bien passé jusqu’à maintenant, mais je suis nouveau sur Outlook. Après avoir créé l’object mailitem, comment puis-je append la signature par défaut à l’email ?

  1. Ce serait la signature par défaut qui est automatiquement ajoutée lors de la création d’un nouvel email.

  2. Idéalement, je voudrais simplement utiliser ObjMail.GetDefaultSignature , mais je ne trouve rien de tel.

  3. Actuellement, j’utilise la fonction ci-dessous (trouvée ailleurs sur Internet) et en faisant référence au chemin d’access et au nom exact du fichier htm. Mais cela sera utilisé par plusieurs personnes et ils peuvent avoir un nom différent pour leur fichier de signature htm par défaut. Donc cela fonctionne, mais ce n’est pas idéal:

     Function GetBoiler(ByVal sFile As Ssortingng) As Ssortingng 'Dick Kusleika Dim fso As Object Dim ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) GetBoiler = ts.readall ts.Close End Function 

    (Appelé avec getboiler(SigSsortingng = "C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt") )

modifier

Grâce à JP (voir les commentaires), je me rends compte que la signature par défaut apparaît au début, mais elle disparaît lorsque j’utilise HTMLBody pour append une table au courrier électronique. Donc, je suppose que ma question est maintenant: Comment puis-je afficher la signature par défaut et toujours afficher un tableau html?

 Sub X() Dim OlApp As Outlook.Application Dim ObjMail As Outlook.MailItem Set OlApp = Outlook.Application Set ObjMail = OlApp.CreateItem(olMailItem) ObjMail.BodyFormat = olFormatHTML ObjMail.Subject = "Subject goes here" ObjMail.Recipients.Add "Email goes here" ObjMail.HTMLBody = ObjMail.Body & "HTML Table goes here" ObjMail.Display End Sub 

Le code ci-dessous créera un message Outlook et conservera la signature automatique

 Dim OApp As Object, OMail As Object, signature As Ssortingng Set OApp = CreateObject("Outlook.Application") Set OMail = OApp.CreateItem(0) With OMail .Display End With signature = OMail.body With OMail '.To = "someone@somedomain.com" '.Subject = "Type your email subject here" '.Attachments.Add .body = "Add body text here" & vbNewLine & signature '.Send End With Set OMail = Nothing Set OApp = Nothing 

Ma solution consiste à afficher d’abord un message vide (avec la signature par défaut!) Et à insérer le strHTMLBody voulu dans le HTMLBody existant.

Si, à l’instar de PowerUser, la signature est effacée lors de l’édition de HTMLBody, vous pouvez envisager de stocker le contenu d’ ObjMail.HTMLBody dans la variable strTemp immédiatement après ObjMail.Display et append strTemp par la suite, mais cela ne devrait pas être nécessaire.

 Sub X(strTo as ssortingng, strSubject as ssortingng, strHTMLBody as ssortingng) Dim OlApp As Outlook.Application Dim ObjMail As Outlook.MailItem Set OlApp = Outlook.Application Set ObjMail = OlApp.CreateItem(olMailItem) ObjMail.To = strTo ObjMail.Subject = strSubject ObjMail.Display 'You now have the default signature within ObjMail.HTMLBody. 'Add this after adding strHTMLBody ObjMail.HTMLBody = strHTMLBody & ObjMail.HTMLBody 'ObjMail.Send 'send immediately or 'ObjMail.close olSave 'save as draft 'Set OlApp = Nothing End sub 
 Dim OutApp As Object, OutMail As Object, LogFile As Ssortingng Dim cell As Range, S As Ssortingng, WMBody As Ssortingng, lFile As Long S = Environ("appdata") & "\Microsoft\Signatures\" If Dir(S, vbDirectory) <> vbNullString Then S = S & Dir$(S & "*.htm") Else S = "" S = CreateObject("Scripting.FileSystemObject").GetFile(S).OpenAsTextStream(1, -2).ReadAll WMBody = "
Hi All,

" & _ "Last line,

" & S 'Add the Signature to end of HTML Body

Je pensais juste que je partagerais comment j’y parviens. Pas trop sûr si c’est correct dans le sens des variables de définition, mais c’est petit et facile à lire, ce qui me plaît.

J’attache WMBody à .HTMLBody dans l’object Outlook.Application OLE.

J’espère que ça aide quelqu’un.

Merci Wes.

Outlook ajoute la signature aux nouveaux messages non modifiés (vous ne devez pas modifier le corps avant cela) lorsque vous appelez MailItem.Display (ce qui provoque l’affichage du message à l’écran) ou lorsque vous accédez à la propriété MailItem.GetInspector . ne pas avoir à faire quelque chose avec l’object Inspecteur retourné, mais Outlook remplira le corps du message avec la signature.

Une fois la signature ajoutée, lisez la propriété HTMLBody et fusionnez-la avec la chaîne HTML que vous tentez de définir. Notez que vous ne pouvez pas simplement concaténer 2 chaînes HTML – les chaînes doivent être fusionnées. Par exemple, si vous souhaitez insérer votre chaîne en haut du corps HTML, recherchez la sous-chaîne " , puis recherchez l'occurrence suivante de ">" (cela prend en compte l'élément avec des atsortingbuts), puis insérez votre chaîne HTML après ">".

Le modèle d'object Outlook n'expose aucune signature.

D'une manière générale, le nom de la signature est stocké dans les données de profil du compte accessibles via l'interface MAPI étendue IOlkAccountManager . Étant donné que cette interface est MAPI étendue, on ne peut y accéder qu'en utilisant C ++ ou Delphi. Vous pouvez voir l'interface et ses données dans OutlookSpy si vous cliquez sur le bouton IOlkAccountManager .
Une fois que vous avez le nom de la signature, vous pouvez lire le fichier HTML à partir du système de fichiers (gardez à l'esprit que le nom du dossier (Signatures en anglais) est localisé).
N'oubliez pas que si la signature contient des images, elles doivent également être ajoutées au message sous forme de pièces jointes et les balises dans le corps de la signature / message doivent être ajustées pour pointer l'atsortingbut plutôt qu'un sous-dossier du dossier Signatures. où les images sont stockées.
Il vous incombera également de fusionner les styles HTML du fichier HTML de signature avec les styles du message lui-même.

Si vous utilisez l'option Rédemption , vous pouvez utiliser son object RDOAccount (accessible dans toutes les langues, y compris VBA). Le nom de la nouvelle signature de message est stocké dans la propriété 0x0016001F , la signature de réponse est dans 0x0017001F . Vous pouvez également utiliser le compte RDOA . ReplySignature et NewSignature .
La rédemption expose également RDOSignature . Méthode ApplyTo qui prend un pointeur sur l'object RDOMail et insère la signature à l'emplacement spécifié en fusionnant correctement les images et les styles:

 set Session = CreateObject("Redemption.RDOSession") Session.MAPIOBJECT = Application.Session.MAPIOBJECT set Drafts = Session.GetDefaultFolder(olFolderDrafts) set Msg = Drafts.Items.Add Msg.To = "user@domain.demo" Msg.Subject = "testing signatures" Msg.HTMLBody = "some bold message text" set Account = Session.Accounts.GetOrder(2).Item(1) 'first mail account if Not (Account Is Nothing) Then set Signature = Account.NewMessageSignature if Not (Signature Is Nothing) Then Signature.ApplyTo Msg, false 'apply at the bottom End If End If Msg.Send 

EDIT : en juillet 2017, MailItem.GetInspector dans Outlook 2016 MailItem.GetInspector plus la signature. Seul MailItem.Display fait.