2009-02-02 6 views
2

Je tente d'envoyer des e-mails au format HTML en utilisant C# 3 par Outlook.MailItemHTML Outlook Courrier - changer les éléments liés à intégré

Outlook.MailItem objMail = (Outlook.MailItem)olkApp.CreateItem(Outlook.OlItemType.olMailItem); 
objMail.To = to; 
objMail.Subject = subject; 
objMail.HTMLBody = htmlBody; 

L'e-mail est généré en externe en enregistrant à partir d'un contrôle RTF (TX Text Control), qui génère du code HTML avec des liens vers des images stockées dans un sous-répertoire <<FileName>> _files. Exemple:

<img border="0" src="file:///C:/Documents%20and%20Settings/ItsMe/Local%20Settings/Temp/2/zbt4dmvs_Images/zbt4dmvs_1.png" width="94" height="94" alt="[image]">

L'envoi du courrier électronique de cette façon génère un mail avec des liens cassés. En utilisant Outlook 2007 comme client de messagerie avec Word comme éditeur d'e-mail, le passage à RTF (onglet Options, groupe d'onglets Format) préserve la présentation et inline les images.

faire via ce Programmatically:

var oldFormat = objMail.BodyFormat; 
objMail.BodyFormat = Outlook.OlBodyFormat.olFormatRichText; 
objMail.BodyFormat = oldFormat; 

perd la mise en forme et Mangles les images (l'image devient un marqueur de lien [image] sur l'écran qui est cliquable, mais ne montre l'image). Ce n'est pas une surprise étant donné que la documentation pour MailItem.BodyFormat Property indique "Tout le formatage du texte sera perdu lorsque la propriété BodyFormat passera du RTF au HTML et inversement".

ne marche semble malheureusement qu'il y ait un moyen facile de changer le Type de chaque Attachment dans le MailItem.Attachements-OlAttachmentType.olByValue, car il est une propriété en lecture seule qui est définie lors de la création du Attachment.

Une approche qui vient à l'esprit est de marcher le HTML, en remplaçant les balises <img> avec des marqueurs et marcher le texte programatically MailItem, l'insertion d'un Outlook.Attachment de TypeOlAttachmentType.olByValue.

Une autre option est de convertir les liens <img> utiliser src="cid:uniqueIdN" et ajoutez les images en pièces jointes avec les identités mentionnées. Donc, à la question ... Y at-il un moyen de convertir les images liées en images incorporées, idéalement sans avoir à utiliser des outils tiers comme Redemption? Convertir en RTF arrive à produire le résultat, mais le faire de cette façon n'est en aucun cas un pré-requis, et peut évidemment perdre la fidélité - Je veux juste que ça fonctionne: D Aucune de mes idées existantes ne me semble propre.

Répondre

0

DOH !, en fait envoi l'e-mail dans Outlook 2007 oblige les images à s'incruster. La taille de l'élément envoyé de 8 Ko est beaucoup plus petite que la taille de brouillon de 60 Ko (RTF) que je voyais par rapport à la taille du brouillon de 1 Ko (HTML qui n'avait pas été converti au format RTF).

Donc c'était ce que je veux dire tout le temps. Grr.

Je laisserai le Q et le A ici au cas où cela aiderait quelqu'un d'un état d'esprit aussi confus.

BTW quelques liens utiles que j'ai trouvé sur mon voyage:

Sending emails example

General Q&A site with other examples of varying quality

1

Étant donné que vous utilisez .net> 2.0, vous pouvez rechercher dans l'espace de noms System.Net.Mail pour la création de messages électroniques. J'ai trouvé que c'est assez personnalisable et était très facile à utiliser pour une tâche similaire à la vôtre. Les seuls problèmes que j'avais étaient de m'assurer que j'utilisais le bon encoding, et j'ai dû utiliser des tables HTML pour les mises en page (css ne fonctionnerait pas correctement). Voici quelques liens pour vous montrer comment cela fonctionne ...

Si ce n'est pas une option, alors je vous recommande d'aller la route d'identification de contenu et intégrer les images en pièces jointes. Votre autre option est d'héberger les images publiquement sur un site Web, et de changer les liens de l'image dans le code HTML pour les images publiques. Une chose que vous devez savoir est que les emails HTML peuvent facilement ressembler à du spam et peuvent être traités comme tels par les serveurs de messagerie et les clients. Même ceux qui sont juste pour une utilisation (son arrivé à moi) en interne peut se retrouver dans le dossier Courrier indésirable d'Outlook ..

+0

Merci pour la réponse, et désolé pour le fait que ma récente réponse penaud fait tout, mais annule la nécessité de mon poser la question. –

+0

Très bon point de garder un œil sur le dossier de courrier indésirable lors du développement (ou le dossier Messages envoyés dans mon cas aurait été une bonne idée: D) Re le point SNM utilisant, si je partais de frais, je voudrais certainement prendre cette route bien, mais le code est comme le code est !. Merci beaucoup. –

Questions connexes