2012-02-17 10 views
1

サンプルのmhtmlファイル(例:here)を自分宛てにメールすると、Outlookで画像が正常に表示されます。ただし、Word文書をmht(Web Archive)形式に変換すると、画像は表示されません。ブラウザでファイルを開くと、イメージが正常に表示されるか、mhtファイルを添付して添付ファイルをダブルクリックしても表示されます。しかし、ファイルが電子メールにインライン展開されている場合は、「画像をダウンロードするにはここをクリックしてください」という赤いXボックスが表示され、画像をダウンロードすると「ファイルを表示できません...移動した可能性があります... 'MS WordのMHTファイルの画像はメールに表示されません

Word文書内の画像がMHTMLに変換された理由は、メールにインラインで表示されたくないのですか?

答えて

1

MHTMLドキュメントは、複数パートのMIMEドキュメントです。文書の最初の部分はHTMLで、他の部分の画像へのリンクがあります。問題は、ブラウザで作業していてもリンクがインラインメールで機能しないことです。 some examplesを見ると、リンクに接頭辞 "cid:"が付いていなければならず、 "cid:"の後の部分には対応するMIME部分のヘッダーにContent-IDが必要であることがわかります。

リンクは「CID:image002.gif」のような単純なことができ、対応するMIMEパートビーイングのContent-IDを持つ:リンクのすべてがこのように固定されている場合は

Content-ID: <image002.gif> 

、HTML Outlookでインラインで表示されます。

0

上記のとおり、コンテンツIDを使用して、メールのHTML本文内の画像タグに添付ファイルをリンクします。以下は、MHTファイルを開き、リンクを調整し、結果を電子メールで送る完全なプログラムです。

Word Automation Serviceを使用して受信メールをMHTファイルに変換して電子メールで送信するクライアントがあります。問題は、Outlookが生のMHTをあまり気にせず、画像をインライン化しなかったことです。ここに私のPOCがあります。私はMailKit内の依存関係をカバーするBouncy Castle C#API(http://www.bouncycastle.org/csharp/)とテスト用のSMTPトラフィックを受信するためにローカルサーバー上で動作するAntix SMTP Server for Developers(http://antix.co.uk/Projects/SMTP-Server-For-Developers)をMimeKitとMailKit devのコード。以下は、既存のMHTファイルを開き、埋め込まれた画像で電子メールを送信するPOCコードです。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading.Tasks; 
using MimeKit; 
using MailKit; 
using MimeKit.Utils; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MimeMessage messageMimeKit = MimeMessage.Load(@"c:\test.mht"); 
      var images = messageMimeKit.BodyParts.Where(x => x.ContentLocation.LocalPath.EndsWith("png")); 
      var bodyString = messageMimeKit.HtmlBody; 
      var builder = new BodyBuilder(); 
      foreach (var item in images) 
      { 
       item.ContentId = MimeUtils.GenerateMessageId(); 
       bodyString = bodyString.Replace(GetImageName(item), "cid:" + item.ContentId.ToString()); 
       builder.LinkedResources.Add(item); 
      } 
      builder.HtmlBody = bodyString; 
      messageMimeKit.Body = builder.ToMessageBody(); 

      messageMimeKit.From.Add(new MailboxAddress("from address", "[email protected]")); 
      messageMimeKit.To.Add(new MailboxAddress("to address", "[email protected]")); 
      messageMimeKit.Subject = "Another subject line"; 
      using (var client = new MailKit.Net.Smtp.SmtpClient()) 
      { 
       client.Connect("localhost"); 
       client.Send(messageMimeKit); 
       client.Disconnect(true); 
      } 
     } 

     private static string GetImageName(MimeEntity item) 
     { 
      return item.ContentLocation.Segments[item.ContentLocation.Segments.Count() - 2] + 
           item.ContentLocation.Segments[item.ContentLocation.Segments.Count() - 1]; 
     } 
    } 
} 
+1

私は問題が何であるかを理解した後、Word文書をmhtmlに変換し、リンクを修正し、電子メールで送信するために何かを書いた。 – runrig

関連する問題