0

それで、私は彼らがいたページ(レシートページ)のdiv要素の内容で満たされた電子メールを送っています。領収書ページ内では、cssスタイルが適切に表示されます。ただし、オブジェクトを電子メールで送信すると、スタイリングが消えてしまうようです。これは別のページにあり、ヘッダー内のフォームと呼ばれます(通常どおり)。なぜこれが起こっているのかは理解できますが(レンダリングするHTMLを送信し、cssスタイルにアクセスしない)、解決方法がわかりません。

だから私の質問は、cssスタイルを失うことなくこのdiv要素を送信するにはどうすればよいですか?

参考までに私のコードは次のとおりです。

    StringWriter sw = new StringWriter( );
    HtmlTextWriter w = new HtmlTextWriter( sw );
    invoice.RenderControl( w ); //invoice is the div id of the element i am sending to email
    string s = sw.GetStringBuilder( ).ToString( );


    MailMessage message = new MailMessage( );
    message.IsBodyHtml = true;
    message.To.Add( new MailAddress( Session["eMail"].ToString( ) ) );
    message.To.Add( new MailAddress( "email@email.ca" ) );
    message.Subject = "extra dimensional stack-overflow";
    message.From = new MailAddress( "email@email.ca" );
    message.Body = s;

    SmtpClient emailClient = new SmtpClient( "localhost", 8025 );
    System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential( "blargh", "blargh" );
    emailClient.UseDefaultCredentials = false;
    emailClient.Credentials = SMTPUserInfo;
4

3 に答える 3

3

電子メールの HTML リーダーには、インライン スタイルと、一部のクライアントでは HTML ベースのスタイル マークアップ (1999 年のように揺らいでいます) の混合が必要です。最悪ですが、これには十分な理由があります。外部リソースを参照すると、ユーザーの行動を追跡できるようになり、潜在的なセキュリティ ホールが開く可能性があります。これが、ユーザーがボタンをクリックするまで、ほとんどのメール プログラムが外部画像を読み込まない理由です。電子メール クライアントは Web ブラウザではないため、同じように動作することは想定されていません。

申し訳ありませんが、電子メールの HTML では、すべてを に含める必要があります<body>(<head>タグ、スクリプト、外部リソースは必要ありません)。

ところで、Outlook や Outlook Express を含むすべてのクライアントで一貫してメールを表示したい場合は、表ベースのレイアウトも使用する必要があります。悪いが、本当だ。

于 2012-04-25T02:15:41.910 に答える
1

HTML メールを送信するには、次のようにします。

  1. インラインまたはページはめ込みスタイルの html テンプレートを作成します。外部参照は好みませんが、それでも必要です。css ファイルをいくつかのオンラインの場所に保存する必要があります。

  2. 同様に、テンプレートが画像が豊富な場合は、css、画像などの html のすべてのコンテンツをリモート サーバーにアップロードします。

  3. textreader オブジェクトの使用 readall lines using

    using(TextReader reader =new StreamReader(path_of_html_file))
      {   
        var stringvalue = reader.ReadAllLines()
        stringvalue = stringvalue.Replace("[NAME]", db.Value.SomeValue);
      }
    

    // メソッドについてはよくわかりませんが、同じメソッドがあります。これはただの助けです。テキストを検索して、データベース主導の値に置き換えます。私は一般的に [NAME] を使用するように、生の HTML で [EMAIL] タイプの文字列を使用し、db 値を使用してそれらを置き換えます。または、大きな html ドキュメントの検索と置換に Regex を使用することもできます。

  4. メール本文の html プロパティを true に設定してメールを送信します。

于 2012-04-25T21:31:56.363 に答える
-1

次のようにスタイル シートを含むメールを送信するには
// 請求書の div でスタイル シートを定義します //

StringWriter sw = new StringWriter( );
    HtmlTextWriter w = new HtmlTextWriter( sw );
    invoice.RenderControl( w ); //invoice is the div id of the element i am sending to email
    string s = sw.GetStringBuilder( ).ToString( );
    MailMessage message = new MailMessage( );
    message.IsBodyHtml = true;
    message.To.Add( new MailAddress( Session["eMail"].ToString( ) ) );
    message.To.Add( new MailAddress( "email@email.ca" ) );
    message.Subject = "extra dimensional stack-overflow";
    message.From = new MailAddress( "email@email.ca" );
    string a,b;
    a="<html><body>";
    b="</body></html>";
    message.Body = a + s + b;
    SmtpClient emailClient = new SmtpClient( "localhost", 8025 );
    System.Net.NetworkCredential SMTPUserInfo = new      System.Net.NetworkCredential( "blargh", "blargh" );
    emailClient.UseDefaultCredentials = false;
    emailClient.Credentials = SMTPUserInfo;
于 2015-10-13T11:47:09.973 に答える