PHP 与 Clicatell SMTP 集成 API
PHP integration with Clicatell SMTP API
我正在尝试发送一个 php,它将向 Clicatell SMTP api 发送电子邮件。这个想法很简单 - 使用 PHP SOAP 客户端调用 SQL 服务器,获取回复并将此回复插入发送到 Clicatell 服务器的电子邮件正文中。
<?php
$to = 'sms@messaging.clickatell.com';
$today = strtoupper(date('dMy'));
$subject = 'Test sms sent on ' . $today;
// API request and response goes here
//this is how the response from the api looks like
$response ='To:4412345677693\r\nTo:4412345665693\r\nTo:4412375677693\r\nTo:4463879456776\r\n';
$message = 'api_id: 12345678\r\nuser:user1234\r\npassword:PxAxSxSxWxOxRxD\r\n' . $response . 'Reply: youremail@yourdomain.com\r\ntext:Test Message Using Clickatell api\r\n';
$headers = 'MIME-Version: 1.0' . '\r\n';
$headers .= 'Content-type:text/html;charset=UTF-8' . '\r\n';
$headers = 'From: no-reply@example.com' . '\r\n' .
mail($to,$subject,$message,$headers);
?>
这应该有望生成如下所示的纯文本电子邮件:
To: sms@messaging.clickatell.com
api_id: 12345678
User: user1234
Password: PxAxSxSxWxOxRxD
To:4412345677693
To:4412345665693
To:4412375677693
To:4463879456776
Reply: youremail@yourdomain.com
text: Test Message Using Clickatell api
但是我只在一条线上得到了所有东西。并且帮助将不胜感激。
我相信这是因为您在 headers 中设置了 Content-type:text/html;charset=UTF-8
,所以您必须使用 <br>
来换行。
由于您想要纯文本而不是 HTML,因此您需要使用更合适的 content-type。例如,尝试使用 Content-type: text/plain; charset=iso-8859-1
。
另一件需要考虑的事情是(根据 php 手册)一些中继会 "incorrectly" 将文本中的 "\n"
转换为 UNIX 系统上的 "\r\n"
。建议使用 PHP EOF 常量而不是 "\r\n"
http://php.net/manual/en/function.mail.php
同样使用 single-quoted 字符串,你会发现 '\r\n'
不会将 \
视为转义字符。您可能需要使用 double-quoted 字符串,例如 "\r\n"
以获得所需的行为。
只需将引号更改为双引号即可正确处理控制字符:
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type:text/html;charset=UTF-8\r\n";
$headers .= "From: no-reply@example.com\r\n";
同样适用于 $response 和 $message。
有帮助吗?
我正在尝试发送一个 php,它将向 Clicatell SMTP api 发送电子邮件。这个想法很简单 - 使用 PHP SOAP 客户端调用 SQL 服务器,获取回复并将此回复插入发送到 Clicatell 服务器的电子邮件正文中。
<?php
$to = 'sms@messaging.clickatell.com';
$today = strtoupper(date('dMy'));
$subject = 'Test sms sent on ' . $today;
// API request and response goes here
//this is how the response from the api looks like
$response ='To:4412345677693\r\nTo:4412345665693\r\nTo:4412375677693\r\nTo:4463879456776\r\n';
$message = 'api_id: 12345678\r\nuser:user1234\r\npassword:PxAxSxSxWxOxRxD\r\n' . $response . 'Reply: youremail@yourdomain.com\r\ntext:Test Message Using Clickatell api\r\n';
$headers = 'MIME-Version: 1.0' . '\r\n';
$headers .= 'Content-type:text/html;charset=UTF-8' . '\r\n';
$headers = 'From: no-reply@example.com' . '\r\n' .
mail($to,$subject,$message,$headers);
?>
这应该有望生成如下所示的纯文本电子邮件:
To: sms@messaging.clickatell.com
api_id: 12345678
User: user1234
Password: PxAxSxSxWxOxRxD
To:4412345677693
To:4412345665693
To:4412375677693
To:4463879456776
Reply: youremail@yourdomain.com
text: Test Message Using Clickatell api
但是我只在一条线上得到了所有东西。并且帮助将不胜感激。
我相信这是因为您在 headers 中设置了 Content-type:text/html;charset=UTF-8
,所以您必须使用 <br>
来换行。
由于您想要纯文本而不是 HTML,因此您需要使用更合适的 content-type。例如,尝试使用 Content-type: text/plain; charset=iso-8859-1
。
另一件需要考虑的事情是(根据 php 手册)一些中继会 "incorrectly" 将文本中的 "\n"
转换为 UNIX 系统上的 "\r\n"
。建议使用 PHP EOF 常量而不是 "\r\n"
http://php.net/manual/en/function.mail.php
同样使用 single-quoted 字符串,你会发现 '\r\n'
不会将 \
视为转义字符。您可能需要使用 double-quoted 字符串,例如 "\r\n"
以获得所需的行为。
只需将引号更改为双引号即可正确处理控制字符:
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type:text/html;charset=UTF-8\r\n";
$headers .= "From: no-reply@example.com\r\n";
同样适用于 $response 和 $message。 有帮助吗?