ソラマメブログ
< 2025年05月 >
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Mail

2007年05月01日

Emailを送るモジュール(1)

sendEmailModule links
Emailを送るモジュール(1)

eMailを送るscriptモジュールを作りました。
(ソースコードはエントリーの一番後ろに)

llEmail("emailアドレス",”タイトル”,"本文");
だけでメール送信できるのになぜわざわざそんな物を作るかというと
メール送信には20秒程度時間がかかり、
ただ送信するだけではその間プログラムが停止してしまうからです。
今朝のエントリーにもその辺り記述があります。

モジュール化(と自分が勝手に呼んでいるだけですが)して、
メインのscriptとは別scriptでメールを送信することで
メール送信時の"固まり"を回避することができます。

さて、プログラムが停止する様子を動画でキャプチャするために、
こんなオブジェクトを作りました。
Emailを送るモジュール(1)
こんなのです。

Emailを送るモジュール(1)
一応裏も。

実際の封筒をスキャンしてPhotoShopで適当にいじったのですが…
もっとかわいい封筒を常備しておきたいものですね。

(ちなみにこのオブジェクトはBoxではなくてCylinder2個でできています。
説明しませんが、ちょっとしたこだわりです。)

動画での動作サンプルです。

色が薄いほうの手紙にはタッチすると今回作成したモジュールを使用して
メールを送るプログラムが書いてあります。
色が濃いほうの手紙はタッチすると普通にllEmail()で
メールを送るプログラムが書いてあります。

両方の封筒には、timerイベントを用いて、
その場で回転移動するプログラムも書いてあります。

チャットでしゃべっているのは色が薄い封筒のみです。
どちらも送信に20秒程度かかるのはかわらないですが、
色が濃い方はその間アニメーションが止まってしまいます。

◆色が薄い封筒に仕込んであるscript
 色が濃い封筒にはllMessageLinkedの命令部分がコメントアウトされ
 一行上のllEmailのコメントを解除して使っています。
vector pos;
default{
state_entry(){
pos = llGetPos();
llSetTimerEvent(0.1);
}
touch_start(integer total_number){
string address = "example@example.com";
string title = "mail title";
string body = "mailbody\nmailbody\nmailbody\nmailbody";
//llEmail(address,title,body);
llMessageLinked(LINK_THIS,0,"harayoki.sendEMail"+" "+llDumpList2String([address,title,body],"\n") ,NULL_KEY);
}
timer(){
float time = llGetTime()*2;
llSetPos(pos + <llSin(time),0,llCos(time)>/4);
}
}


このモジュールを使用する際は touch_startイベントの中身をそのままコピペして
送信先emailアドレス(address)、タイトル(title)、本文(body)を
それぞれ書き換えて使ってください。

なお、モジュール化と自分が言ってるのは
llMessageLinkedを用いて別scriptの関数を利用する事をさしています。
(でも、llMessageLinked以外でモジュール化が実現できるならそうしたいなあ…)
モジュールはいろいろなオブジェクトを作成する際に
同じものを何度も再利用します。

Emailを送るモジュール(1)
mainというscriptが上記のコードで、もうひとつが下記のモジュールコードになります。

◆モジュールのソース 通常編集する必要はありません。
//SendEmail Module ver 1.00
//by harayoki 2007/5/1
integer debug = TRUE;
Trace(string s){
if(debug) llOwnerSay(s);
}
string COMMAND_NAME = "harayoki.sendEMail";
integer ARGUMNET_LENGTH = 1;
string ARGUMENT_SEP = " ";
string MAIL_SEP = "\n";
SendEMail(list l){
list arg = MyString2List(llList2String(l,1),MAIL_SEP,4);
string address = llList2String(arg,0);
string title = llList2String(arg,1);
string body =llList2String(arg,2);
Trace("SendEMail start\naddress:"+address+"\ntitle:"+title+"\nbody:"+body);
llEmail(address,title,body);
Trace("SendEMail end");
}
list MyString2List(string s,string sep,integer len){
list res = [];
list l = llParseString2List(s,[sep],[]);
if(len<0){
res = l;
}else{
integer i;
for(i=0;i<-1+len;i++){
res += [llList2String(l,i)];
}
res += llDumpList2String(llList2List(l,i,-1),sep);
}
//Trace(":"+llDumpList2String(res,","));
return res;
}
default{
link_message(integer sender,integer num,string s,key id){
if(llSubStringIndex(s,COMMAND_NAME)==0) SendEMail(MyString2List(s,ARGUMENT_SEP,ARGUMNET_LENGTH+1));
}
}


※scriptの利用は自己責任でお願いします。

このように複雑なコードを書かずとも、
今回のメール送信機能は実現できるのですが
モジュールは他のモジュールといくつも同時に扱うことを
考慮して作られているのでややこしい感じになっています。


とことでllEmailって同時送信できないんですね。
複数のあて先にメールしたい場合は何度も送れと書いてあります。
http://rpgstats.com/wiki/index.php?title=LlEmail
これもSPAM対策?

同じカテゴリー(Email送信)の記事
 DL:Emailを送るモジュール(2) (2007-05-15 06:30)
Posted by harayoki at 21:12│Comments(0)Email送信
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。