2016-04-28 6 views
1

私はOutlookのメールにMSのチャートを取得しようとしています。デスクトップに保存するのを避けたいので、MemoryStreamを使用することに決めました。これは私がこれまでにまとめたものです:メモリストリームを使用してWinFormsアプリケーションからOutlook電子メールにMSチャートを挿入するにはどうすればよいですか?

MemoryStream s = new MemoryStream(); 
chart1.SaveImage(s, ChartImageFormat.Png); 
s.Position = 0; 

OutlookApp outlookApp = new OutlookApp(); 
MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 

mailItem.Subject = "This is the subject"; 
chart1.SaveImage(s, ChartImageFormat.Png); 
chart1.SaveImage(s, ChartImageFormat.Png); 
mailItem.HTMLBody = "<html><body>This is the <strong>funky</strong> message body</body></html>" ; 


mailItem.Attachments.Add(s); 

//Set a high priority to the message 
mailItem.Importance = OlImportance.olImportanceHigh; 
mailItem.To = "[email protected]"; 
mailItem.Display(false); 
//mailItem.Send(); 

私はちょうど電子メールへMemoryStreamを取得する方法を見つけるように見えることはできません。

+0

本当にわかりません、 Outlookオブジェクトモデルはメモリから添付ファイルを追加することをサポートしていないようです。 [this](https://msdn.microsoft.com/en-us/library/office/ff869553.aspx)を参照してください。私は[Outlook Redemption](http://www.dimastr.com/redemption/home.htm)をご覧になることをお勧めします。 –

+0

埋め込みOLEオブジェクト(チャート)または埋め込み画像を含むHTMLメールを使用してRTFメールを作成しようとしていますか? –

答えて

3

OutlookはSMTPを使用して電子メールを送信することをサポートしています。したがって、SmtpClientを使用してメールを送信することができます。そして、あなたが添付ファイルとして画像を送信したり、電子メールの本文に画像を置くことができます。

var body = @"Here is the chart: <br/> <img src=""$CONTENTID1$""/>"; 
var CONTENTID1 = Guid.NewGuid().ToString().Replace("-", ""); 
body = body.Replace("$CONTENTID1$", "cid:" + CONTENTID1); 
var htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html"); 
var stream = new MemoryStream(); 
this.chart1.SaveImage(stream, System.Drawing.Imaging.ImageFormat.Png); 
stream.Position = 0; 
LinkedResource imagelink1 = new LinkedResource(stream, "image/png"); 
imagelink1.ContentId = CONTENTID1; 
imagelink1.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; 
htmlView.LinkedResources.Add(imagelink1); 

MailMessage mail = new MailMessage(); 
mail.From = new MailAddress("[email protected]"); 
mail.To.Add(new MailAddress("[email protected]")); 
mail.Subject = "Subject"; 
mail.AlternateViews.Add(htmlView); 
SmtpClient client = new SmtpClient(); 

client.Host = "smtp-mail.outlook.com"; 
client.Port = 587; 
client.EnableSsl = true; 
client.DeliveryMethod = SmtpDeliveryMethod.Network; 
client.UseDefaultCredentials = false; 
client.Credentials = new NetworkCredential("[email protected]", "password"); 
client.Send(mail); 

この方法は、チャート画像は、電子メールの本文に表示されます:

enter image description here

+0

このエラーが発生しました サーバレスポンス:5.7.3要求されたアクションが中止されました。ユーザが認証されていない – Sewder

+0

上記のコードの最後にあるホスト、ポートなどのクライアント設定を確認してください。これらの設定は非常に重要であり、私はこれらの設定を正確に使用し、私のoutlook.comアカウントから別のアカウントに電子メールを送信します。 –

+0

投稿があなたの質問に答えているようです。また、それはあなたの[新しい質問](私は見ていない)(http://stackoverflow.com/questions/36943115/save-image-on-my-computer-as-html-to-embed-in-email)への答えですまだ。 –

関連する問題