我網站上的電子郵件表單需要能夠通過運行 .net 的服務器發送電子郵件。
該代碼運行良好,但電子郵件服務器已被移動,因此客戶無法直接訪問它。我的主服務器可以與之通信,我正在將我的所有客戶端 -> 電子郵件服務器代碼轉換為客戶端 -> PHP 服務器 -> 電子郵件服務器。(我不僅有電子郵件通過它,而且所有這些現在都在作業)。我正在與特殊字符作斗爭 - 我的示例電子郵件:
示例電子郵件:
更多特殊字符和多行
`~!@ # $ % ^ & * ( ) _ - =
{ [ } ] \ | ; : '" < , > . ? /
最后一行。
這作業(AngularJS):
$http({
method:'POST',
//url: "assets/api/SendMessage.php",
url:'https://myemailserver.com/mygroup/SendMessage',
headers: {
'Content-Type': "application/json"
},
data:{
"From": dataObj['firstname-email'] ' ' dataObj['lastname-email'],
"SenderEmail": dataObj['senderemail-email'],
"Message": dataObj['body-email'],
"Subject": dataObj['subject-email']
}
}).then(function successCallback(response){
console.log('Email Response, success!',response);
$scope.emailSuccess = true;
}, function errorCallBack(response){
console.log('Email Error:',response);
$scope.emailFail = true;
})
但是當我將它發送到我的 PHP 服務器(相同的代碼,不同的 URL),然后使用 curl 發送訊息時,當有任何特殊字符(包括來自編輯器的空白行)時,我會收到一條失敗的訊息。(除了 , 和 .)
如果訊息的正文是單行,那么它作業正常。
我的PHP:
$url = 'https://myemailserver.com/mygroup/SendMessage';
$params = json_decode(file_get_contents('php://input'),true);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data = '{"From":"' . $params["From"] . '","SenderEmail":"' . $params["SenderEmail"] . '","Message":"' .$params["Message"] . '","Subject":"' . $params["Subject"] .'"}';
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
curl_close($curl);
echo($resp);
我從網上嘗試了幾種不同的選擇:
- 從字串中洗掉所有特殊字符
- https://www.php.net/manual/en/function.addslashes.php
- https://www.w3schools.com/php/func_string_htmlspecialchars.asp
無論我如何處理它,我都會收到來自電子郵件服務器的失敗回應。
我需要維護特殊字符(包括換行符)。任何人都可以幫助我解決方法嗎?謝謝
uj5u.com熱心網友回復:
這幾乎肯定是您編譯 JSON 字串的方式。這些東西非常挑剔,如果可能的話,您不應該手動創建它們。而是按預期創建物件(或陣列)并使用內置工具進行字串化。
代替$data = '{"From":"' . $params["From"] . '","SenderEmail":"' . $params["SenderEmail"] . '","Message":"' .$params["Message"] . '","Subject":"' . $params["Subject"] .'"}';
嘗試這個:
$data = array(
"From" => $params["From"],
"SenderEmail" => $params["SenderEmail"],
"Message" => $params["Message"],
"Subject" => $params["Subject"]);
$data = json_encode($data) ;
這不僅更易于閱讀和維護,而且會自動處理在嘗試轉義內容以進行傳輸時可能遇到的許多問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/428391.html
上一篇:以正確的格式顯示日期
