version 6.5
Case文でコマンドを実行する
このドキュメントの多くの例題で、デベロッパがあまり目にしないようなプログラム構造が使用されています。つまりCase文で一連のコマンドを実行する方法です。
4D Internet Commandsの多くのコマンドは、完全に実行するために連続したコマンドの実行がすべて成功する必要があります。途中でコマンドの実行に失敗した場合、その後の実行は停止されなければなりません。If条件文でこれを記述するとカスケードが深くなってしまいます:
If (SMTP_New($smtp_id)=0) If (SMTP_Host ($smtp_id;<>pref_Server)=0) If (SMTP_From ($smtp_id;vFrom)=0) If (SMTP_To ($smtp_id;vTo)=0) …より深く… End if End if End if End if
これに代わるものとして、4DのCase文を使用できます。Case文のそれぞれの条件式が、True または Falseを返すかどうか検証するために評価されます。すべてのCaseテストがFalseを返すと、すべてのテストが実行されます。先の例をCaseで書き直すと、以下のようになります:
$SentOK:=False `すべの呼び出しを実行したかを示すフラグ Case of : (SMTP_New ($smtp_id)#0) : (SMTP_Host ($smtp_id;?pref_Server)#0) : (SMTP_From ($smtp_id;vFrom)#0) : (SMTP_To ($smtp_id;vTo)#0) : (SMTP_Subject ($smtp_id;vSubject)#0) : (SMTP_Body ($smtp_id;vMessage)#0) : (SMTP_Send ($smtp_id)#0) Else $SentOK:=True `メッセージが構築され送信された End case If ($smtp_id#0) `メッセージエンベロップが作成されいればクリアする $OK:=SMTP_Clear ($smtp_id) End if
上の例題では、すべての4D Internet Commandsのコマンドは、実行に成功すると0を返します。4Dはそれぞれのcase文を評価するために、4D Internet Commandsのコマンドを実行し、返り値を受け取ります。それぞれのcase文は返り値を0でないと比較しているため、コマンドの実行に失敗し非0値が返されると、case文の評価がTrueとなり、そこでテストが終わります。すべてのコマンドの実行に成功すると、4DはElse句を実行し、$SentOKフラグがメッセージの送信に成功したことを示すように設定されます。
POP3 や IMAPメールでの自動応答メールに関する推奨
データベースに、受信したメールに対する返信が可能なメールシステムの実装を計画している場合、返信メッセージのフィールドをどのように埋めるかということに対する標準的な推奨事項があります。以下の推奨はRFC#822で説明されています:
・"Sender" フィールドにリストされるアドレスはメッセージの配送中に発生した問題に関する通知を受け取ります。"Sender" フィールドが存在しない場合、通知は"From" フィールドにリストされたアドレスに送付されます。"Sender"メールアドレスにはメール配送に関する問題に関連する返信のみが送られるべきであり、メッセージのトピックに関連する返信は送られるべきではありません。
・"Sender"アドレスは自動的なメッセージ返信には使用されるべきではありません。かわりに"Reply-To" や "From" フィールドを以下の条件に基づき使用します。
・"Reply-To" フィールドが存在し、一つ以上のアドレスが含まれる場合、すべての返信はこのアドレスリストに送信します。"Reply-To"ヘッダのアドレスは"From"ヘッダにリストされるすべてのアドレスを上書きします。しかし"Reply-To" フィールドが存在せず、"From" フィールドが存在する場合、返信は"From"のアドレスに送信します。
この推奨は、返信を行う際のメールアドレスをプログラムでどのように決定するべきかという決定プロセスを助言するためのものです。返信メッセージが構築された後は、エンドユーザはメッセージ送信前にこのデフォルト返信先を上書きすることができます。