PHP邮件功能不发送电子邮件

时间:2019-06-09 08:46:35

标签: javascript php email

我有一个表格,我希望人们将表格发送到他们的电子邮件中。因此,我将邮件添加到了代码mail($ to,$ subject ....)。如果我手动在$ to中输入一个值(例如$ to =“ xxx.example.com”),则电子邮件将到达。但是,此解决方案不切实际,因为我需要通过用户输入来发送电子邮件。 我使用JavaScript创建了一个带有输入字段的警报框:

function prompt($prompt_msg){ 
echo("<script type='text/javascript'> var answer = prompt('".$prompt_msg."',); </script>");
$answer = "<script type='text/javascript'> document.write(answer); </script>";
return($answer);
}
$prompt_msg = "Zadejte Váš email:";
$name = prompt($prompt_msg);

如果我打印带有echo($ name)的值,则会显示电子邮件地址,但不会发送电子邮件。 因此,我创建了一个多电子邮件值:

$recipients = array ("xxx@yyy.com", $name, "yyy@xxx.com");

到电子邮件地址xxx和电子邮件地址yyy的电子邮件已到达,但是如果我在yyy的电子邮件框中而不是xxx,yyy和$ name中的值中查看电子邮件收件人,则会显示以下信息:

Recipients - xxx, yyy, scripttype='text/javascript'@ssd3.jh-pro.cz
answer <document.write@ssd3.jh-pro.cz>
/script@ssd3.jh-pro.cz

这意味着该电子邮件将发送到:

,而不是$ name的内容。
scripttype='text/javascript'@ssd3.jh-pro.cz,
answer <document.write@ssd3.jh-pro.cz>,
/script@ssd3.jh-pro.cz

您知道为什么会这样吗? 预先感谢您的帮助

function prompt($prompt_msg){ 
 echo("<script type='text/javascript'> var answer = 
prompt('".$prompt_msg."',); </script>");
 $answer = "<script type='text/javascript'> document.write(answer); </script>";
 return($answer);
}
$prompt_msg = "Zadejte Váš email:";
$name = prompt($prompt_msg);
$recipients = array("xxx@yyy.cz",$name,"yyy@xxx.com");
$to = implode(',', $recipients);
echo($to);
.
.
.
.
mail($to,$subject,$message,$headers);

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试通过网络浏览器执行此操作。您尝试做的事情是可能的,但并不能以您接近的方式进行。

PHP是在服务器上运行的编程语言,而JavaScript是在浏览器中运行的编程语言。必须理解这一点:这是两种完全不同的编程语言,它们在两台完全独立的计算机上运行。 PHP不知道用户浏览器中发生了什么,而用户浏览器也不知道PHP中发生了什么。

实际上,PHP甚至都不知道您正在生成JavaScript。就PHP而言,您只是生成一堆文本并将其发送给用户。直到PHP停止执行,JavaScript才开始运行。

结果,您的代码中发生的事情是字符串"<script type='text/javascript'> document.write(answer); </script>"被存储在$name中,您立即尝试向该字符串发送电子邮件。这一切都在提示用户之前发生。

您需要从根本上将您的工作流程更改为以下内容:

  1. 使用PHP生成将运行用户浏览器的JavaScript。
  2. 使用用户浏览器上的JavaScript提示用户输入电子邮件。
  3. 让用户的浏览器将用户的电子邮件发送到PHP。
  4. 使用PHP通过mail()呼叫处理提供的电子邮件。