テキスト + HTML のメール。 |
- 日時: 2008/09/10 14:48
- 名前: のの
- メールにテキストとHTMLの本文を含め、
Content-Type = multipart/alternative として送付したいのですが、 うまくいきません。
IPart part = new TKMP.Writer.MultiPart( new text, new html ); としてみたところ、Outlookでの受信では、textが「ATT***.txt」として添付されてしまい、 ヘッダが Content-Type: multipart/mixed; となりました。
以下に試したソースを記載いたします。 ---------------------------------------------------------------------------- /// <summary> html用 </summary> public class HtmlPart : TKMP.Writer.IPart { private TKMP.Writer.TextPart _TextPart;
public HtmlPart(string Text) { _TextPart = new TKMP.Writer.TextPart( Text, TKMP.Writer.Charsets.ShiftJIS, TKMP.Writer.ContentTransferEncodings.QuotedPrintable); }
public System.IO.Stream GetBodyStream() { return _TextPart.GetBodyStream(); } public TKMP.Writer.Header.HeaderCollection Headers { get { //ヘッダ一覧のコピーを作成します TKMP.Writer.Header.HeaderCollection hc = new TKMP.Writer.Header.HeaderCollection(); foreach (TKMP.Writer.Header.HeaderString hs in _TextPart.Headers) { hc.Add(hs.Name, hs.Data); } //ここで必要な情報を書き換えます hc.Add("Content-Type", "text/html; charset=Shift-JIS");//★HTML指定★ //新しく作成した一覧を公開します return hc; } }
}
/// <summary> 送信 </summary> private void send() {
MailWriter mail = new TKMP.Writer.MailWriter();
//本文のクラスを作成します //★テキストとHTMLを含める。★ IPart part = new TKMP.Writer.MultiPart( new TextPart("テキスト本文"), new HtmlPart("HTML本文<br>HTML本文"));
//送信メールクラスに本文を登録します mail.MainPart = part;
//ヘッダ情報を追加します mail.Headers.Add("Content-Type", "multipart/alternative"); //★multipart/alternativeにしたい★
//送信処理(略) }
---------------------------------------------------------------------------- メール送受信についてよく分かっておらず申し訳ありませんが、 ご教授よろしくお願い致します。
|
|
Re: テキスト + HTML のメール。 ( No.1 ) |
- 日時: 2008/09/10 18:14
- 名前: のの
- 追記です。
> Part part = new TKMP.Writer.MultiPart( > new TextPart("テキスト本文"), > new HtmlPart("HTML本文<br>HTML本文")); > > //送信メールクラスに本文を登録します > mail.MainPart = part; > > //ヘッダ情報を追加します > mail.Headers.Add("Content-Type", "multipart/alternative"); //★multipart/alternativeにしたい★
上記を ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Part part = new TKMP.Writer.MultiPart( new TextPart("テキスト本文"), new HtmlPart("HTML本文<br>HTML本文"));
part.Headers.Add("Content-Type", "multipart/alternative; boundary=_"); //★★追加★★
//送信メールクラスに本文を登録します mail.MainPart = part;
//ヘッダ情報を追加します //mail.Headers.Add("Content-Type", "multipart/alternative"); //★★削除 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
こちらに書き換えたところ、メールヘッダContent-Typeが"multipart/alternative"となり、 添付ファイルとならなくなりました。
しかし、メール本文が以下のようになりました。。 ------------------------------------------------------------ This is a multi-part message in MIME format. ------=_NextPart_******************* Content-Type: text/html; charset=Shift-JIS Content-Transfer-Encoding: base64
SFRNTJZ7lbY8YnI+SFRNTJZ7lbY= //★★メール本文?
------=_NextPart_******************* Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit
テキスト本文 //★★メール本文 ------=_NextPart_*******************-- ------------------------------------------------------------
Content-TypeをAddする際に"boundary"をつけて区切りを設定すれば良いのでしょうか? その場合boundaryの値の取得方法が分かりません。
そもそも何処から間違っているのかも分からないのですが。。 手探り状態ですみません。
宜しくお願い致します。
|
Re: テキスト + HTML のメール。 ( No.2 ) |
- 日時: 2008/09/11 00:34
- 名前: Toki◆pRU.c9X.EOI
- TKMP.Writer.MultiPartクラスがそもそもテキストとHTMLを含むHTMLメールを想定していないことが原因ですね。
ご指摘のように、MultiPartクラスは複数のパートを連結する機能しかありません。 このためContent-Typeは「multipart/mixed」固定、boundaryは非公開になっています。 mail.Headers.Addで強制的に書き換えるような場合は「boundary非公開」がネックになってしまいます。
解決方法1. ・ライブラリの修正 Content-Typeの値を設定するプロパティを追加するように検討させていただきます。 これだけで、問題はほとんど解決するような気がします。 解決方法2 ・HTMLメール用のMultiPartクラスを作成する TKMP.Writer.IPartを実装し、2つのTextPart、HtmlPartクラスを連結するクラスを作成します。 内部パートからGetBodyStream()メソッドで読み出したデータを連結することで可能です。
作者としては方法1を実現するよう努力してみます。
|
Re: テキスト + HTML のメール。 ( No.3 ) |
- 日時: 2008/09/11 00:43
- 名前: Toki◆pRU.c9X.EOI
- 解決方法3を発見しました
part.Headers.Add("Content-Type", "multipart/alternative; boundary=_"); の代わりに
part.Headers.Add("Content-Type", part.Headers["Content-Type"].Replace("mixed", "alternative")); としてみてください。
すでに登録されているContent-Typeの値を利用するので、boundaryの問題は回避可能です。
|
Re: テキスト + HTML のメール。 ( No.4 ) |
- 日時: 2008/09/11 14:06
- 名前: のの
- 早速のご返信有難うございます!
解決方法3を試したところ、うまく動作いたしました。
こんな方法もあるのですね。目からうろこでした。
大変助かりました!感謝です。 有難うございました。
|
|
|