2009-05-27 2 views
2

Ich frage mich, ob es möglich ist durch die .NET 2.0 MailMessage object, eine Inline-MHTML-Datei zu senden, die im laufenden Betrieb erstellt wird.Senden inline MHTML

Mit Inline meine ich: Es sollte so gesendet werden, dass der Benutzer es sehen kann, sobald er die E-Mail öffnet, ohne den Anhang öffnen/herunterladen zu müssen.

Antwort

1

Möchten Sie einige Bilder zu einer HTML-E-Mail hinzufügen?

Um dies zu erreichen, müssen Sie die Bilder in Ihre E-Mail einbetten. Ich habe eine tutorial gefunden, um es in ein paar Zeilen Code zu erreichen. Sie können auch die aspnetemail Baugruppe kaufen. Es hat mir immer sehr geholfen, E-Mails mit eingebetteten Bildern zu senden, sie haben auch ein exzellentes Support-Team, wenn etwas schief geht.

Beachten Sie, dass Bilder macht Ihre E-Mail schweren Einbetten, aber schöner :)

+0

hallo dort genau, auch nicht, ich versuche nicht Ein Bild einbetten Ich habe einen Bericht (SSRS) Bericht geniert und als MHTML-Datei zu einer bestimmten Tageszeit auf dem Server gespeichert Ich sende es als E-Mail-Anhang, die Frage ist, kann ich es senden, so dass es in der E-Mail eingebettet werden it self – Ali

+0

Hallo, gut, Sie könnten lesen Sie die MHTML in einen Puffer (wie jede Art von Datei) und fügen Sie es den Körper Ihrer E-Mail. Sie müssen vielleicht etwas mehr Arbeit machen, um die CID zu ersetzen, die in der MHTML enthalten ist. Versuchen Sie das zu erreichen? – jdecuyper

3

(jdecuyper - danke für den Stecker, wie ich schrieb aspNetEmail).

Sie können dies mit aspNetEmail tun. Sie können den gesamten Inhalt der E-Mail-Nachricht durch Ihren MHT ersetzen.

Sie können dies nicht mit System.Net.Mail tun, aber wenn Sie die kommerzielle Route gehen wollen, schicken Sie mir eine E-Mail an [email protected] und ich werde Ihnen zeigen, wie dies getan werden kann.

Wenn Sie eine Open-Source-Route gehen möchten, gibt es wahrscheinlich einige SMTP-Code auf Codeprojekt, die Sie ändern können, um dies zu tun. Im Grunde würden Sie Ihre Inhalte in den DATA-Befehl des SMTP-Prozesses injizieren.

Eine Sache zu beachten: Wenn Ihr MHT-Dokument eingebettete Scripts, Flash, ActiveX-Objekte oder alles hat, was möglicherweise vom E-Mail-Client blockiert wird, wird es wahrscheinlich nicht so aussehen wie das, was Sie im Browser sehen.

+0

Sie sind herzlich willkommen, es ist ein ausgezeichnetes Produkt :) – jdecuyper

3

Es ist ein bisschen schwierig, aber ja, Sie können es tun. Tatsächlich ist die MailMessage-Klasse nichts weiter als ein Wrapper über der CDO.Message-Klasse des Systems, der den Trick leisten kann. Sie können auch Alternate Funktionalität nutzen, ist es einfacher:

MailMessage mailMessage = new MailMessage("[email protected]" 
    ,"[email protected]" 
    ,"test" 
    ,""); 
string ContentId = "wecandoit.jpg"; 
mailMessage.Body = "<img src=\"cid:" + ContentId + "\"/>"; 
AlternateView av = AlternateView.CreateAlternateViewFromString(mailMessage.Body 
    ,null 
    ,MediaTypeNames.Text.Html); 
LinkedResource lr = new LinkedResource(@"d:\Personal\My Pictures\wecandoit.jpg"); 
lr.ContentId = ContentId; 
lr.ContentType.Name = ContentId; 
lr.ContentType.MediaType = "image/jpeg"; 
av.LinkedResources.Add(lr); 
mailMessage.AlternateViews.Add(av); 
SmtpClient cl = new SmtpClient(); 
cl.PickupDirectoryLocation = @"c:\test"; 
cl.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
cl.Send(mailMessage); 
+0

Entschuldigung, aber sind Sie nicht einschließlich einer JPEG-Datei? !! Ich fragte nach MHTML-Datei – Ali

+0

es ist nur ein Beispiel, wie Mime-kodierten Körper zu produzieren. Wenn Sie bereits einen solchen Körper haben, ist es nur die eine Art, ihn zu senden - Sie sollten CDO.Message verwenden. – Nisus

0

Es ist möglich, über CDO.Message (es ist notwendig add Referenzen COM-Bibliothek "Microsoft CDO für Windows 2000 Library" zu projizieren):

protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) 
{ 
    string smtpAddress = "smtp.email.com"; 

    try 
    { 
     CDO.Message oMessage = new CDO.Message(); 

     // set message 
     ADODB.Stream oStream = new ADODB.Stream(); 
     oStream.Charset = "ascii"; 
     oStream.Open(); 
     oStream.WriteText(MHTmessage); 
     oMessage.DataSource.OpenObject(oStream, "_Stream"); 

     // set configuration 
     ADODB.Fields oFields = oMessage.Configuration.Fields; 
     oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; 
     oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; 
     oFields.Update(); 

     // set other values 
     oMessage.MimeFormatted = true; 
     oMessage.Subject = subject; 
     oMessage.Sender = emailFrom; 
     oMessage.To = emailTo; 
     oMessage.Send(); 
    } 
    catch (Exception ex) 
    { 
     // something wrong 
    } 
} 
0

es ist möglich, über CDO.Message (es ist notwendig add Referenzen COM-Bibliothek "Microsoft CDO für Windows 2000 Library" zu projizieren):

protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) 
{ 
    string smtpAddress = "smtp.email.com"; 

    try 
    { 
     CDO.Message oMessage = new CDO.Message(); 

     // set message 
     ADODB.Stream oStream = new ADODB.Stream(); 
     oStream.Charset = "ascii"; 
     oStream.Open(); 
     oStream.WriteText(MHTmessage); 
     oMessage.DataSource.OpenObject(oStream, "_Stream"); 

     // set configuration 
     ADODB.Fields oFields = oMessage.Configuration.Fields; 
     oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; 
     oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; 
     oFields.Update(); 

     // set other values 
     oMessage.MimeFormatted = true; 
     oMessage.Subject = subject; 
     oMessage.Sender = emailFrom; 
     oMessage.To = emailTo; 
     oMessage.Send(); 
    } 
    catch (Exception ex) 
    { 
     // something wrong 
    } 
}