Changeset 5130 for trunk/services/class.mail.php
- Timestamp:
- 11/03/11 11:13:40 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/services/class.mail.php
r5068 r5130 2 2 /** 3 3 * 4 * Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 5 * 6 * This program is free software; you can redistribute it and/or modify it under 7 * the terms of the GNU Affero General Public License version 3 as published by 8 * the Free Software Foundation with the addition of the following permission 9 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED 10 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 11 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. 12 * 13 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 * details. 17 * 18 * You should have received a copy of the GNU Affero General Public License 19 * along with this program; if not, see www.gnu.org/licenses or write to 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 * MA 02110-1301 USA. 22 * 23 * This code is based on the OpenXchange Connector and on the Prognus pSync 24 * Connector both developed by the community and licensed under the GPL 25 * version 2 or above as published by the Free Software Foundation. 4 * Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 26 19 * 27 20 * You can contact Prognus Software Livre headquarters at Av. Tancredo Neves, 28 * 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at21 * 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at 29 22 * e-mail address prognus@prognus.com.br. 30 23 * 31 * Serviço de email 32 * 33 * @package Services 24 * 25 * @package MailService 34 26 * @license http://www.gnu.org/copyleft/gpl.html GPL 35 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 27 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 28 * @sponsor Caixa EconÃŽmica Federal 36 29 * @version 1.0 37 * @s ponsor Caixa Econômica Federal30 * @since 2.4.0 38 31 */ 39 32 40 41 if( !function_exists( 'zend_include' ) ) 33 require_once ( $_SESSION['rootPath'].'/library/mime/mimePart.php' ); 34 require_once ( $_SESSION['rootPath'].'/library/mime/mime.php' ); 35 36 37 class MailService 42 38 { 43 function zend_include( $path ) 44 { 45 set_include_path( LIBRARY ); 46 require_once( $path ); 47 restore_include_path(); 48 } 49 } 50 51 52 zend_include( 'Zend/Mail.php' ); 53 54 55 /** 56 * Serviço de email 57 * 58 * Classe responsável pelas operações de email 59 * 60 * @package Service 61 * @license http://www.gnu.org/copyleft/gpl.html GPL 62 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 63 * @sponsor Caixa Econômica Federal 64 * @version 1.0 65 */ 66 class MailService extends Zend_Mail /*implements ConfigurationService, HookableService*/ 67 { 68 static $configuration = array( 'host' => '', 'port' => '', 'username' => '', 'password' => '' ); 69 70 71 /** 72 * Construtor da classe 73 * 74 * @license http://www.gnu.org/copyleft/gpl.html GPL 75 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 76 * @sponsor Caixa Econômica Federal 77 * @param string $config 78 */ 39 static $configuration = array( 'host' => '', 'port' => '', 'username' => '', 'password' => '' , 'auth' => ''); 40 protected $mail; 41 protected $smtpConfig; 42 protected $arrayFields = array(); 43 79 44 public function __construct( $config = null) 80 45 { 46 $this->mail = new Mail_mime(); 47 81 48 if( !$config ) 82 49 { … … 89 56 self::$configuration['host'] = $emailadmin['smtpServer']; 90 57 self::$configuration['port'] = $emailadmin['smtpPort']; 91 92 // self::$configuration['username'] = $emailadmin['user']; 93 // self::$configuration['password'] = $emailadmin['pass']; 94 // self::$configuration['name'] = $emailadmin['name']; 95 // self::$configuration['type'] = 'SMTP'; 96 97 // array_merge( $configuration, array( 'auth' => 'login' ) ); 98 99 zend_include( 'Zend/Mail/Transport/Smtp.php' ); 100 zend_include( 'Zend/Mail/Part.php' ); 101 set_include_path(LIBRARY); 102 parent::setDefaultTransport( new Zend_Mail_Transport_Smtp( self::$configuration['host'], self::$configuration ) ); 103 restore_include_path(); 58 self::$configuration['auth'] = $emailadmin['smtpAuth'] ? true : false; 59 self::$configuration['username'] = $emailadmin['imapAdminUsername']; 60 self::$configuration['password'] = $emailadmin['imapAdminPW']; 104 61 } 105 106 62 else 107 63 $this->configure( $config ); 108 } 109 110 111 /** 112 * Método que envia a mensagem 113 * 114 * @license http://www.gnu.org/copyleft/gpl.html GPL 115 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 116 * @sponsor Caixa Econômica Federal 117 * @param string $to 118 * @param string $from 119 * @param string $subject 120 * @param string $body 121 * @param string $bcc 122 * @param string $cc 123 * @param string $isHTML 124 */ 125 public function send( $to, $from, $subject, $body, $bcc = null, $cc = null, $isHTML = true ) 126 { 127 set_include_path( LIBRARY ); 64 65 } 66 67 public function sendMail( $to, $from, $subject, $body, $bcc = false, $cc = false, $isHTML = true ) 68 { 69 128 70 if( $body ) 129 71 { 130 if( $isHTML ) 131 parent::setBodyHtml( $body ); 132 133 else 134 parent::setBodyText( $body ); 72 if( $isHTML ) $this->mail->setHTMLBody( $body ); 73 else $this->mail->setTXTBody( $body ); 135 74 } 136 75 137 if( $subject ) 138 parent::setSubject( $subject ); 139 140 if( !$from ) 141 $from = $GLOBALS['phpgw']->preferences->values['email']; 142 143 parent::setFrom( $from, self::getNameByMail( $from ) ); 144 145 //pra nao ter que fazer os ifs acima... 146 $destTypes = array( 'to', 'bcc', 'cc' ); 147 148 foreach( $destTypes as $destination ) 149 { 150 $dest = $$destination; 151 152 if( $dest ) 153 { 154 if( !is_array( $dest ) ) 155 $dest = array( $dest ); 156 157 foreach( $dest as $d ) 158 { 159 $addDestination = 'add'.ucfirst($destination); 160 161 parent::$addDestination( $d, self::getNameByMail( $d ) ); 162 } 163 } 164 } 165 166 parent::send(); 167 restore_include_path(); 168 } 169 76 if( $subject ) $this->mail->setSubject ( $subject ); 77 78 if( !$from ) $from = $GLOBALS['phpgw']->preferences->values['email']; 79 80 $this->mail->setFrom( $from ); 81 82 $this->mail->addTo($to); 83 84 if( $bcc ) $this->mail->addBcc ($bbc); 85 86 if( $cc ) $this->mail->addCc ($cc); 87 88 $hdrs = $this->mail->headers($this->arrayFields); 89 90 require_once ($_SESSION['rootPath'].'/library/Mail/Mail.php'); 91 92 $mail_object =& Mail::factory("smtp", self::$configuration); 93 94 $recipients = ''; 95 96 if( $hdrs["To"] ) 97 $recipients .= $hdrs["To"]; 98 if( $hdrs["Cc"] && $recipients) 99 $recipients .= ', '.$hdrs["Cc"]; 100 if($hdrs["Cc"] && !$recipients) 101 $recipients = $hdrs["Cc"]; 102 103 if($hdrs["Bcc"]) 104 $arrayBcc = explode(',',$hdrs["Bcc"]); 105 106 if($recipients) 107 $sent = $mail_object->send($recipients, $hdrs , $this->mail->getMessageBody()); 108 109 if(isset($arrayBcc)){ 110 foreach ($arrayBcc as $bcc) 111 if($bcc) 112 $sent = $mail_object->send($bcc, $hdrs , $this->mail->getMessageBody()); 113 } 114 if($sent !== true) 115 return $sent->message; 116 117 return true; 118 } 170 119 171 /**172 * Método de configuração173 *174 * @license http://www.gnu.org/copyleft/gpl.html GPL175 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)176 * @sponsor Caixa Econômica Federal177 * @param string $config178 */179 120 public function configure( $config ) 180 121 { … … 182 123 183 124 foreach( $config as $key => $value ) 184 {185 125 if( $value && isset( self::$configuration[$key] ) ) 186 {187 126 self::$configuration[$key] = $value; 188 127 } 128 129 public function send() 130 { 131 require_once ($_SESSION['rootPath'].'/library/Mail/Mail.php'); 132 $hdrs = $this->mail->headers($this->arrayFields); 133 $mail_object =& Mail::factory("smtp", self::$configuration); 134 135 $recipients = ''; 136 137 if( $hdrs["To"] ) 138 $recipients .= $hdrs["To"]; 139 if( $hdrs["Cc"] && $recipients) 140 $recipients .= ', '.$hdrs["Cc"]; 141 if($hdrs["Cc"] && !$recipients) 142 $recipients = $hdrs["Cc"]; 143 144 if($hdrs["Bcc"]) 145 $arrayBcc = explode(',',$hdrs["Bcc"]); 146 147 if($recipients) 148 $sent = $mail_object->send($recipients, $hdrs , $this->mail->getMessageBody()); 149 150 if(isset($arrayBcc)){ 151 foreach ($arrayBcc as $bcc) 152 if($bcc) 153 $sent = $mail_object->send($bcc, $hdrs , $this->mail->getMessageBody()); 154 } 155 if($sent !== true) 156 return $sent->message; 157 158 return true; 159 } 160 161 public function addStringAttachment($file, $filename, $type, $encoding = 'base64', $disposition = 'attachment') 162 { 163 $this->mail->addAttachment($file, $type, $filename, false, $encoding, $disposition , $charset = '' , $language = '' , $location = '' , $n_encoding = 'base64'); 164 } 165 166 public function addFileAttachment($file, $filename, $type, $encoding = 'base64', $disposition = 'attachment') 167 { 168 $this->mail->addAttachment($file, $type, $filename, true, $encoding, $disposition, $charset = '' , $language = '' , $location = '' , $n_encoding = 'base64'); 169 } 170 171 public function addFileImage($file, $c_type='application/octet-stream', $name = '', $content_id = null) 172 { 173 $this->mail->addHTMLImage($file, $c_type, $name, true, $content_id ); 189 174 } 190 } 191 192 //hook 193 public function getNameByMail( $mail ) 194 { 195 return( null ); 196 } 197 198 public function getAttachment( $attachment ) 199 { 200 return( null ); 201 } 202 203 /** 204 * Adds attachment to the mail message 205 * 206 * @param string $file binary file 207 * @param string $filename file name 208 * @param string $type type example: image/gif 209 * @param Zend_Mime $disposition example: Zend_Mime::DISPOSITION_INLINE 210 * @param Zend_Mime $encoding example: Zend_Mime::ENCODING_BASE64 211 * @return bool 212 */ 213 public function addAttachment($file, $filename, $type, $encoding = null, $disposition = 'DISPOSITION_ATTACHMENT') 214 { 215 $part = new Zend_Mime_Part( $file ); 216 217 $part->type = $type; 218 $part->filename = $filename; 219 220 switch ($disposition) 175 176 public function addStringImage($file, $c_type='application/octet-stream', $name = '', $content_id = null) 177 { 178 $this->mail->addHTMLImage($file, $c_type, $name, false, $content_id ); 179 } 180 181 public function getMessage() 182 { 183 return $this->mail->getMessage(null,null,$this->arrayFields); 184 } 185 186 public function addTo($email) 187 { 188 $this->mail->addTo($email); 189 } 190 191 public function addCc($email) 192 { 193 $this->mail->addCc($email); 194 } 195 196 public function addBcc($email) 197 { 198 $this->mail->addBcc($email); 199 } 200 201 public function setSubject($subject) 221 202 { 222 case 'DISPOSITION_INLINE': 223 $part->disposition = Zend_Mime::DISPOSITION_INLINE; 224 break; 225 case 'DISPOSITION_ATTACHMENT': 226 $part->disposition = Zend_Mime::DISPOSITION_ATTACHMENT; 227 break; 228 default: 229 break; 203 $this->mail->setSubject($subject); 230 204 } 231 205 232 switch ($encoding)206 public function setFrom($email) 233 207 { 234 case 'ENCODING_7BIT': 235 $part->encoding = Zend_Mime::ENCODING_7BIT; 236 break; 237 case 'ENCODING_8BIT:': 238 $part->encoding = Zend_Mime::ENCODING_8BIT; 239 break; 240 case 'ENCODING_QUOTEDPRINTABLE:': 241 $part->encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE; 242 break; 243 default: 244 $part->encoding = Zend_Mime::ENCODING_BASE64; 245 break; 208 $this->mail->setFrom($email); 246 209 } 247 210 248 parent::addAttachment( $part ); 249 250 return; 251 } 211 public function setBodyText($data) 212 { 213 $this->mail->setTXTBody($data); 214 } 215 216 public function setBodyHtml($data) 217 { 218 $this->mail->setHTMLBody($data); 219 } 220 221 public function getBodyHtml() 222 { 223 return $this->mail->getHTMLBody(); 224 } 225 226 public function addHeaderField($field,$value) 227 { 228 $this->arrayFields[$field] = $value; 229 } 230 252 231 } 253 232
Note: See TracChangeset
for help on using the changeset viewer.