3

SSRS Web サービスを使用して HTML4.0 形式のレポートを生成し、System.Net.Mail で送信しようとしています (SSRS にはレポートのスケジュールが組み込まれていることは知っていますが、スケジュールされたすべてのプロセスを処理する必要があります)。中央の場所にあります)。だから、私はhtmlファイルを生成してから、次のようなメールメッセージを作成しようとしています:

using (var sw = new StreamReader(htmlFile))
{
    mail_body = sw.ReadToEnd();
}

var mail = new MailMessage
                {
                    From = new MailAddress(mail_from),
                    Subject = mail_subject,
                    IsBodyHtml = true,
                    Body = mail_body
                };

唯一の問題は、これを行うと、ブラウザーで開いたときに html ファイルが正常に見えても、Outlook では水平方向に押しつぶされてしまうことです。

たとえば、これは私のhtmlファイルがIEでどのように見えるかです:

ここに画像の説明を入力

しかし、上記の方法を使用してメールを送信すると、Outlook では次のようになります。

ここに画像の説明を入力

なんらかの線幅制限が課せられているようですが、これがどのレベルで発生しているのかはわかりません。

何がこれを引き起こしているのかについて、誰かが洞察を持っていますか?

ありがとう!

4

4 に答える 4

9

私たちは同様の問題に直面し、多くの回避策を講じた後、SSRS 構成の 1 つのパラメーターであるOutlookCompatを最終的に見つけました。これを有効にすると、Outlook で HTML4.0 電子メールがつぶれたように見えなくなります。

詳細については、MSDN のドキュメントを参照してください。この値は、SSRS 構成ファイル (すべてのレポートと発信者用) で設定するか、ASMX を呼​​び出すときに直接設定できます。

SSRS 構成の例:

<Extension Name="HTML4.0" Type="...">
    <Configuration>
       <DeviceInfo>
          <OutlookCompat>True</OutlookCompat>
       </DeviceInfo>
    </Configuration>
</Extension>
于 2013-03-25T07:02:16.667 に答える
3

私は、他の誰かが利用できることを願っている原因と解決策/回避策を見つけました。

MHTファイル内のbase64でエンコードされたHTMLを、直接生成されたHTML4.0マークアップと比較したところ、独特の繰り返しの不一致が見つかりました。HTML4.0レポートの各テーブルセルクラスは、次のように定義されています。

.a23c
{
    padding-left: 2pt;
    padding-top: 2pt;
    padding-right: 2pt;
    padding-bottom: 2pt;
    border: 1pt solid Black;
    background-color: #d3d3d3;
    vertical-align: top;
    text-align: center;
    direction: ltr;
    layout-flow: horizontal;
    writing-mode: lr-tb;
}

ただし、MHTファイルでデコードされたhtmlを見ると、そこにあるクラスには、widthとmin-widthの2つの追加のプロパティがあります。

.a23c
{
    padding-left: 2pt;
    padding-top: 2pt;
    padding-right: 2pt;
    padding-bottom: 2pt;
    border: 1pt solid Black;
    background-color: #d3d3d3;
    vertical-align: top;
    text-align: center;
    direction: ltr;
    layout-flow: horizontal;
    writing-mode: lr-tb;
    min-width: 28.05mm;
    width: 28.05mm;
}

これらのプロパティを設定解除すると、Outlookがテーブルセルを押しつぶすように見えます(おそらく、HTMLパーサーが100%の幅を80列の制限のあたりとして定義しているためですか?)。

したがって、これを知っていると、回避策は明確に見えます。生成されたMHTファイルを読み込み、そこでbase64でエンコードされたHTMLをデコードして、メール本文として送信します。これは実際には機能しているようで、最小限のコードで:

var decoded_text = new StringBuilder();
using (var reader = new StreamReader(mhtFile))
{
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        if (line != "Content-Transfer-Encoding: base64") continue;

        reader.ReadLine(); //chew up the blank line
        while ((line = reader.ReadLine()) != String.Empty)
            if (line != null)
                decoded_text.Append(Encoding.UTF8.GetString(Convert.FromBase64String(line)));
        break;
    }
}

このコードの堅牢性については完全には確信していませんが、今のところ十分に機能しているように思われるので、これを答えとして受け入れます。もっと知識のある人がこれを読んでしまったら、もっと良い解決策を知って幸せになるでしょう!

于 2012-11-26T10:11:18.447 に答える
0

最初に以下のファイルを開きます。

C:\Program Files\Microsoft SQL Server\MSRS12.MSSQLSERVER\Reporting Services\ReportServer

次の拡張子を見つけようとするよりも:

<Extension Name="HTML4.0"

拡張要素に以下の子があることを確認してください:

 <Configuration>
       <DeviceInfo>
          <OutlookCompat>True</OutlookCompat>
       </DeviceInfo>
    </Configuration>

これで、レポートの見通しが良くなります。

于 2015-03-10T09:44:08.017 に答える