2010-06-20 46 views
2

我做了一个PHP类,大大简化了用PHP发送短信。我知道这不是真的“帮助我!”类型问题本身,但我想分享代码,因为我发现它是非常有用的。你可以随意做任何你想要的代码。你甚至可以到处告诉人们你做到了。只是不要指责我是否有任何问题。有没有人想发送来自PHP的短信?

事不宜迟:

<?php 

// Carrier email suffixes 
define('ATT',     'txt.att.net'); 
define('SPRINT',    'messaging.sprintpcs.com'); 
define('TMOBILE',    'tmomail.net'); 
define('US_CELLULAR',   'email.uscc.net'); 
define('VERIZON',    'vtext.com'); 
define('VIRGIN_MOBILE',  'vmobl.com'); 

// Message parameters 
define('MAX_SMS_LENGTH',  140); 
define('DEFAULT_CELL_SENDER', '[email protected]'); 

class Cell 
{ 
    public static function send($pNumber, $pCarrier, $pMessage) 
    { 
     // Keep a notifier of whether the message was sent or not 
     $Success = true; 

     // Define the recipient address 
     $Recipient = $pNumber . '@' . $pCarrier; 

     // Find out how many message will have to be sent 
     $MessageCount = ceil(strlen($pMessage)/MAX_SMS_LENGTH); 

     for ($i = 0; $i < $MessageCount; $i++) 
     { 
      // Calculate the subset of the entire message that can be sent at once 
      $StartIndex = $i * MAX_SMS_LENGTH; 
      $Message = stripslashes(substr($pMessage, $StartIndex, MAX_SMS_LENGTH)); 

      // Display page numbers on messages that span multiple iterations 
      if ($MessageCount > 1) 
      { 
       $Message .= ' (' . ($i + 1) . '/' . $MessageCount . ')'; 
      } 

      // Send the message 
      $Success &= mail($Recipient, null, $Message, 'From: ' . DEFAULT_CELL_SENDER); 
     } 

     return $Success;   
    } 
} 

?> 

它会自动处理跨多个短信寻呼。另外,我知道短信通常限制在160个字符以内,而不是140个。我将限制缩小了20个字符,为电子邮件地址留下了空间。

我希望这可以帮助那里的人。干杯!

+8

可能更适合像PHPClasses这样的网站,因为SO是一个问答网站。 – 2010-06-20 06:49:05

+0

@RussellDias,在这里给你的脚本主要是因为我们可以讨论这些脚本中的缺陷,这不是一个坏主意。 – eugeneK 2010-06-20 06:52:33

+1

我会尽力为你的“问题”添加一个问题。 – Elijah 2010-06-20 06:57:09

回答

6

所以如果你的问题是,在哪里分享这个代码,我宁愿Github,或Google Code。祝你好运;)

4

好,解决你的问题你的评论,有四大“缺陷”,我可以看到:

  1. 不允许发送Unicode短信。
  2. 不支持发送连锁短信,看到(n/m)真的很难看。
  3. 当添加(n/m)时,您不会正确计算消息长度。
  4. 你可以用foreach (str_split($sms, 140) as $sms_part)做得更好。
3

我看到的主要问题是,它只适用于美国的运营商。如果你真的想通过代码发送短信,也许你应该使用类似Twilio