00001 <?php
00011 class ppMailer extends Plugin
00012 {
00013 var $loaded;
00014
00015 function ppMailer() {
00016 $this->Plugin();
00017 $this->loaded = false;
00018 }
00019
00020 function _load()
00021 {
00022 if($this->loaded) return;
00023 require_once(DIR_FS_PRONTO.DS.'extlib'.DS.'swift'.DS.'Swift.php');
00024 $this->loaded = true;
00025 }
00026
00034 function create($to='', $subject='', $body='', $fromemail='', $fromname='')
00035 {
00036 $this->_load();
00037 $swift = new ppMailer_Message();
00038
00039 if(defined('SMTP_HOST') && SMTP_HOST != '') {
00040 require_once(DIR_FS_PRONTO.DS.'extlib'.DS.'swift'.DS.'Swift'.DS.'Connection'.DS.'SMTP.php');
00041 $port = defined('SMTP_PORT') ? SMTP_PORT : 25;
00042 $mode = SWIFT_SMTP_ENC_OFF;
00043 if(defined('SMTP_ENC')) switch(SMTP_ENC) {
00044 case 'TLS': $mode = SWIFT_SMTP_ENC_TLS; break;
00045 case 'SSL': $mode = SWIFT_SMTP_ENC_SSL; break;
00046 }
00047 $conn = new Swift_Connection_SMTP(SMTP_HOST, $port, $mode);
00048 } else {
00049 require_once(DIR_FS_PRONTO.DS.'extlib'.DS.'swift'.DS.'Swift'.DS.'Connection'.DS.'NativeMail.php');
00050 $conn = new Swift_Connection_NativeMail();
00051 }
00052
00053 if(defined('SMTP_USER') && SMTP_USER != '') {
00054 $conn->setUsername(SMTP_USER);
00055 $conn->setPassword(SMTP_PASS);
00056 }
00057
00058 $swift->swift = new Swift($conn);
00059
00060 $swift->message = new Swift_Message($subject);
00061 $swift->message->setCharset(defined('CHARSET') ? CHARSET : 'UTF-8');
00062 if($body) $swift->add_text_part($body);
00063
00064 $swift->recipients = new Swift_RecipientList();
00065
00066
00067 $swift->set_from(defined('ADMIN_EMAIL') ? ADMIN_EMAIL : 'donotreply@example.com');
00068 if($fromemail) {
00069 $swift->set_from($fromemail, $fromname);
00070 }
00071
00072 if(is_array($to)) {
00073 foreach($to as $email=>$name) {
00074 if(is_numeric($email)) {
00075 $swift->add_recipient($name);
00076 } else {
00077 $swift->add_recipient($email, $name);
00078 }
00079 }
00080 } else if($to) {
00081 $swift->add_recipient($to);
00082 }
00083
00084 return $swift;
00085 }
00086
00092 function send($to='', $subject='', $body='', $fromemail='', $fromname='')
00093 {
00094 $this->_load();
00095 $mail = $this->create($to, $subject, $body, $fromemail, $fromname);
00096 return $mail->send();
00097 }
00098 }
00099
00105 class ppMailer_Message
00106 {
00107 var $swift;
00108 var $message;
00109 var $recipients;
00110
00111 var $callback;
00112
00113 var $from;
00114 var $reply_to;
00115 var $charset;
00116
00120 function add_part($content, $mime='text/plain')
00121 {
00122 $this->message->attach(new Swift_Message_Part($content, $mime));
00123 }
00124 function add_html_part($content)
00125 {
00126 $this->add_part($content, 'text/html');
00127 }
00128 function add_text_part($content)
00129 {
00130 $this->add_part($content, 'text/plain');
00131 }
00132
00136 function add_recipient($email, $name='')
00137 {
00138 if($name) {
00139 $this->recipients->addTo($email, $name);
00140 } else {
00141 $this->recipients->addTo($email);
00142 }
00143 }
00144 function add_to($email, $name='')
00145 {
00146 $this->add_recipient($email, $name);
00147 }
00148 function add_cc($email, $name='')
00149 {
00150 if($name) {
00151 $this->recipients->addCc($email, $name);
00152 } else {
00153 $this->recipients->addCc($email);
00154 }
00155 }
00156 function add_bcc($email, $name='')
00157 {
00158 if($name) {
00159 $this->recipients->addBcc($email, $name);
00160 } else {
00161 $this->recipients->addBcc($email);
00162 }
00163 }
00164
00168 function set_from($email, $name='')
00169 {
00170 if($name) {
00171 $this->from = new Swift_Address($email, $name);
00172 } else if($email) {
00173 $this->from = new Swift_Address($email);
00174 }
00175 }
00176
00180 function set_reply_to($email, $name='')
00181 {
00182 if($name) {
00183 $this->reply_to = new Swift_Address($email, $name);
00184 } else if($email) {
00185 $this->reply_to = new Swift_Address($email);
00186 }
00187 }
00188
00192 function add_attachment($filepath, $filename='', $mime='application/octet-stream')
00193 {
00194 if(empty($filename)) $filename = basename($filepath);
00195 $this->message->attach(new Swift_Message_Attachment(new Swift_File($filepath), $filename, $mime));
00196 }
00197
00204 function add_embedded_image($filepath, $filename='', $cid=null, $mime='application/octet-stream')
00205 {
00206 if(empty($filename)) $filename = basename($filepath);
00207 $img = new Swift_Message_Image(new Swift_File($filepath), $filename, $mime, $cid);
00208 return $this->message->attach($img);
00209 }
00210
00214 function add_header($name, $value)
00215 {
00216 $this->message->headers->set($name, $value);
00217 }
00218 function get_header($name)
00219 {
00220 return $this->message->get($name);
00221 }
00222
00232 function set_display_callback($fn)
00233 {
00234 $this->callback = $fn;
00235 }
00236
00240 function send()
00241 {
00242 if(defined('MAILER_DISABLE') && MAILER_DISABLE === true) return true;
00243 if($this->callback) {
00244 require_once(DIR_FS_PRONTO.DS.'extlib'.DS.'swift'.DS.'Swift'.DS.'Plugin'.DS.'VerboseSending.php');
00245 require_once('_mailer_callback.php');
00246 $view = new ppMailer_Display_Callback();
00247 $view->cb_func = $this->callback;
00248 $this->swift->attachPlugin(new Swift_Plugin_VerboseSending($view), 'verbose');
00249 }
00250 if($this->reply_to) $this->message->setReplyTo($this->reply_to);
00251 return !!$this->swift->send($this->message, $this->recipients, $this->from);
00252 }
00253
00260 function batch_send()
00261 {
00262 if(defined('MAILER_DISABLE') && MAILER_DISABLE === true) return true;
00263 if($this->callback) {
00264 require_once(DIR_FS_PRONTO.DS.'extlib'.DS.'swift'.DS.'Swift'.DS.'Plugin'.DS.'VerboseSending.php');
00265 require_once('_mailer_callback.php');
00266 $view = new ppMailer_Display_Callback();
00267 $view->cb_func = $this->callback;
00268 $this->swift->attachPlugin(new Swift_Plugin_VerboseSending($view), 'verbose');
00269 }
00270
00271
00272
00273 require_once(DIR_FS_PRONTO.DS.'extlib'.DS.'swift'.DS.'Swift'.DS.'Plugin'.DS.'AntiFlood.php');
00274 $this->swift->attachPlugin(new Swift_Plugin_AntiFlood(200, 10), 'anti-flood');
00275
00276 if($this->reply_to) $this->message->setReplyTo($this->reply_to);
00277 return !!$this->swift->batchSend($this->message, $this->recipients, $this->from);
00278 }
00279
00280 }
00281
00282 ?>