イベント:email


email(string time, string address, string subj, string message, integer num_left)

llGetNextEmail()関数によってリクエストに応答があったときに発生します。
timeにはメールの時間が、addressには送付者のアドレス、messageには本文が
Subにはサブジェクトが、そして、あとどれだけのE-mailがこのオブジェクト宛として待機しているのかがnum_leftに、それぞれ返されます。
timeにはllGetUNIXTimeによって返されるものと同じUNIXタイムスタンプがstring型として(本来はinteger型)、キャストされた文字列が返されます。
address と subj はそれぞれ、78文字に制限されています。
メッセージは1000文字までに制限されます。
(これは4KByte(※)であって1000byteではありません。)
※翻訳者追記
おそらくこの場合の1文字とはASCI文字ではなく、UNICODEを
意味していると思われる。
UNICODEでは1バイト文字セット、2バイト文字セット、
3バイト文字セット、4バイト文字セットの4種類があり、
それぞれ同時に併用して記述されるため、実際の文字数は
1000文字であっても4KByteであるとは限らない。
逆に1バイト文字セットだけ(主に英文)使用した文章の場合は
最大4096文字になる可能性が指摘されている。

メッセージフィールドの書式は次の通りである。
Object-Name: object_name\n
Region: region_name (region_corner _coordinates)\n
Local-Position: (local_pos)\n
\n
message_text

【要点】
object_nameは送信したオブジェクトの名前です。
オブジェクトのKEYを取得するには送信者のアドレスを見てください。
region_nameはオブジェクトのあるSIMの名前です。
これはllGetRegionName()関数でも取得できます。
region_corner_coordinatesはSIMのリージョンのコーナーの座標です。
これはzを抜かしたxとyの組み合わせで、<>で囲みません。
local_posは送信者オブジェクトのローカルな位置です。
これはx,y,zで表示され、<>では囲みません。
message_textはllEmail()の中のメッセージの文字列から送られた、有効な文字列です。
メッセージの先頭から追加されたヘッダを削除するには次のように記述してください。
message = llDeleteSubString(message, 0,
llSubStringIndex(message, "\n\n") + 1);
【注意】これらの制約を外れた電子メールは、戻らずにそのまま何も言われずに捨てられます。
入って来る電子メールは、引用されたテキスト("> bla")、任意の制御文字とsigdashes("-- \n")と共にそれよりも後ろの文章も同様に全てを取り除かれます。
SL 1.5.8現在、llGetNextEmailは休眠してるメールに対する処分を行いません。
【注意】
emailがダウンロードされうる速度はllGetNextEmail()の成功とemailイベントが応答する間の期間で制限を受けます。(1~3秒ほどです。)
それよりも早くポールする理由はありませんがあなたがそれをするならペナルティはありません。
最高の結果のためには、不定期な間隔で(5秒あるいはそれ以上の秒数ごとに)llGetNextEmailを呼び出し、その後、emailイベントの終了時にキューの中に待機中のEmailが残っている場合、llGetNextEmailを再度呼び出してください。


もはや、サブジェクトの制限が事実とは考えないでください。
私の最終テストで120文字を送信しました。-情報提供者:Max Case

SL 1.6.6現在での、電子メールの最大待機数は100です。
そして、キューが満杯のとき、受取人不在メッセージを受け取れます。-情報提供者:Splat1Edison

SL 1.6.10現在、外部ソースから送られる場合、本文は1000文字でサブジェクトは78文字で戻ってきます。-情報提供者:AlondriaLeFay

subjのアウトバウンド・キャラクタの制限に関する声明を軽々しく述べる前にもっと調査する必要があるように思えます。
私はこれまでに110文字を通過させ、78文字以上でも受信できました。
上のMaxCaseの調査結果はこれに同意します。
バージョン:SL 1.8.2(7) 2006年1月30日-情報提供者SiRiSAsturias

SL 1.10.3 (4)現在、1000文字の制限が緩和された可能性がある?
私は、外部電子メールアドレスにSLからおよそ1100文字で通ることができました。-情報提供者:BurnmanBedlam
これは受信メールです。そして、発信したメールでありません。そして、それには4096文字の制限(※)があります。

※翻訳者追記
これはUNICODEの1バイト文字セット(ASCII文字と同じ)を使った
場合は4096文字が受信できうる可能性を指摘するものと思われる。
また、本質的にサブジェクトについても78文字とは78Byteを意味せず、
最大312Byteまでの送信が出来うることを示唆する議論ではなかろうかと
おもわれるが未確認である。
また、別の解釈として、サブジェクトと本文(ヘッダを含む)の合計が
4096Byteが限度であるとする意見もあるようです。

Example:
default {
   [[state_entry]]() {
       llEmail((string)llGetKey() +
       "@lsl.secondlife.com", "Test!",
       "This is a test message.");
// Send email to self.
       
       llSetTimerEvent(2.5);
// Poll for emails. 
//(Yes, that is a retarded way on
//an event-based system!)
   }
   
   [[timer]]() {
       llGetNextEmail("", "");
// Check for email with any sender address and subject.
   }
   email(string time, string address, string subj
       , string message, integer num_left) {
       llSay(0, "You got mail! " +
             (string)num_left + " more mails.");
       llSay(0, llList2CSV([time, address, subj
       ,message]));
       if (num_left == 0) llSetTimerEvent(0.0);
// Stop timer when there's no more email.
   }
}
最終更新:2008年05月01日 03:21