diff --git a/src/psm/Txtmsg/CarrierSMS.php b/src/psm/Txtmsg/CarrierSMS.php new file mode 100644 index 00000000..ed201fbf --- /dev/null +++ b/src/psm/Txtmsg/CarrierSMS.php @@ -0,0 +1,121 @@ +. + * + * Determining your mobile device email address: + * 1. Send a text message from your mobile device to an email account. + * The "From" address in the email should be your device's gateway email address. + * + * 2. A well maintained "Email-To-SMS Database" of mobile carrier gateways is + * available at "http://avtech.com/Support/Email/index.htm" + * + * @author Glen Arason + * @copyright Copyright (c) 2015 ITIStudios + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: v2.0.0 + * @link http://www.canadiandomainregistry.ca + * + */ + +namespace psm\Txtmsg; + +class CarrierSMS extends Core { + // ========================================================================= + // [ Fields ] + // ========================================================================= + public $gateway = 0; + public $resultcode = 0; + public $resultmessage = ""; + public $success = false; + public $successcount = 0; + + public function sendSMS($status,$server='') { + // Create new mail object + $mailObj = psm_build_mail(); + + // Set some email headers + $mailObj->XMailer = "SMS"; + $mailObj->AltBody = null; // if not null a multi-part message is created. + + // Check and assign From address. + // "$this->originator" is any valid email address entered in the SMS "Sender's phone number" + // field and can be used as the "From:" email address for the sms text message. + // Rem: phpmailer ValidateAddress() is buggy so I'm using php's filter_var() instead. + $from = filter_var(strtolower($this->originator), FILTER_VALIDATE_EMAIL); + if( $from === false ) { // Get "Email From" address + $from = filter_var(strtolower(psm_get_conf('email_from_email')), FILTER_VALIDATE_EMAIL); + } + + if(is_bool($status) && is_array($server)){ // If Not a "Test" message. + $br = array('
','
'); $nl = "\n"; + // Available message length = +/- 155 minus (from email address length) minus (subject length) + $Body = psm_parse_msg($status, "carrier", $server); + $Subject = psm_parse_msg($status, "carrier_subject", $server); + + // The txt message must have new lines not line breaks. + $Body = str_replace($br,$nl, $Body); + $Subject = str_replace($br,$nl, $Subject); + + // User configureable log entries + $logMsg = psm_parse_msg($status, "carrier_log", $server); + $this->resultmessage = $logMsg; + + $mailObj->Body = $Body; + $mailObj->Subject = $Subject; + + foreach($this->recipients as $value) { + $to = filter_var(strtolower($value), FILTER_VALIDATE_EMAIL); + // XOR result codes for potential future use. + if(!$from) $this->resultcode = 1; + if(!$to) $this->resultcode = 2; + if($from == $to) $this->resultcode = 4; + + if(!$this->resultcode) { + if( !$mailObj->SetFrom($from,"",false) ){ $this->resultcode = 8; } + else if( !$mailObj->AddAddress($to) ){ $this->resultcode = 16; } + else{ + if(!$mailObj->Send()){ $this->resultcode = 32; } + $mailObj->ClearAddresses(); + } + } + switch ($this->resultcode) { + case 0: $this->success = true; $this->successcount +=1; break; + case 1: + case 8: $this->resultmessage = psm_get_lang('users', 'error_carriersms_from_email_invalid') . $logMsg; break; + case 2: $this->resultmessage = psm_get_lang('users', 'error_carriersms_to_email_invalid') . " ($to) " . $logMsg; break; + case 4: $this->resultmessage = psm_get_lang('users', 'error_carriersms_not_unique') . " ($to) = ($from) " . $logMsg; break; + case 16: $this->resultmessage = psm_get_lang('users', 'error_carriersms_to_email_invalid') . " ($to) " . $logMsg; break; + case 32: $this->resultmessage = psm_get_lang('config', 'sms_error') . " : " . $mailObj->ErrorInfo . $logMsg; break; + default: break; + } + } + }else{ // A test message is being sent/tested + $mailObj->Body = $status; + if($from !== false){ + $mailObj->SetFrom($from,"",false); + $mailObj->AddAddress($this->recipients[0]); + $this->success = $mailObj->Send(); + if(!$this->success && $mailObj->ErrorInfo != ""){ + $GLOBALS['sm_lang']['config']['sms_error']=$mailObj->ErrorInfo; + } + } + } + return $this->success; + } +}