1

这是我在 php 中发送短信的代码

   if(isset($_POST['frmType'])&& $_POST['frmType'] == "guest_mail"){
        $from = $_POST['from'];
        $to = $_POST['to'];
        $carrier = $_POST['carrier'];
        $message = stripslashes($_POST['message']);

        if ((empty($from)) || (empty($to)) || (empty($message))) {
        echo"<br/>".$from;
        echo"<br/>".$to;
        echo"<br/>".$message;
        }

        else if ($carrier == "Verizon" || $carrier == "verizon") {
        $formatted_number = $to."@vtext.com";
        mail("$formatted_number", "", "$message");

        echo"<script type=text/javascript>abc();</script>"; 
        }

        else if ($carrier == "T-Mobile" || $carrier == "tmobile" || $carrier == "Tmobile") {
        $formatted_number = $to."@tomomail.net";
        mail("$formatted_number", "", "$message");

        echo"<script type=text/javascript>abc();</script>"; 
        }
    }

而不是邮件功能,我使用了 5 种类型的邮件功能脚本

1. mail('$formatted_number','','$message');

2. mail('$formatted_number','','$message','$from');

3. mail('$formatted_number','$subject','$message','$from');

4. mail('$formatted_number','$subject','$message');

5. mail("$formatted_number", "SMS", "$message"); 

但是我的短信仍然没有发送给我的兄弟

我参考以下链接发送短信

http://www.ehow.com/how_7300418_send-sms-using-php.html

http://www.daniweb.com/web-development/php/code/291287/send-text-messages-with-php

http://www.textmessagetool.com/php_sms_script.php

但它仍然无法正常工作。

我不明白究竟是什么问题?

请帮忙

提前致谢

4

3 回答 3

3

要发送短信,您需要运营商。为此,您需要在某些第三方 API 提供商的网站上注册,以便他们提供 API。使用该 API,您可以发送 SMS。

如果您想使用 PHP 邮件功能发送短信,那么您需要有网络短信网关的地址。

phone_umber(unique)@domainname.com 

根据移动网络,域名将发生变化。有SMS 网关列表

举例来说,您想给 X 先生发送一条短信,您只需将 3855550168@vtext.com 添加到任何电子邮件客户端,输入一条消息并点击发送。这将向 Verizon 无线网络上的电话号码 +1 (385) 555-0168 发送短信。

于 2012-10-10T09:48:46.410 回答
1

通过以下脚本,我的短信已成功发送

$message = 'Hello';

$to = XXXXXXXXXX(Unique phone number);

$formatted_number = $to."@domainname";

mail("$formatted_number", " ", "$message");

邮件功能有问题。

对于发送 SMS,邮件功能的主题字段应为空。

我的短信已成功发送给我的兄弟。

于 2012-10-11T04:23:46.193 回答
0

实际上,您可以使用 PHP mail() 发送。这有点棘手,您必须使用标头而不是仅使用“发件人”地址。最好有一个 SMS 提供商,但这种方法有效。

发送邮件的代码:

$sms_gateways = file_get_contents('sms_gateways.txt'); //SMS gateways (see txt file below)

$tmp = split("\n", $sms_gateways); //parse gateways file
$SMS_GATEWAYS = array();

for ($i=0; $i<count($tmp); $i++) {
    $itm = split(",", $tmp[$i]); //parse title/format
    $SMS_GATEWAYS[$itm[0]] = $itm[1]; //add # format to array
}

$eol = "\n"; //varies between Linux/Mac/Windows End Of Line...usually \n
$headers = 'From: SMS <sms@mywebsite.com>'.$eol;
$headers .= 'Reply-To: SMS <sms@mywebsite.com>'.$eol;
$headers .= 'Return-Path: SMS <sms@mywebsite.com>'.$eol;   
$headers .= "Message-ID:<".$now." TheSystem@".$_SERVER['SERVER_NAME'].">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol;
$mime_boundary=md5(time());
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= "Content-Type: text/plain; boundary=\"".$mime_boundary."\"".$eol; 

$phone = '8005551212'; //target phone # (do not use any symbols or spaces)

//get A/B/C pieces in phone #:
$phone_a = substr($phone, 0, 3);
$phone_b = substr($phone, 3, 3);
$phone_c = substr($phone, 6, 4);

//assemble gateways emails:

foreach ($SMS_GATEWAYS as $key => $val) {
  $email_str = str_replace("#a", $phone_a, str_replace("#b", $phone_b, str_replace("#c", $phone_c, $val)));
  if (mail($email_str, "", $sms_txt, $headers)) {
    //echo "success sending to $email_str<br>\r\n";
    $sms_success_count++;
  } else {
    $sms_fail_count++;
  }
}

sms_gateways.txt 文件:

Alaska Communications Systems,#a#b#c@msg.acsalaska.com
Alltell Wireless,#a#b#c@message.alltel.com
AT&T Wireless (1),#a#b#c@txt.att.net
Bell Canada,#a#b#c@txt.bell.ca
Boost Mobile,#a#b#c@myboostmobile.com
Cellular One (Dobson),#a#b#c@mobile.celloneusa.com
Cellular South,#a#b#c@csouth1.com
Centennial Wireless,#a#b#c@cwemail.com
Cincinnati Bell,#a#b#c@gocbw.com
Cingular (Postpaid),#a#b#c@cingular.com
Cingular (Prepaid),#a#b#c@cingulartext.com
Cricket,#a#b#c@sms.mycricket.com
Koodo Mobile and Telus Mobnility,#a#b#c@msg.telus.com
MetroPCS,#a#b#c@mymetropcs.com
MTS Mobility,#a#b#c@text.mtsmobility.com
Nextel,#a#b#c@messaging.nextel.com
Pioneer Cellular,#a-#b-#c@zsend.com
Pocket Wireless,#a#b#c@sms.pocket.com
PC Telecom,#a#b#c@mobiletxt.ca
Qwest Wireless,#a#b#c@qwestmp.com
Rogers Wireless,#a#b#c@pcs.rogers.com
SaskTel,#a#b#c@sms.sasktel.com
South Central Communications,#a#b#c@rinasms.com
Sprint(PCS),#a#b#c@messaging.sprintpcs.com
Sprint(Nextel),#a#b#c@page.nextel.com
Straight Talk,#a#b#c@vtext.com
Syringa Wireless,#a#b#c@rinasms.com
T-Mobile (USA),#a#b#c@tmomail.net
Unicel,#a#b#c@utext.com
US Cellular (USA),#a#b#c@email.uscc.net
Verizon (USA),#a#b#c@vtext.com
Viaero (USA),#a#b#c@viaerosms.com
Virgin Mobile (CA),#a#b#c@vmobile.ca
Virgin Mobile (USA),#a#b#c@vmobl.com

此方法向列表中的每个运营商发送一封电子邮件,但只有其中一个会实际收到它(因为没有两个运营商使用相同的电话号码。)这可能会将您的服务器置于垃圾邮件黑名单中,但如果仅使用定期它不应该引起问题。

进一步说明:我在网关文本文件中使用#a#b#c 的原因是因为某些网关的区号/前缀/后缀格式不同,即:“#a-#b-#c@whatever.com "

于 2014-03-30T00:56:49.930 回答