送信メールのHTML展開
新居雅行(msyk@mac.com)
送信メールのHTML展開について
メールの内容をHTMLで送信する「HTMLメール」ではありません。元メールにあるHTMLの記述をもとに、送信時にテキストに展開して送信するメールです。送信メールは、OutBoxフォルダにUpload-1.txtなどの名前で作成されますが、そのファイルの文面にあるHTMLの記述部分を、規則に従ってテキストだけに書き換え、送信をします。
HTML展開が実行されるようにする方法
HTML展開を実行するには、OME設定のBehavior_Info.txtファイルに「HTMLExpanding」という単語が含まれるようにします。
HTML展開に対応したタグ
タグ | 送信メールでの記述 | 展開結果 | 備考 |
---|---|---|---|
a | <a href="URL">STRING</a> | ◇STRING |
URLの前は全角のスペース。URLは改行しないようにする。 |
br | <br> | (改行) | |
h1 | <h1>STRING</h1> | 《STRING》 | |
h2 | <h2>STRING</h2> | 《STRING》 | |
h3 | <h3>STRING</h3> | 《STRING》 | |
img | <img src="images/URL"> | <!--OME_SendMail:NOBREAK--> URL | URLだけを抜き出して最初に全角の空白を入れる。URLの前は全角のスペース。URLは改行しないようにする。 |
ol, li | <ol> <li>STRING1</li> <li>STRING2</li> ... </ol> |
1. STRING1 2. STRING2 |
olタグは事実上何もしない。従って、<ol>だけの行を作っておけば、1行の空きができる。</ol>も同様。olタグによって番号が初期化される。 |
ul, li | <ul> <li>STRING1</li> <li>STRING2</li> ... </ul> |
◎ STRING1 ◎ STRING2 |
ulタグは事実上何もしない。従って、<ul>だけの行を作っておけば、1行の空きができる。</ul>も同様 |
< | < | < | 展開の最後に行われる |
> | > | > | 展開の最後に行われる |
& | & | & | 展開の最後に行われる |
- 上記以外のタグは、なにも展開は行いません。対応していないタグは単に除去されます。
- <!--OME_SendMail:NOBREAK-->は、実際には、<!--OME_SendMail:NOBREAK--> に置き換わります。
- liタグの項目は指定のバイト数で改行されます。たとえば、
<li>あああああああうううううaaaaaaあうあいういふいあああああああうううううaaaaaaあうあいういふいあああああああうう</li>
は、以下のように展開されます。
◎ あああああああうううううaaaaaaあうあいういふいあああああああうう
うううaaaaaaあうあいういふいあああああああうう
タグ展開の規則
- 1行ごとにタグ展開をします。文書全体を見ませんので注意してください。
- タグは大文字、小文字あるいは組み合わせは問いませんが、タグと閉じタグの大文字小文字は一致している必要があります。つまり、<a href="..."> ... </A> とはならないようにしてください。
- タグの検索は、まず<を検索し、その場所から次の>を検索する。パラメータに>がある場合にはうまく対応できない可能性があります。
- パラメータは単純に半角スペースで区切られているとする。パラメータ内に半角スペースがある場合にはうまく対応できない可能性があります。
カスタマイズ
HTMLの展開内容についてはリクエストをもらえば反映させますが、たぶん、カスタマイズしたい人は自分独自に展開方法を詳細に定義したいでしょう。カスタマイズはJavaのクラスで作成でき、プラグイン的に自分でコンパイルしたクラスを追加することができます。展開するクラスのカスタマイズ等をどうするかということもありますが、当面はSDKのソースで行うとします。(たとえば、HTML展開するクラスのJARファイルを供給して…などの手法もありますが、利用する方々が増えてきたら相談させていただくということにします。)
以下、OME_SendMailのプロジェクトを参考に、記述内容を見て下さい。HTMLFormatterグループにあるa.javaあたりをまずは参考にしてください。
- あるタグ(たとえば「Aタグ」)を処理するクラス「a」を定義します。タグと同名ですべて小文字です。これを「タグ展開クラス」と呼びます。
- このクラスは、OME.tagformatterというパッケージに定義します。
- クラスは、OME.tagformatter.TextFormatableクラスをextendsします。
- タグの展開を行うメソッド、formatを定義します。
public String formating(String item, Properties props) - 引数itemには、タグに囲まれた部分の文字列が得られます。
- 引数propsには、タグのパラメータがjava.util.Propertiesクラスが得られます。パラメータ名をキーとするが、すべて小文字にします。
- 展開した結果の文字列を戻すようにします。
タグ展開するクラスを記述していないタグについては、単に消滅します。
引数とサービスルーチンおよび変数
たとえば、送信メールファイルに<a href="http://mac-ome.jp/" target="window1">といった記述があった場合、a.javaのformatメソッドに対して、次のように引数に渡されます。
item→ "オープンメール環境"
props→ {href:"http://mac-ome.jp/", target:"window1"}
したがって、props.getProperties("href")により"http://mac-ome.jp/"が得られます。ただし、カッコで囲われていることがありうるので、必要に応じてunbracketメソッドを使ってカッコをはずします。
以下のメソッドと変数がOME.tagformatter.TextFormatableで定義されているので、タグ展開クラスで利用できます。
メソッド | String unbracket(String) | 引数のカッコをはずすが、半角のダブルクォーテーションないしはシングルクォートで囲まれている場合のみカッコをはずす。また最初と最後の文字が同じ場合に限りカッコをはずす。 |
static変数 | widthByBytes | 送信メール内の文字列を何バイトずつで区切るかが得られる。OME設定(ないしはデフォルト)の設定がすでにこの変数に入っているので、タグ展開クラスで利用できる。 |
newLine | 改行の文字列。システムプロパティから得られた値がすでにこの変数に入っているので、タグ展開クラスで利用できる。 |
指定したバイト数ごとに改行するのは、OME_SendMailのLineDeviderクラスを利用できます。
更新日: