2010-12-22 9 views
2

Wenn Sie sich das Snip-Tool in Windows ansehen, gibt es eine Option, den Snip als eingebetteten Anhang in den Standard-Mail-Client zu senden (ich denke, als HTML-Email). Ich brauche genau das.Wie erstellt man HTML-E-Mails mit eingebetteten Bildern und zeigt sie im Standard-Mail-Client mit .net (C#) an?

Im Moment verwende ich einfache MAPI, um das Bild anzuhängen, aber das Einbetten nicht erlaubt.

Eine wichtige Voraussetzung ist, dass sie erstellt und dann im Standard-Mail-Client angezeigt werden soll. Ich glaube nicht, dass ich System.Net.Mail dafür benutzen kann. Oder kann ich?

Es ist eine WPF-Anwendung mit C#.

EDIT: Bitte lesen Sie die Frage sorgfältig vor der Beantwortung. Ich bin nicht neu dafür. Ich weiß, wie man das in nicht verwaltetem Code macht, ohne auf Hacks zurückgreifen zu müssen. Ich brauche ein verwaltetes Äquivalent. Ich bin nicht auf der Suche nach Hacks und bin glücklich, erhebliche Zeit auf die richtige Lösung zu verbringen, wenn nötig.

+0

haben Sie meine aktualisierte Antwort versucht? – jgauffin

Antwort

3

Verwenden Process.Start mit der ShellExecute Option dazu:

mailto:[email protected]?subject=your+file&body=see attachment&attachment="C:\path\to\file.txt" 

Ich bin nicht sicher, die Anführungszeichen um den Pfad.

bearbeiten

einfach an eine andere Lösung gedacht, die funktionieren sollte.

  1. erstellen HTML-E-Mail MailMessage
  2. speichern es mit dem answer hier als XXXX.eml
  3. Verwenden ShellExecute Option mit Process.Start die offen die EML-Datei.

Es sollte es im Standard-E-Mail-Client öffnen.

+0

Wird das Bild eingebettet? Ich vermute nicht. – NVM

+0

In HTML-E-Mails eingebettete Bilder sind in der Tat Anhänge. – jgauffin

+0

Ja, aber Code-Snippet erstellen Sie eine HTML-E-Mail mit eingebettetem Bild? – NVM

4

Ich glaube nicht, dass Sie in mailto Bilder einbetten können Bitte beachten Sie die RFC 2368. Er sagt, dass mailto Zweck nur für kurze Textnachrichten und nicht für MIME Körper

The special hname "body" indicates that the associated hvalue is the 
    body of the message. The "body" hname should contain the content for 
    the first text/plain body part of the message. The mailto URL is 
    primarily intended for generation of short text messages that are 
    actually the content of automatic processing (such as "subscribe" 
    messages for mailing lists), not general MIME bodies. 
0

Ich glaube, Sie Klassen im Namensraum System.Net.Mail verwenden können, um diesen Job zu tun. Dies erfordert ziemlich viel Arbeit. Ich werde es als Übung des Lesers verlassen.

Gemäß RFC2111 speichert eine HTML-E-Mail mit eingebettetem Bild nur den HTML-E-Mail-Text und den Bildanhang in zwei verschiedenen MIME-Inhalten.

From: [email protected] 
To: [email protected] 
Subject: A simple example 
Mime-Version: 1.0 
Content-Type: multipart/related; boundary="boundary-example-1"; 
       type=Text/HTML 

--boundary-example 1 
Content-Type: Text/HTML; charset=US-ASCII 

... text of the HTML document, which might contain a hyperlink 
to the other body part, for example through a statement such as: 
<IMG SRC="cid:foo4*[email protected]" ALT="IETF logo"> 

--boundary-example-1 
Content-ID: foo4*[email protected] 
Content-Type: IMAGE/GIF 
Content-Transfer-Encoding: BASE64 

R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5 
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A 
etc... 

--boundary-example-1-- 

Der entscheidende Punkt ist, dass in Ihrem HTML-E-Mail-Körper, statt einen regulären URL-Pfad zu verwenden, setzen Sie in "cid: xxxxx", wo xxxxx Ihre Content-ID ist. Weitere Informationen zur Inhalts-ID finden Sie unter RFC2111. Ausgehend von dem, was ich im Namespace System.Net.Mail sehe, können Sie eine MailMessage erstellen, deren IsBodyHtml-Eigenschaft auf true gesetzt ist. Dann müssen Sie als nächstes Attachment zu dieser MailMessage hinzufügen.Der Anhang ist natürlich dein eingebettetes Bild. Dann müssen Sie daran denken, die ContentID des Anhangs festzulegen. Um sicherzustellen, dass Ihre HTML-E-Mail auf die richtige ContentID verweist, sollten die Dinge funktionieren.

Nochmals, ich habe es nicht selbst verifiziert, aber ich habe einige meiner E-Mails mit eingebetteten Bildern überprüft. Ich sah die E-Mail mit cid: xxxx als Bildquelle und mein Outlook-Client kann es wirklich gut öffnen.

+1

Sie können eine E-Mail auf diese Weise senden (Sie benötigen eine AlternateView), aber Sie können sie nicht im Standard-E-Mail-Client * anzeigen *, um vom Benutzer gesendet zu werden. –