Send 彩信Message with PHP

sendmms.php脚本(sendmms.php)可用于通过NowSMS和PHP发送MMS消息。 MMS消息可以获取多媒体内容对象,包括图像,视频,音频和vCard联系人。

该脚本的版本2添加了对SSL / TLS的支持。

If you are migrating from the version 1 script, SSL/TLS requires a slight change in parameters. 的 first two parameters for the old version were host name or IP, followed by the port number. In the new version, instead these are combined into a single parameter, which is the URL of the NowSMS server (e.g., http://127.0.0.1:8800 or //sample.smshosts.com/).

可以从以下链接下载第2版脚本: http://www.zgbianpofanghuwang.com/download/sendmms-php.txt.

sendmms.php脚本比sendms.php脚本复杂得多。这种增加的复杂性的原因是因为MMS消息比SMS消息更复杂。

sendmms.php的第一部分包含您将在PHP脚本中调用的PHP函数。…即MmsInit,MmsAddField,MmsAddFile和MmsSend。在PHP脚本中包含这些功能“as is”无需编辑它们。

这些功能之后,sendmms.php包含一个简单的示例,显示了如何使用这些功能通过NowSMS服务器发送MMS消息。

1.)开始使用 MmsInit to initialise the 彩信message structure.

$mmsMessage = MmsInit();

2.)添加MMS消息所需的标题字段和属性,调用 MmsAddField 功能。

$mmsMessage = MmsAddField ($mmsMessage, "PhoneNumber", "+447777777777");

$mmsMessage = MmsAddField ($mmsMessage, "MMSFrom", "+447777777777");

$mmsMessage = MmsAddField ($mmsMessage, "MMSSubject", "Subject of Message");

$mmsMessage = MmsAddField ($mmsMessage, "MMSText", "Hello!");

“PhoneNumber” 字段指定彩信的收件人。这可以是逗号分隔的电话号码列表,也可以是NowSMS通讯组列表的名称。

“MMSFrom” 字段指定MMS消息的发送者。通常,这将是电话号码,短代码或电子邮件地址。 (如果消息是通过调制解调器发送的,则将被忽略,但是如果您有多个调制解调器,则可以使用此字段来选择特定的调制解调器。)

“MMSSubject” 字段指定MMS消息的主题,并且是可选的。

“MMSText” 字段,用于指定要包含在MMS消息中的某些文本,也是可选的。文本也可以作为文本文件引用包含在MMS消息中。

3.)指定要包含在MMS消息中的文件(通常是图像)。可以使用本地目录路径或远程URL添加文件。对于本地目录路径,请使用MmsAddFile。

MmsAddFile的最后一个参数是MIME内容类型(例如,“image/gif”, “image/jpeg”, “image/png”, “text/plain” or “application/smil”)。但是,请注意,当通过此PHP脚本使用的接口提交消息时,NowSMS的当前版本会忽略MIME内容类型。相反,NowSMS使用文件扩展名来确定内容类型(例如,“.gif”, “.jpg”, “.png”, “.txt”, “.smil”.

$mmsMessage = MmsAddFile ($mmsMessage, "f:/temp/file.gif", "image/gif");

MMS消息可以包含一个或多个这些文件对象。

使用MmsAddFile时,PHP脚本中引用的文件必须是本地文件,与PHP脚本位于同一服务器上。

要通过URL引用而不是本地文件包括文件(图像),请使用MmsAddField和字段名称MMSFile:

$mmsMessage = MmsAddField ($mmsMessage, "MMSFile", "//www.zgbianpofanghuwang.com/nowsmsicon.png");

4.)使用 彩信发送 将MMS消息提交到NowSMS服务器。

$nowsmsHostURL  = "//sample.smshosts.com";    //  URL of NowSMS Server

$nowsmsUsername = "username";                       //  "SMS Users" account name 

$nowsmsPassword = "password";                       //  "SMS Users" account 密码

 

$x = 彩信发送 ($nowsmsHostURL, $nowsmsUsername, $nowsmsPassword, $mmsMessage);

MmsAddField函数可用于指定对发送MMS消息有效的任何NowSMS URL参数。

可以从以下链接下载第2版脚本: http://www.zgbianpofanghuwang.com/download/sendmms-php.txt.

<?php

 

/ * MmsInit-创建一个MMS消息对象* /

function MmsInit () {

 

   $data = "";

   return $data;

}

 

 

/ * MmsAddFile-将本地文件添加到MMS消息对象* /

function MmsAddFile ($data, $文件, $contenttype)

{

 

   $fa = @file($文件);

   $xf ="Content-Type: ".$contenttype."\r\n\r\n".implode("",$fa);

   $data["MMSFile\"; filename=\"$文件"]   = $xf;

 

   return $data;

}

 

/ * MmsAddField-向MMS消息对象添加名称/值参数* /

function MmsAddField ($data, $fieldname, $fieldvalue) {

 

   $data[$fieldname] = "\r\n" . $fieldvalue;

 

   return $data;

 

}

 

/ * 彩信发送-通过NowSMS服务器发送MMS消息。

             使用HTTP POST multipart / form-data * /

 

function 彩信发送 ($nowsmsURL, $username, $password, $data_to_send)

{

 

    $https = false;

    $port = 80; //  default port

 

    // 解析http://或http:// _前缀

    $parts = explode("://", $nowsmsURL);

    if (count($parts) > 1) {

       if ($parts[0] == "https") {

          $https = true;

          $port = "443";

       }

       $host = $parts[1];

    }

    else $host = $nowsmsURL;

 

    // 解析端口号(如果存在)

    $parts = explode(":", $host);

    if (count($parts) > 1) {

       $host = $parts[0];

       $port = $parts[1];

    }

 

    // 删除斜杠

    $parts = explode("/", $host);

    if (count($parts) > 1) {

       $host = $parts[0];

    }

 

    // 添加流协议前缀

    if ($https) $streamHost = "tls://" . $host . ":" . $port;

    else $streamHost = "tcp://" . $host . ":" . $port;

 

    // 关闭SSL证书检查

    //  TODO:重新开启

    if ($https) {

       $context = stream_context_create([

          'ssl' => [

              'verify_peer' => false

          ]

       ]);

    }

    else $context = stream_context_create([]);

 

    $mimeFiller = "This is a MIME message\r\n\r\n";

    $dc = strlen($mimeFiller);

    $bo ="----------------------------- mime-boundary-marker";

 

    $fp = stream_socket_client($streamHost, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);

    if (!$fp) {

        echo "errno: $errno \n";

        echo "errstr: $errstr\n";

        return "ERROR " . $errno . " - " . $errstr;

    }

 

    fputs($fp, "POST / HTTP/1.0\r\n");

    if ($username != "") {

       $auth = $username . ":" . $password;

       $auth = base64_encode($auth);

       fwrite($fp, "授权:基本" . $auth . "\r\n");

    }

    fputs($fp, "User-Agent: NowSMS PHP Script\r\n");

    fputs($fp, "Host: $host\r\n");

    fputs($fp, "Accept: */*\r\n");

    fputs($fp, "Content-type: multipart/form-data; boundary=$bo\r\n");

 

    foreach($data_to_send as $key=>$val) {

        $ds =sprintf("%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n%s\r\n",$bo,$key,$val);

        $dc += strlen($ds);

 

    }

    $dc += strlen($bo)+3;

    fputs($fp, "Content-length: $dc\r\n");

    fputs($fp, "\r\n");

    fputs($fp, $mimeFiller);

 

    foreach($data_to_send as $key=>$val) {

        $ds =sprintf("%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n%s\r\n",$bo,$key,$val);

        fputs($fp, $ds );

    }

    $ds = $bo."--\r\n" ;

    fputs($fp, $ds);

 

    $res = "";

 

    while(!feof($fp)) {

        $res .= fread($fp,1);

    }

    fclose($fp);

 

 

    return $res;

}

 

// 以上功能的用法示例

 

// 使用MmsInit初始化MMS消息对象

$mmsMessage = MmsInit();

 

// 使用MmsAddField设置MMS消息字段

//  "PhoneNumber"是收件人,并且可以是逗号分隔的收件人列表或NowSMS通讯组列表的名称 

//  "MMSFrom"是发件人-被调制解调器忽略

//  "MMSSubject"是可选科目 

//  "MMSText"是消息的可选文本部分。文本部分也可以添加为文件参考 

 

$mmsMessage = MmsAddField ($mmsMessage, "PhoneNumber", "+447777777777");

$mmsMessage = MmsAddField ($mmsMessage, "MMSFrom", "+447777777777");

$mmsMessage = MmsAddField ($mmsMessage, "MMSSubject", "Subject of Message");

$mmsMessage = MmsAddField ($mmsMessage, "MMSText", "Hello!");

 

// 可以使用本地目录路径或远程URL添加文件(通常是图像)。

// 

// 对于本地​​目录路径,请使用MmsAddFile。

// 最后一个参数是MIME内容类型,例如"image/gif", "image/jpeg", "image/png", "text/plain" or "application/smil" ...

// 但是,请注意,当通过接口提交消息时,当前版本的NowSMS会忽略MIME内容类型

// 此PHP脚本使用。 

// 相反,NowSMS使用文件扩展名来确定内容类型(例如,".gif", ".jpg", ".png", ".txt", ".smil"

 

 

//  $ mmsMessage = MmsAddFile($ mmsMessage,"f:\\temp\\file.gif", "image/gif");

 

// 要通过URL引用包含文件(图像),请使用MmsAddField和字段名称MMSFile 

 

$mmsMessage = MmsAddField ($mmsMessage, "MMSFile", "//www.zgbianpofanghuwang.com/nowsmsicon.png");

 

// 设置用于连接NowSMS服务器的参数 

$nowsmsHostURL  = "//sample.smshosts.com";    //  URL of NowSMS Server

$nowsmsUsername = "username";                       //  "SMS Users" account name 

$nowsmsPassword = "password";                       //  "SMS Users" account 密码

 

// 使用MmsSend发送消息。

// 此功能返回服务器的HTTP响应,此示例回显它

 

$x = 彩信发送 ($nowsmsHostURL, $nowsmsUsername, $nowsmsPassword, $mmsMessage);

echo $x;

 

 

?>

MmsAddField 函数可用于指定对于发送MMS消息有效的任何NowSMS URL参数。

例如…这是可以使用MmsAddField函数指定的其他参数字段的不完整列表。

“MMSFile” – As noted earlier, this script attaches local files to the 彩信message. However, what if you want to include files that reside on a separate web server instead? In that case, do not use the MmsAddFile function. Instead, use $ mmsMessage = MmsAddField($ mmsMessage,“MMSFile”, “http://www.zgbianpofanghuwang.com/media/logo.png” ); and specify the file components as URL references via the “MMSFile” parameter field.

“MMSDeliveryReport” – “Delivery Report”指定是否为邮件请求发送报告。设置 “Yes” 请求交付报告。请注意,所有送达报告都将直接返回到在邮件中指定的电话号码或电子邮件地址“MMSFrom” address.

“MMSReadReport” – “Read Report”指定是否为邮件请求已读回执。请注意,接收客户端可以选择不发送已读回执。任何已读回执的报告将被定向回该邮件中指定的电话号码或电子邮件地址。“MMSFrom” address.

“MMSPriority” – “Priority”是与消息关联的用户定义的优先级。通常,与消息关联的任何优先级定义都会被基础传输忽略,但是接收客户端可以根据此优先级设置决定不同地显示消息。

“MMSMessageClass” – “Message Class”是MMS规范中定义的属性。“Personal”是用于标准用户间通信的消息类型。此参数支持的其他已定义消息类包括:“Informational” and “Advertisement”.

“MMSWAPPush” – Set to “Yes” 指示正在发送的消息应作为“多媒体内容推送”通过WAP推送而不是MMS消息。

“MMSSMSPush” – Set to “Yes” 指示正在发送的消息应作为“多媒体内容推送”通过文本短信而不是MMS消息中的URL链接发送消息。

还可以指定要针对MMS消息的内容应用的前向锁定和DRM约束。转发锁定和DRM约束适用于MMS消息的非文本部分(即,在转发锁定的消息中,文本仍可以转发,但是图像或视频不能转发)。请注意,并非所有设备都支持前向锁定和DRM约束,因此,只有在使用邮件收件人使用的手机进行彻底测试之后,才能使用这些参数设置。

“MMSForwardLock” –前向锁定是DRM(数字版权管理)的最基本级别。什么时候“Forward Lock” is set to “Yes”,这表明接收设备不应允许将消息中的任何非文本对象转发出该设备。该设备可以允许用户从消息中提取图片,视频或声音并将其保存在手机上。但是,任何此类对象均保持向前锁定状态,因此无法将其转发给另一个用户或转移给另一个设备。 (重要说明:并非所有设备都支持前向锁定,如果不支持该内容,则会显示为垃圾,或可能由操作员MMSC拒绝。)

“DRMRestrict” –除了前向锁定之外,还可以应用更高级的DRM(数字版权管理)限制来限制用户可以访问对象的次数,或者可以指定开始日期和结束日期来限制用户可以访问对象的时间。

这些高级DRM限制可以通过设置“DRMRestrict” to “Yes”。启用此设置后,还将隐含正向锁定,并且“MMSForwardLock”设置被忽略。 (重要说明:并非所有设备都支持DRM限制,如果不支持该内容,则会显示为垃圾内容,或者可能由操作员MMSC拒绝。)

“DRMRestrictTextXML”“Yes” 指定权限对象应以文本XML格式编码。 “No” 指定权限对象应以二进制XML格式编码。默认是 “No”.

当指定了DRM限制时,通常必须指定一个或多个DRM许可以及一个或多个有关MMS消息内容的DRM约束。

“ DRM权限”指定对受DRM保护的邮件中的对象所允许的访问类型。

例如,音频或视频对象需要“Play”权限,然后用户才能访问它。图片需要“Display”权限,然后用户才能访问它,并且需要“Print”如果允许用户将图像打印到打印机(可能通过蓝牙),则授予许可。申请需要“Execute”允许用户使用该应用程序。在所有情况下,都假定为前向锁定,因此不允许用户从设备中转发或转移对象。

如果要在MMS消息中发送多种类型的对象,请指定要发送的不同类型的对象所需的所有权限。

“DRMPermissionPlay” – Set to “Yes” 启用DRM“Play” Permission.

“DRMPermissionDisplay” – Set to “Yes” 启用DRM“Display” Permission.

“DRMPermissionExecute” – Set to “Yes” 启用DRM“Execute” Permission.

“DRMPermissionPrint” – Set to “Yes” 启用DRM“Print” Permission.

DRM约束指定有关DRM保护的对象对象应保持对用户可访问的时间的约束。

“DRMConstraintCount” – “访问次数(计数)”指定用户在禁止访问之前只能访问此次数受DRM保护的对象。

“DRMConstraintStart” – “开始日期(yyyy-mm-dd)”指定直到指定日期或之后,才允许用户访问受DRM保护的对象。 (请注意,您必须以yyyy-mm-dd格式指定日期,例如2008-12-24。)

“DRMConstraintEnd” – “结束日期(yyyy-mm-dd)”指定在指定日期之后将不允许用户访问受DRM保护的对象。 (请注意,您必须以yyyy-mm-dd格式指定日期,例如2008-02-24。)

“DRMConstraintInterval” – “# of Days (interval)”指定在首次收到对象之后的此天数内,将允许用户访问受DRM保护的对象。用户可以在此处输入天数,也可以输入为“”OMA DRM权限表达语言规范中的元素。例如,P2Y10M15DT10H30M20S表示持续时间为2年10个月15天10小时30分钟20秒。

 

使用此脚本的系统要求:

该脚本连接到NowSMS服务器,并将请求发送到NowSMS服务器以发送消息。

如果您没有安装NowSMS服务器,则此脚本将不起作用。

NowSMS服务器软件已安装在Windows PC上,并且能够发送SMS或MMS消息,NowSMS还需要GSM调制解调器,Android手机或SMS服务提供商连接。

可以从以下网址下载NowSMS软件的30天免费试用版: http://www.zgbianpofanghuwang.com/download-free-trial

现在的SMS / MMS网关或 NowSMS Lite 可以使用。 NowSMS Lite 可以使用单个GSM调制解调器或Android手机作为调制解调器连接来发送SMS和MMS消息。完整产品支持多个调制解调器和/或服务提供商连接。

在尝试使用脚本与NowSMS进行交互之前,您应验证NowSMS的配置正确,并且可以使用其内置的Web界面发送SMS消息。对于Android手机或GSM调制解调器连接,可在此处找到快速入门指南: http://www.zgbianpofanghuwang.com/doc/quick-start-guide

一旦确认NowSMS可以独立运行,就必须更改脚本中引用的IP地址以指向NowSMS服务器。我们的示例脚本使用的IP地址为127.0.0.1,这是当前PC的特殊回送地址。如果您的脚本在不同于NowSMS服务器的系统上运行,请将127.0.0.1更改为对您的环境有效的主机名或IP地址。还需要在NowSMS服务器上定义一个与脚本中的用户帐户匹配的帐户凭据的SMS用户帐户。