Tips

32KB以上のメールを送信する

日付2002/04/26
ID01-891
バージョン6.5.x, 6.7.x, and 6.8.x
プラットフォームWindows and Mac OS

この記事は、最新ではないバージョンに関連した方法について解説しています。

最新のバージョンでは推奨されていないか、または他の方法で簡単に実現できる可能性があります。

32KB以上のBODYサイズのメールを送信したいことはありませんか?
HTMLメールを送りたい場合には頻繁に起きるでしょう。
4D InternetCommandsのSMTP_Bodyコマンドについて調べてみますと:

SMTP_Body (smtp_ID; msgBody{; deleteOption}) -> Integer

このコマンドは、引数「smtp_ID」で識別される内部メモリ構造体のメッセージ本文領域に引数「msgBody」に渡したテキストを追加します。ご存知の通り4Dのテキスト型オブジェクトは32000バイトまでという制限があります。つまり「32000バイトまでのメールBODY」というのは、引数「msgBody」がテキスト型であることからの誤解です。

32000バイトを越えるメールBODYを作成したい場合は、オプション引数「deleteOption」に'追加フラグ'を渡して、SMTP_Bodyコマンドを繰り返し実行すれば可能です。実際のメールBODYサイズの限界は、その時点で利用できるメモリー量によってのみ制約を受けます。

オプション引数「deleteOption」に「0」(ゼロ)を渡すと('置換'モード)それ以前にメモリへ蓄えられたメールBODYテキストは上書きされて無くなります。(空文字列を引数「msgBody」へ渡した場合は事前に蓄えられたBODYテキストに影響はありません。)

オプション引数「deleteOption」に「1」を渡すと('削除'モード)それ以前にメモリへ蓄えられたメールBODYテキストを削除します。(空文字列を引数「msgBody」へ渡した場合でも事前に蓄えられたBODYテキストを消去します。)

オプション引数「deleteOption」に「2」を渡すと('追加'モード)それ以前にメモリへ蓄えられたメールBODYテキストの後に引数「msgBody」に渡したテキストが付け加えられます。

【注意】オプション引数「deleteOption」のデフォルトは「0」(ZERO='置換'モード)です。

以上の仕様を頭に入れて、32000バイト以上のメールを作るメソッドを考えると以下のようになります:


C_LONGINT($SMTP_ID)

$error:=SMTP_New ($SMTP_ID)
$error:=SMTP_Host ($SMTP_ID;"MymailServer.com")
$error:=SMTP_From ($SMTP_ID;"someone@somewhere.com")
$error:=SMTP_To ($SMTP_ID;Toaddress)
$error:=SMTP_Subject ($SMTP_ID;"Hello")
$error:=SMTP_AddHeader ($SMTP_ID;"Content-Type:";"text/html;charset=us-ascii";1)
$error:=SMTP_Body ($SMTP_ID;MessageOne)
$error:=SMTP_Body ($SMTP_ID;MessageTwo;2) ` '2' = 追加モード
$error:=SMTP_Send ($SMTP_ID)