source: branches/feature-module-update/data/class/GC_SendMail.php @ 16302

Revision 16302, 6.3 KB checked in by naka, 14 years ago (diff)

GC_SendMailをMail_mime()に対応させる。

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7 
8require_once(dirname(__FILE__) . '/../module/Mail/Mail.php');
9require_once(dirname(__FILE__) . '/../module/Mail/mime.php');
10
11//--- テキスト/HTML メール送信
12class GC_SendMail {
13
14    var $to;            //  送信先
15    var $subject;       //  題名
16    var $body;          //  本文
17    var $cc;            // CC
18    var $bcc;           // BCC
19    var $replay_to;     // replay_to
20    var $return_path;   // return_path
21    var $arrEncode;
22    var $objMailMime;
23    var $arrTEXTEncode;
24    var $arrHTMLEncode;
25    var $objMail;
26           
27    // コンストラクタ
28    function GC_SendMail() {
29        $this->to = "";
30        $this->subject = "";
31        $this->body = "";
32        $this->cc = "";
33        $this->bcc = "";
34        $this->replay_to = "";
35        $this->return_path = "";
36        $this->arrEncode = array();
37        $this->host = SMTP_HOST;
38        $this->port = SMTP_PORT;
39        $this->objMailMime = new Mail_mime();
40        mb_language( "Japanese" );
41        $this->arrTEXTEncode['text_charset'] = "ISO-2022-JP";
42        $this->arrHTMLEncode['head_charset'] = "ISO-2022-JP";
43        $this->arrHTMLEncode['html_encoding'] = "ISO-2022-JP";
44        $this->arrHTMLEncode['html_charset'] = "ISO-2022-JP";
45        $arrHost = array(   
46                'host' => $this->host,
47                'port' => $this->port
48        );
49        //-- PEAR::Mailを使ってメール送信オブジェクト作成
50        $this->objMail =& Mail::factory("smtp", $arrHost);
51    }
52   
53    // 宛先の設定
54    function setTo($to, $to_name = "") {
55        $this->to = $this->getNameAddress($to_name, $to);
56    }
57   
58    // SMTPサーバの設定
59    function setHost($host) {
60        $this->host = $host;
61        $arrHost = array(   
62                'host' => $this->host,
63                'port' => $this->port
64        );
65        //-- PEAR::Mailを使ってメール送信オブジェクト作成
66        $this->objMail =& Mail::factory("smtp", $arrHost);
67       
68    }
69   
70    // SMTPポートの設定
71    function setPort($port) {
72        $this->port = $port;
73        $arrHost = array(   
74                'host' => $this->host,
75                'port' => $this->port
76        );
77        //-- PEAR::Mailを使ってメール送信オブジェクト作成
78        $this->objMail =& Mail::factory("smtp", $arrHost);     
79    }
80   
81    // 名前<メールアドレス>の形式を生成
82    function getNameAddress($name, $mail_address) {
83            if($name != "") {
84                // 制御文字を変換する。               
85                $_name = $name;             
86                $_name = ereg_replace("<","<", $_name);
87                $_name = ereg_replace(">",">", $_name);
88                if(OS_TYPE != 'WIN') {
89                    // windowsでは文字化けするので使用しない。
90                    $_name = mb_convert_encoding($_name,"JIS",CHAR_CODE);   
91                }
92                $_name = mb_encode_mimeheader($_name);
93                $name_address = "\"". $_name . "\"<" . $mail_address . ">";
94            } else {
95                $name_address = $mail_address;
96            }
97            return $name_address;
98    }
99   
100    function setItem( $to, $subject, $body, $fromaddress, $from_name, $reply_to="", $return_path="", $errors_to="", $bcc="", $cc ="" ) {
101        $this->setBase($to, $subject, $body, $fromaddress, $from_name, $reply_to, $return_path, $errors_to, $bcc, $cc);
102    }
103   
104    function setItemHtml( $to, $subject, $body, $fromaddress, $from_name, $reply_to="", $return_path="", $errors_to="", $bcc="", $cc ="" ) {
105        $this->setBase($to, $subject, $body, $fromaddress, $from_name, $reply_to, $return_path, $errors_to, $bcc, $cc);
106    }
107
108    /*  ヘッダ等を格納
109         $to            -> 送信先メールアドレス
110         $subject       -> メールのタイトル
111         $body          -> メール本文
112         $fromaddress   -> 送信元のメールアドレス
113         $header        -> ヘッダー
114         $from_name     -> 送信元の名前(全角OK)
115         $reply_to      -> reply_to設定
116         $return_path   -> return-pathアドレス設定(エラーメール返送用)
117         $cc            -> カーボンコピー
118         $bcc           -> ブラインドカーボンコピー
119    */     
120    function setBase( $to, $subject, $body, $fromaddress, $from_name, $reply_to="", $return_path="", $errors_to="", $bcc="", $cc ="" ) {
121        // 宛先設定
122        $this->to            = $to;
123        // 件名設定
124        $this->subject       = mb_encode_mimeheader($subject);
125        // 本文設定(iso-2022-jpだと特殊文字が?で送信されるのでJISを使用する)
126        $this->body          = mb_convert_encoding( $body, "JIS", CHAR_CODE);
127        // 送信元設定
128        $this->from = $this->getNameAddress($from_name, $fromaddress);
129        // 返信先設定
130        if($reply_to != "") {
131            $this->reply_to = $reply_to;           
132        }       
133        // CC設定
134        if($cc != "") {
135            $this->cc = $cc;   
136        }
137        // BCC設定
138        if($bcc != "") {
139            $this->bcc = $bcc;         
140        }
141        // Errors-Toは、ほとんどのSMTPで無視され、Return-Pathが優先されるためReturn_Pathに設定する。
142        if($errors_to != "") {
143            $this->return_path = $errors_to;
144        } else if($return_path != "") {
145            $this->return_path = $return_path;
146        } else {
147            $this->return_path = $fromaddress;
148        }
149    }
150   
151    // ヘッダーを返す
152    function getHeader() {
153        //-- 送信するメールの内容と送信先
154        $arrHeader['To'] = $this->to;
155        $arrHeader['Subject'] = $this->subject;
156        $arrHeader['From'] = $this->from;
157        $arrHeader['Return-Path'] = $this->return_path;
158       
159        if($this->reply_to != "") {
160            $arrHeader['Reply'] = $this->reply_to;
161        }
162       
163        if($this->cc != "") {
164            $arrHeader['Cc'] = $this->cc;
165        }
166       
167        if($this->bcc != "") {     
168            $arrHeader['Bcc'] = $this->bcc;
169        }
170        return $arrHeader;
171    }
172   
173    //  TXTメール送信を実行する
174    function sendMail() {
175        $this->objMailMime->setTXTBody($this->body);
176        $body = $this->objMailMime->get($this->arrTEXTEncode);
177        $header = $this->getHeader();
178        // メール送信
179        $result = $this->objMail->send($this->to, $header, $body);           
180        if (PEAR::isError($result)) {
181            GC_Utils_Ex::gfPrintLog($result->getMessage());
182            GC_Utils_Ex::gfDebugLog($header);
183            return false;       
184        }
185        return true;       
186    }
187   
188    // HTMLメール送信を実行する
189    function sendHtmlMail() {
190        $this->objMailMime->setHTMLBody($this->body);
191        $body = $this->objMailMime->get($this->arrHTMLEncode);
192        $header = $this->getHeader();
193        // メール送信
194        $result = $this->objMail->send($this->to, $header, $body);           
195        if (PEAR::isError($result)) {
196            GC_Utils_Ex::gfPrintLog($result->getMessage());
197            GC_Utils_Ex::gfDebugLog($header);   
198            return false;
199        }
200        return true;
201    }
202}
203
204?>
Note: See TracBrowser for help on using the repository browser.