2 require_once('Mail/mimeDecode.php');
\r
3 require_once('Mail/RFC822.php');
\r
4 require_once('Mail.php');
\r
5 require_once(dirname(__FILE__)."/zubora.phpl");
\r
9 var $prefix = PREFIX;
\r
10 var $session = array();
\r
11 var $writeReady = false;
\r
14 function DBWriter(){
\r
15 $this->zdb = new ZuboraDB();
\r
17 function decodeMail($mail){
\r
19 $params['include_bodies'] = true;
\r
20 $params['decode_bodies'] = true;
\r
21 $params['decode_headers'] = true;
\r
22 $decoder = new Mail_mimeDecode($mail);
\r
24 $mail = $decoder->decode($params);
\r
25 }catch(Exception $e) {
\r
26 $this->ERROR .= "メール解析時にエラーが発生しました。(".$e->getMessage().")\n";
\r
29 if(!isSet($mail->headers['from']) or !isSet($mail->headers['to']) or !isSet($mail->headers["subject"])){
\r
30 $this->ERROR .= "必要な情報がメールから取得できませんでした。\n";
\r
33 $from = Mail_RFC822::parseAddressList($mail->headers['from']);
\r
34 $from = $from[0]->mailbox.'@'.$from[0]->host;
\r
35 $to = Mail_RFC822::parseAddressList($mail->headers['to']);
\r
36 $to = $to[0]->mailbox.'@'.$to[0]->host;
\r
37 list($mbox,$domain) = explode("@",$to);
\r
38 list($prefix,$book,$himoku) = explode(PREFIX_SEP_MAIL,$mbox);
\r
39 $price = $mail->headers["subject"];
\r
40 $this->checkPrefix($prefix);
\r
41 $this->checkBook($book,$domain);
\r
42 $this->checkHimokuPrice($book,$himoku,$price);
\r
43 $this->checkUser($book,$from);
\r
44 if($this->ERROR != ""){
\r
46 $headers = 'From: '.$to."\r\n".
\r
47 'Reply-To: '.$to."\r\n".
\r
48 'X-Mailer: PHP/'. phpversion();
\r
49 //常にメインメールアドレスに送信(携帯メールだと文字化けやサーバーにはねられる可能性がある為)$this->zdb->getMainMailAddr($from)
\r
50 mail($from,mb_encode_mimeheader(mb_convert_encoding("ズボラ家計簿エラー!", "ISO-2022-JP","AUTO")),mb_convert_encoding($this->ERROR, "ISO-2022-JP","AUTO"),$headers,"-f$from");
\r
51 //このエラーをもっと分かりやすくする。
\r
54 $this->session["note"] = trim(mb_convert_encoding($mail->body,"UTF-8","ISO-2022-JP"));
\r
58 function checkPrefix($prefix){
\r
59 if(PREFIX != $prefix){
\r
60 $this->ERROR .= "メールアドレスのプレフィクス指定が間違っています。(".$prefix.")\n";
\r
62 $this->session["prefix"] = $prefix;
\r
65 function checkBook($book,$domain){
\r
66 $book = $this->zdb->getBook($book,$domain);
\r
67 if(false === $book){
\r
68 $this->ERROR .= "投稿アドレスドメインに対応づけられた家計簿が存在しません。\n";
\r
70 $this->session["book"] = $book["book"];
\r
73 function checkHimokuPrice($book,$himoku,$price){
\r
74 if(!is_numeric($price)){
\r
75 $this->ERROR .= "金額欄が数字ではありません。(".$price.")\n";
\r
78 $price = intval($price);
\r
80 $himoku = $this->zdb->getHimoku($book,$himoku);
\r
81 if(false === $himoku){
\r
82 $this->ERROR .= "存在しない費目が指定されています。(".$himoku.")\n";
\r
84 if(($himoku["plus"] == true and $price < 0)or($himoku["plus"] == false and $price > 0)){
\r
85 $price = -1 * $price;
\r
87 $this->session["price"] = $price;
\r
88 $this->session["himoku"] = $himoku["himoku"];
\r
91 function checkUser($book,$from){
\r
92 $mail = $this->zdb->getMainMailAddr($from);
\r
93 $isSubscribed = $this->zdb->isSubscribed($book,$mail);
\r
94 if(false === $mail){
\r
95 $this->ERROR .= "この家計簿で有効な送信メールアドレスではありません。(".$from.")\n";
\r
98 $this->session["mail"] = $mail;
\r
100 $this->ERROR .= "この家計簿に関連付けれていないアドレスから送信されました。(".$mail.")\n";
\r
104 function doInsert(){
\r
105 if(!$this->zdb->addBalance($this->session["book"],$this->session["himoku"],$this->session["price"],$this->session["mail"],$this->session["note"])){
\r
106 $this->ERROR .= $zdb->ERROR;
\r
108 file_put_contents(dirname(__FILE__)."/log.txt",$this->ERROR."\nsuccess\n\n"."ユーザ: ".$this->session["mail"]."
\r
109 金額: ".$this->session["price"]."
\r
110 費目: ".$this->session["himoku"]."
\r
111 ノート: ".$this->session["note"]."\n\n");
\r
113 function printError(){
\r
114 file_put_contents(dirname(__FILE__)."/log.txt","error\n\n".$this->ERROR);
\r
118 $dbw = new DBWriter();
\r
119 if($dbw->decodeMail(file_get_contents('php://stdin'))){
\r
122 $dbw->printError();
\r