NAME
TL::HtmlMail - 指定されたURLからデータを取得し、HTMLメールを作成する。
SYNOPSIS
my $mail = $TL->newHtmlMail
->setEventListener(\&log_func)
->setHeader(
From => 'null@example.org',
To => 'null@example.org',
Subject => 'テストメール',
)
->setTextURL('http://example.org/foo.txt')
->setHtmlURL('http://example.org/foo.html')
->setEnclose(1)
->makeMail;
DESCRIPTION
HtmlMail クラスでは、名前等のテンプレート展開を行うための 支援機能をサポートしています。 (ここでいうテンプレート機能とは、名前等をメールに埋め込むことで、 Templateクラスの機能とは無関係です)
通常のタグをHTML中に書いてもBase64 エンコードされてしまうため、 そのままではテンプレート展開ができません。 また、1通ずつエンコードし直すのはパフォーマンス上の問題が発生します。
HtmlMail クラスでは、HTMLメール中の m/\0[^\0]+?\0/ にマッチする 文字列を特殊視します。この文字列が存在する場合、文字列の前後で分割し、 それぞれを Base64 エンコードします。
m/\0[^\0]+?\0/ にマッチした文字列はそのまま残るので、後に その部分に Base64 エンコードした文字列を埋め込むことで、 テンプレート展開を行うことができます。
テンプレート展開支援についての詳しい機能は、setPreprocessor メソッド のマニュアルを参照してください。
メーラー対応状況
項目 OutLook2000 OL Express 6 Becky! Ver2 Netscape4.78 Netscape6 YahooMail HotMail InfoseekMail
文字コード:JIS ○ ○ ○ ○ ○ ○ ○ ○
文字コード:SJIS ○ ○ ○ ○ ○ ○ ○ ×
文字コード:EUC ○ ○ ○ ○ ○ ○ ○ ○
文字コード:UTF-8 ○ ○ ○ × ○ × × ×
画像埋込 ○ ○ ○ ○ ○ × ○ ×
画像外部参照 ○ ○ ○ ○ ○ ○ ○ ○(※2)
EMBED(FLASH等)IFRAME埋込:外部 ○ ○ × × ○ × × ○
EMBED(FLASH等)IFRAME埋込:埋込 × × × × × × × ×
JavaApplet(IFRAME埋込) × × × × × × × ×
JavaApplet(IFRAME外部参照) ○ ○ × × ○ × × ○
リンクをクリックしたときの動作 別window 別window 同一window 別window 別window 別window 別window(※1) 同一flame
フレームHTML外部参照 ○ ○ ○ △(※3) × × × ×
フレームHTML埋込 × × ○ △(※3) × × × ×
フレーム内画像埋込 × × × ○(※3) × × × ×
FORM ○(※6) ○ ○ ○ ○(※7) ○(※7) ○(※1) ○(※2)
JavaScript:onLoadの動作 × △(※8) × △(※9) × × × ×
JavaScriptの動作 × △(※8) × △(※9) △(※9) × × ×
HTML内蔵CSS ○ ○ ○ ×(※4) ○ ○ × △(※11)
HTML内蔵CSS画像埋込 ○ ○ ○ ×(※4) × × × ×
HTML内蔵CSS画像外部参照 ○ ○ ○ ×(※4) ○ △(※5) × ×
外部CSS ○ ○ ○ × ○ × × ○(※2,※5)
外部CSS画像埋込 ○ ○ ○ × × × × ×
外部CSS import外部参照 ○ ○ ○ × ○ × × ○(※2)
外部CSS import埋込 ○ ○ × × × × × ×
Becky! Ver1:HTML対応が非常に限定されているため,本ソフトで作成したHTMLメールは表示できません。
@nifty:WebメールはHTMLに対応していません。
※1:上部にMSNのメッセージが出現。
※2:対応する文字コードを使用したHTMLのみ可。
※3:NOFRAMEタグ内のHTMLを表示。
※4:表示が崩れる(ブラウザでは見られる)。
※5:背景画像がメール表示枠をはみ出る。
※6:フォーム入力の操作性に問題あり(誤操作によりメール削除する危険性アリ)。
※7:文字コードが一部崩れる可能性有り。
※8:セキュリティ設定が「インターネット」で且つ、インターネットのセキュリティレベルが「中」の時に可。
※9:詳細設定にて、「メールとニュースでJavaScriptを使用する」がチェックされていれば可。
※10:添付は可能、実行はJavaセキュリティによる可否あり。
※11:背景画像の使用は不可能。
2005年1月現在
METHODS
- $TL->newHtmlMail
-
$htmlmail = $TL->newHtmlMail
TL::HtmlMail オブジェクトを作成。
- init
-
$htmlmail->init
メールオブジェクトを初期化します。 インスタンスの create 直後と同じ状態になります。
- setProxy
-
$htmlmail->setProxy($PROXY)
$PROXY : 使用するプロキシ "host:port" 形式。
undef を指定するとダイレクト接続になります。
- setEventListener
-
$htmlmail->setEventListener(\&FUNC)
イベントリスナーを設定します。 HTML取得等のイベントに従って、リスナー関数が呼び出され、 第1引数にメッセージが渡されます。
メッセージはHTML形式で返されます。
- setPreprocessor
-
プリプロセッサを指定します。 HtmlMailクラスは、データを受信すると、各種加工処理の前に プリプロセッサ関数を呼び出します。
デフォルトでは、NULL 文字をカットする関数が設定されます。 (これはテンプレート展開支援機能の誤動作を防ぐためです)
プリプロセッサ関数は、第1引数に Content-Type、第2引数に データ内容を受け取り、データを返します。
このとき、タグとして扱いたい部分を、m/\0[^\0]+?\0/ に マッチする文字列に置き換えます。
デフォルトで設定される関数は下記のコードです。
sub _deleteNullPreprocessor { my $ctype = shift; my $data = shift; if($ctype =~ m,^text/,i) { $data =~ tr/\0//d; } $data; }
HTML・テキスト・画像等、全てのコンテンツタイプのデータで 呼び出されるため、必ず第1引数の内容を確認して動作を 振り分けてください。
テキストは、メール生成時に自動的にJISに変換されますが、 その他のコンテンツはコード変換されません。
埋め込むときに漢字コードを判別する必要があるので、 HTMLメールの場合は、後の展開処理用に漢字コードをタグの中に 埋め込んでおく必要があります。
- setTimeout
-
$htmlmail->setTimeout($SEC)
外部サーバーからデータを取得するときのタイムアウト秒数を 設定します。
setTimeoutメソッドを使用しなかった場合は、デフォルト値として 60 秒が設定されます。
- setTextURL
-
$htmlmail->setTextURL($URL)
テキストドキュメントを取得するURLを指定します。
Content-Type は強制的に text/plain とされます。 URL におかれたコンテンツが正しい Content-Type で あるかどうかはチェックされません。
- setHtmlURL
-
$htmlmail->setHtmlURL($URL)
HTMLドキュメントを取得するURLを指定します。
URL におかれたコンテンツが正しい Content-Type で あるかどうかはチェックされません。
- setEnclose
-
$htmlmail->setEnclose($FLAG)
関連ファイルをメールに埋め込むかどうか指定します。 埋め込みは、ブラウザによって正しく表示できないことがあります。
0の場合、関連ファイルは埋め込まず、絶対URLに変換する。 1の場合、関連ファイルを埋め込み、CID(Content-ID)に変換する。
デフォルトは0。
- setLinkAbs
-
$htmlmail->setLinkAbs($FLAG)
HTML/CSS中のリンクを絶対URLに加工するかどうかを選択します。 加工しない場合、元のHTMLのリンクが全て絶対URLになっている 必要があります。
加工する場合、HTMLは再パースされるため、 JavaScript や、不正なタグが入っている場合に正しく 再構成されない場合があります。
0の場合、HTML/CSSへの加工を行わない。 1の場合、HTML/CSS中のリンクを絶対URLに加工する。
デフォルトは1。
- setHeader
-
$htmlmail->setHeader(%HEADER)
メールのヘッダを指定します。
- makeMail
-
$MAIL = $htmlmail->makeMail
メール文書を生成します。
生成中に発生したイベントは、setEventListener でリスナーが 設定されていれば、そこに送られます。
メール文書生成中にエラーが発生するとundef が返り、 getError でエラーメッセージが取得できるようになります。
- getError
-
$ERROR = $htmlmail->getError
発生したエラー内容を取得します。
SEE ALSO
AUTHOR INFORMATION
Copyright 2006 YMIRLINK Inc. All Rights Reserved.
This framework is free software; you can redistribute it and/or modify it under the same terms as Perl itself
このフレームワークはフリーソフトウェアです。あなたは Perl と同じライセンスの 元で再配布及び変更を行うことが出来ます。
Address bug reports and comments to: tl@tripletail.jp
HP : http://tripletail.jp/