为什么mail()函数发送主体为"0"的电子邮件?

max*_*son 1 php ajax

这是通过Ajax发送的.这是JS:

$.ajax({
    url: objCommon.ajax,
    type: 'POST',
    data: {type:'feedback', msg:$('.commonsFeedbackDiv').text(), url:window.location.href},
    success: function(data){
        console.log(data);
        if(data.search('ajaxError') === -1){
            console.log('sent');
        }else if(data.search('msg')){
            alert('Please enter a message.');
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

以及处理请求的PHP:

global $user;
echo $_POST['msg'];
echo $_POST['url'];
if(isset($_POST['msg']) && $_POST['msg'] !== ''){
    mail('commons@example.com', 'Commons Feedback', 'url: ' + $_POST['url'] + $_POST['msg'], 'From: ' . $user->mail);
}else{
    echo 'ajaxError - no msg';
}
Run Code Online (Sandbox Code Playgroud)

您可以在success()回调函数中看到我正在将响应记录到控制台,并且此响应由echoPHP代码开头附近的两个语句组成.最终在控制台中的字符串是正确的; 它包含消息和URL.但是,我收到的实际电子邮件只包含内容中的数字0.

知道为什么吗?

jpa*_*jpa 7

在php中连接字符串的运算符.不是+.加号执行数字加法,然后将字符串转换为值0.

因此你需要改变

'url: ' + $_POST['url'] + $_POST['msg']
Run Code Online (Sandbox Code Playgroud)

'url: ' . $_POST['url'] . $_POST['msg']
Run Code Online (Sandbox Code Playgroud)