2008年7月30日
一支Perl程式
寫了一支function(sendmail)與一支Perl程式,我先說明function的部分:
呼叫sendmail只要傳入陣列即可,陣列中有三個必要的KEY為EMAIL,TEMPLATE,TMP(均需為大寫),其餘的KEY則是配合樣版增減,如果樣版中有<!-USERNAM-!>則陣列中就必須有$mail_date[USERNAM],樣版的識別字必須與陣列的KEY大小寫一樣(強烈建議大寫),傳入的值以POST的方式送出到發信的genmail.pl,這個function在測試與正式主機上會有一行不一樣(參閱func內註解)如此將差異封裝在函數內,那開發的人就不需要每次都要去判斷程式執行階段是測試還是正式了,反正都是呼叫同一個function。
另外就是perl程式,目前我們對發送mail的PL程式均將樣版需要的KEY <!-KEY-!>訂死在程式內所以每次有新的需求均要重新寫一支PL,我將其改成由POST傳入的變數決定,這樣就不需要每次都要再寫一次Perl程式,日後程式管理上也比較容易。這支PERL目前在x.x.x.x/cgi-bin/newmail/SendMail/genmail.pl有空的人可以看一下,看看有沒有需要改進的地方~
補充說明
所以呼叫func時$mail_date[TEMPLATE]=” webevent/nbasoedm/nbasoedm.html.template”;,這樣程式上到正式區也不用改程式。
#!/usr/bin/perl
use CGI;
use lib "/usr/local/perl/modules";
$query = new CGI;
print $query->header;
foreach ($query->param()) {
my $value=$query->param($_);
if ($_ eq "TMP"){
$tmp="/tmp/".$value;
}elsif ($_ eq "TEMPLATE"){
$template="/usr/local/apache2/htdocs/newmail/SendMail/".$value;
#$template="/var/www/html/SendMail/".$value;
}else{
$data{$_}=$value;
}
}
##sending email
open (TEMPLATE, $template) || die("Cannot open html");
@lines = <TEMPLATE>;
close(TEMPLATE);
open (OUTFILE, ">$tmp") || die("Cannot open tmp error");
foreach $line (@lines) {
chomp $line;
my $x=change($line);
print OUTFILE "$x\n";
}
close(OUTFILE);
$cmd = "/usr/lib/sendmail -t < $tmp >& /dev/null";
system($cmd);
sub change{
foreach $key (keys %data) {
my $x="<!-$key-!>";
$_[0] =~ s/$x/$data{$key}/g;
}
return $_[0];
}
2008年7月11日
卡美麗 2.4 E

老婆問我為何要換大車(原本開ford 1.6)!其實我一直都想換大車,即使是高油價,環保意識高漲的年代,都不能影響我換車的意願,從小我就希望可以給家人舒適又安全的環境,所以大車是一定要的。我的認知是一個美滿幸福的家,一定要有大車大房子,或許這樣太重視物質,不過如果有能力有何不可呢?
每每看到路上騎著機車三四貼載著一家大小,心中總是告誡自己不可以讓自己的家人也過這樣的生活…
每當自己開車時總是非常開心因為我不用羨慕別人,自己有能力滿足自己的心願,沒有任何事比這更快樂~看看Ford New Mondeo - 工作篇的廣告,內心也跟著激昂~
20080711 工作心得
今日處理發送pda與shell介面發現中文字會有問題如『總』的ascii為C1 60,而60等於『`』導致命令列會斷行。
請青山從OS層面處理調整
vi /etc/sysconfig/i18n
不過php透過SYSTEM()傳遞中文的問題不能解決,必須使用escapeshellcmd(),方可解決~
$cmd = "./CallBuddy_event.sh \"".$title."\" \"".$freeid."\" \"".$msgbody ."\"";
$cmd = "./CallBuddy_event.sh \"".$title."\" \"".$freeid."\" \"".escapeshellcmd($msgbody) ."\"";





