2009-05-27 26 views
2

我想知道是否有可能通過.NET 2.0 MailMessage object發送一個即時創建的內聯MHTML文件。發送內聯MHTML

內聯我的意思是:它應該以用戶可以看到它的方式發送,一旦他打開電子郵件,而不必打開/下載附件。

回答

1

你想添加一些圖像到html電子郵件?

要完成此操作,您需要將圖像嵌入到電子郵件中。我發現一個tutorial在幾行代碼中完成它。您也可以購買aspnetemail組件。它一直幫助我發送帶有嵌入式圖像的電子郵件,如果發生任何問題,他們也會有一個出色的支持團隊。

請記住,嵌入圖像,使您的電子郵件較重,但更好:)

+0

你好,以及不完全是,我不是想嵌入圖像 我有一份報告(SSRS)報告genirated和保存爲一天中的特定時間在服務器上的MHTML文件我發送它作爲電子郵件附件,問題是我可以發送它,所以它被嵌入到電子郵件它自己 – Ali 2009-05-27 18:45:08

+0

你好,你可以讀取MHTML到緩衝區(如任何類型的文件),並將其添加到您的電子郵件的正文。您可能需要做一些額外的工作來替換MHTML中包含的CID。那是你想要達到的目標嗎? – jdecuyper 2009-05-27 23:45:57

3

(jdecuyper - 感謝塞,因爲我寫aspNetEmail)。

你可以用aspNetEmail做到這一點。您可以用MHT替換電子郵件的全部內容。

你不能用System.Net.Mail做到這一點,但如果你想走商業路線,請在[email protected]發郵件給我,我會告訴你如何做到這一點。

如果您想要使用開源路由,可能需要修改一些代碼項目上的SMTP代碼。基本上,你會注入你的內容到SMTP進程的DATA命令中。

需要注意的一件事:如果您的MHT文檔嵌入了腳本,flash,activeX對象或任何可能被郵件客戶端阻止的內容,它可能不會呈現與您在瀏覽器中看到的內容相同的內容。

+0

非常歡迎,這是一個很好的產品:) – jdecuyper 2009-05-28 14:21:48

3

這有點棘手,但是,你可以做到。事實上,MailMessage類只不過是系統的CDO.Message類之上的一個包裝器,它可以做到這一點。 您也可以使用AlternateView功能,它更簡單:

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

對不起,但不是你包括一個jpeg文件?!!我問的是MHTML文件 – Ali 2009-06-02 19:34:31

+0

這只是舉例說明如何生成MIME編碼的身體。如果你已經擁有這樣一個機構,它只是發送它的一種方式 - 你應該使用CDO.Message。 – Nisus 2009-06-05 18:51:49

0

它是通過CDO.Message可能(這是必要添加到項目引用COM庫「微軟CDO的Windows 2000庫」):

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

它通過CDO.Message是可能的(這是需要添加到項目引用COM庫「微軟CDO的Windows 2000庫」):

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 
    } 
}