Difference between revisions of "Email"

From Second Life Wiki
Jump to: navigation, search
(referred reader to llEmail where my processing examples were moved to.)
Line 4: Line 4:
 
|p1_type=string|p1_name=time|p1_desc=In the <code>(string)[[llGetUnixTime]]</code> format
 
|p1_type=string|p1_name=time|p1_desc=In the <code>(string)[[llGetUnixTime]]</code> format
 
|p2_type=string|p2_name=address|p2_desc
 
|p2_type=string|p2_name=address|p2_desc
|p3_type=string|p3_name=subject|p3_desc
+
|p3_type=string|p3_name=subject|p3_desc|
|p4_type=string|p4_name=message|p4_desc
+
p4_type=string|p4_name=message|p4_desc
 
|p5_type=integer|p5_name=num_left|p5_desc=The number of emails left in the email queue
 
|p5_type=integer|p5_name=num_left|p5_desc=The number of emails left in the email queue
|event_desc=Triggered as a result of calling [[llGetNextEmail]] when there is an email that matches the optional filters used during the [[llGetNextEmail]] call. The email is removed from the email queue.
+
|event_desc=Triggered when task receives email
|event_footnote=The email queue is associated with the prim and any script in the prim has access to it. <br/> The prim's email address is it's key with "@lsl.secondlife.com" appended, <code>[[llGetKey]]() + "@lsl.secondlife.com"</code>{{Footnote|Beta grid email address are constructed differently: <code>[[llGetKey]]() + "@lsl." + grid + ".lindenlab.com"</code>; for the main beta grid set grid to {{String|aditi}}.|Beta grid email address are constructed differently: llGetKey() + {{String|@lsl.}} + grid + {{String|.lindenlab.com}}; for the main beta grid set grid to {{String|aditi}}.}}.
+
 
|constants
 
|constants
 
|spec
 
|spec
 
|caveats=
 
|caveats=
 
*The email queue is limited to 100 emails, any email after that is bounced.
 
*The email queue is limited to 100 emails, any email after that is bounced.
* Due to bug {{Jira|SVC-23}} (present since 2005), objects may stop receiving emails completely until either the region is restarted or the object crosses a region boundary (resetting the script doesn't help).  Emails sent may eventually be received after a restart/region-cross. Hence, don't rely on this event for reliable inter-region messaging.  
+
* Due to bug {{Jira|SVC-23}} (present since 2005), objects may stop receiving emails completely until either the region is restarted or the object crosses a region boundary (resetting the script doesn't help).  Emails sent may eventually be received after a restart/region-cross. Hence, don't rely on this event for reliable inter-region messaging.  
* The message field may have a maximum of 1000 characters. This count includes the header information (the from address, and the subject).
+
*The message field may have a maximum of 1000 characters. This count includes header information, which is pre-pended, and over which you have no control.
 
|constants
 
|constants
 
|examples=
 
|examples=
For tips on how to process incoming emails received by this event, see the entry on [[llEmail]]
+
 
 +
The message field for email sent by llEmail will look like this:
 +
 
 +
Object-Name: Name of the object that sent the email<br />
 +
Region: The name of the Region (PLUS, in round brackets, the region_corner _coordinates)<br />
 +
Local-Position: the local position of the object sending the email<br />
 +
 
 +
message_text
 +
 
 +
(Note: to be clear, the labels Object-Name:, etc, are actually returned to you as well.)
 +
 
 +
 
 +
To get just the pure message text, minus the headers, do this:
 +
 
 +
<lsl>
 +
message = llDeleteSubString(message, 0, llSubStringIndex(message, "\n\n") + 1);
 +
</lsl>
 +
 
 +
 
 +
To get just 1 of the header items, do this:
 +
 
 +
<lsl>
 +
list TempList = llParseStringKeepNulls(message, ["\n"], []);
 +
string objname = llList2String(TempList,0);
 +
string tmpregion = llList2String(TempList,1);
 +
string localpos = llList2String(TempList,2);
 +
</lsl>
 +
 
 +
To get a pure region name, do this:
 +
 
 +
<lsl>
 +
string right (string src, string divider) {
 +
 
 +
                integer iStart = llSubStringIndex( src, divider ) + 1;
 +
                string result = llGetSubString( src, iStart, llStringLength(src) - 1 ) ;
 +
      return result;
 +
}
 +
 
 +
string left (string src, string divider) {
 +
                integer iStart = llSubStringIndex( src, divider ) + 1;
 +
                string result = llGetSubString( src, 0, iStart -1) ;
 +
      return result;
 +
}
 +
 
 +
list TempList = llParseStringKeepNulls(message, ["\n"], []);
 +
string tmpregion = right(llList2String(TempList,1),": ");
 +
tmpregion = llStringTrim(left(tmpregion," ("),STRING_TRIM);
 +
</lsl>
 +
 
 +
 
 +
 
 +
This application uses email to have objects check with a central server to see if the owner has the latest version. In the objects:
 +
<lsl>
 +
string version = "1"; //
 +
string type = "lolcube";
 +
default
 +
{
 +
    on_rez(integer start_param)
 +
    {
 +
        llEmail("5a634b27-f032-283f-2df2-55ead7724b23@lsl.secondlife.com",
 +
            version,
 +
            (string)llGetOwner()+","+type);
 +
    }
 +
}</lsl>
 +
The server:
 +
<lsl>
 +
default
 +
{
 +
    state_entry()
 +
    {
 +
        llSetTimerEvent(15);
 +
    }
 +
   
 +
    timer()
 +
    {
 +
        llGetNextEmail("","");
 +
    }
 +
   
 +
    email( string time, string address, string version, string message, integer num_left )
 +
    {   
 +
        if ((integer)version < 2)
 +
        {
 +
            list info = llCSV2List(llDeleteSubString(message, 0, llSubStringIndex(message, "\n\n") + 1));
 +
            llGiveInventory(llList2Key(info,0),llList2String(info,1));
 +
        }
 +
       
 +
        integer i;
 +
        for (i = 0; i < num_left; i++)
 +
        {
 +
            llGetNextEmail("","");
 +
        }
 +
    }
 +
}
 +
</lsl>
 
|helpers
 
|helpers
 
|also_header
 
|also_header

Revision as of 12:12, 11 October 2008

Description

Event: email( string <span title="In the (string)llGetUnixTime format" style="border-bottom:1px dotted; cursor:help;">time, string address, string subject, string message, integer num_left ){ ; }</span>

Triggered when task receives email

• string time In the (string)llGetUnixTime format
• string address
• string subject
• string message
• integer num_left The number of emails left in the email queue

Caveats

  • The email queue is limited to 100 emails, any email after that is bounced.
  • Due to bug SVC-23 (present since 2005), objects may stop receiving emails completely until either the region is restarted or the object crosses a region boundary (resetting the script doesn't help). Emails sent may eventually be received after a restart/region-cross. Hence, don't rely on this event for reliable inter-region messaging.
  • The message field may have a maximum of 1000 characters. This count includes header information, which is pre-pended, and over which you have no control.
All Issues ~ Search JIRA for related Bugs

Examples

The message field for email sent by llEmail will look like this:

Object-Name: Name of the object that sent the email
Region: The name of the Region (PLUS, in round brackets, the region_corner _coordinates)
Local-Position: the local position of the object sending the email

message_text

(Note: to be clear, the labels Object-Name:, etc, are actually returned to you as well.)


To get just the pure message text, minus the headers, do this:

<lsl> message = llDeleteSubString(message, 0, llSubStringIndex(message, "\n\n") + 1); </lsl>


To get just 1 of the header items, do this:

<lsl> list TempList = llParseStringKeepNulls(message, ["\n"], []); string objname = llList2String(TempList,0); string tmpregion = llList2String(TempList,1); string localpos = llList2String(TempList,2); </lsl>

To get a pure region name, do this:

<lsl> string right (string src, string divider) {

               integer iStart = llSubStringIndex( src, divider ) + 1;
               string result = llGetSubString( src, iStart, llStringLength(src) - 1 ) ;
      return result;

}

string left (string src, string divider) {

               integer iStart = llSubStringIndex( src, divider ) + 1; 
               string result = llGetSubString( src, 0, iStart -1) ;
      return result;

}

list TempList = llParseStringKeepNulls(message, ["\n"], []); string tmpregion = right(llList2String(TempList,1),": "); tmpregion = llStringTrim(left(tmpregion," ("),STRING_TRIM); </lsl>


This application uses email to have objects check with a central server to see if the owner has the latest version. In the objects: <lsl> string version = "1"; // string type = "lolcube"; default {

   on_rez(integer start_param)
   {
       llEmail("5a634b27-f032-283f-2df2-55ead7724b23@lsl.secondlife.com",
           version,
           (string)llGetOwner()+","+type);
   }

}</lsl> The server: <lsl> default {

   state_entry()
   {
       llSetTimerEvent(15);
   }
   
   timer()
   {
       llGetNextEmail("","");
   }
   
   email( string time, string address, string version, string message, integer num_left )
   {    
       if ((integer)version < 2)
       {
           list info = llCSV2List(llDeleteSubString(message, 0, llSubStringIndex(message, "\n\n") + 1));
           llGiveInventory(llList2Key(info,0),llList2String(info,1));
       }
       
       integer i;
       for (i = 0; i < num_left; i++)
       {
           llGetNextEmail("","");
       }
   }

} </lsl>

See Also

Functions

•  llEmail
•  llGetNextEmail

Deep Notes

Signature

event void email( string time, string address, string subject, string message, integer num_left );