2016-08-23 86 views
0

我试图通过PHP & Ajax将收集到的html表单作为电子邮件发送给我。出于某种原因,我可以通过成功提醒来更新用户界面,但是当我检查收件箱时没有发送实际的电子邮件。我的印象是我的PHP脚本可能不合理,因为当我记录我的js函数的结果时,所有表单值都被正确捕获。我应该如何正确地构造这个PHP邮件脚本?

这里是JS:

function _(id){ return document.getElementById(id); }; 
function submitForm(){ 
    var formdata = new FormData(); 
    formdata.append("first-name", _("first-name").value); 
    formdata.append("last-name", _("last-name").value); 
    formdata.append("email", _("email").value); 
    formdata.append("subject", _("subject").value); 
    formdata.append("message", _("message").value); 
    var ajax = new XMLHttpRequest(); 
    ajax.open("POST", "email_me.php"); 
    ajax.onreadystatechange = function() { 
     if(ajax.readyState == 4 && ajax.status == 200) { 
      if(ajax.responseText == "success"){ 
       alert("Hey! It Worked!!"); 
      } else { 
      // display error 
      } 
     } 
    } 
    ajax.send(formdata); 
    // Display the key/value pairs 
    for (var pair of formdata.entries()) { 
     console.log(pair[0]+ ', ' + pair[1]); 
    } 
} 

,这里是PHP脚本(email_me.php文件)

<?php 
    if(isset($_POST['first-name'], $_POST['last-name'], $_POST['email'], $_POST['subject'], $_POST['message'])){ 
    $name = $_POST['first-name']; 
    $email = $_POST['email']; 
    $m = nl2br($_POST['message']); 
    $to = "[email protected]"; 
    $from = $email; 
    $subject = $_POST['subject']; 
    $message = '<p>'.$m.'</p>'; 
    $headers = "From: $from\n"; 
    $headers .= "MIME-Version: 1.0\n"; 
    $headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
    if(mail($to, $subject, $message, $headers)){ 
     echo "success"; 
    } else { 
     echo "The server failed to send the message. Please try again later."; 
    } 
    } 
?> 

什么似乎的是这个问题?我用本地主机运行当前版本的Apache,使用MAMP Pro btw。

这里是服务器日志:

标记 - 08月23日,2016年,下午12点34分32秒

年08月23 12点35分24秒的MacBook Air后缀/主[7884]:守护进程启动 - 版本2.11.0,配置/ etc/postfix Aug 23 12:36:24 MacBookAir postfix/master [7884]:主退出时间已到达

Aug 23 12:36:24 MacBookAir postfix/master [7885]:守护进程开始 - 版本2.11.0,配置/ etc/postfix Aug 23 12:37:24 MacBookAir postfix/master [7885]:主退出时间已到达 Aug 23 12:37:24 MacBookAir r postfix/master [7886]:守护进程已启动 - 版本2.11.0,配置/ etc/postfix的

+2

[PHP邮件形式没有完成发送电子邮件(的可能的复制http://stackoverflow.com/questions/ 24644436/php-mail-form-doesnt-complete-sending-e-mail) –

+0

问题在于我们从用户的电子邮件发送电子邮件,发送来自常量电子邮件的电子邮件并保留用户的电子邮件。 $ header =“From:[email protected] \ r \ n”; –

+0

你可以编辑我的代码来展示这个例子吗? @ Kool-Mind –

回答

0

更新你的PHP代码,并检查它的工作

if(isset($_POST['first-name'], $_POST['last-name'], $_POST['email'], $_POST['subject'], $_POST['message'])){ 
    $name = $_POST['first-name']; 
    $email = $_POST['email']; 
    $m = nl2br($_POST['message']); 
    $message = '<p>Name => '.$name.' <br/> Email =>'.$email.'<br /> Message =>'.$m.'</p>'; 
    $to = "[email protected]"; 

    $subject = $_POST['subject']; 
    $headers = "From: [email protected]\r\n"; // use \r\n 
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; // use \r\n 
    $headers.= "X-Priority: 1\r\n"; 
    if(mail($to, $subject, $message, $headers)){ 
     echo "success"; 
    } else { 
     echo "The server failed to send the message. Please try again later."; 
    } 
    } 
+0

没有运气,我在邮件中收到很多“操作超时”错误.log我的服务器 –

+0

那是什么错误?并更新$标头。=“X-Priority:1 \ r \ n”;它以前是$ header –

+0

'Aug 23 03:43:55 MacBookAir postfix/smtp [6896]:连接到mta5.am0.yahoodns.net [66.196.118.35]:25:操作超时 Aug 23 03:43:55 MacBookAir postfix/smtp [6896]:warning:0C36E1E3DBA9:推迟服务失败' Aug 23 03:43:55 MacBookAir postfix/smtp [6896]:0C36E1E3DBA9:to = <[email protected]>,relay = none,delay = 38342,延迟= 38192/0.05/150/0,dsn = 4.4.1,status = deferred(连接到mta5.am0.yahoodns.net [66.196.118.35]:25:操作超时) –