【问题标题】:How can I send a email in php from a html form [duplicate]如何从 html 表单以 php 发送电子邮件 [重复]
【发布时间】:2014-02-20 01:01:03
【问题描述】:

这是导致问题的 PHP 和 HTML 代码;当我按下 提交 <input> 时,电子邮件没有发送:

<head>
<title>`Fraud Detector`</title>
<link rel="stylesheet" type="text/css" href="CSS.css"/>
<LINK REL="SHORTCUT ICON" HREF="favicon.ico">
<body>

<form method="post" name="form1" action="submit.php">
Name: 
<br/><input type="text" name="name" /><br/>
Email:
<br/><input type="text" name="email"/><br/><br/>
<input type="submit" value="Continue"/>
</form>
<?php
$email = $_POST["email"];
$subject = "Your Account May Have Been Hacked!";
$body = "Your account may have been hacked! 
            Please click the following link to fix the problem: 
            http://testsites.webatu.com/process.php";
$from = "fraud_dept@security_inc.com";
mail($email, $subject, $body, $from);
?>
</body>
</head>

谁能告诉我为什么没有发送电子邮件以及我做错了什么?

【问题讨论】:

  • 因为缺少From:和缺少\r\n等 - Read the manual
  • error_reporting(-1); 放在脚本顶部并修复通知和您可能遇到的任何其他错误。
  • @Fred-ii- 稍微跑题了,但有人告诉我 Postfix(如果这是用来发送邮件的)处理线路终结符本身,并且实际上期望 EOL 与它的操作系统相关继续运行,所以你真的应该提供PHP_EOL 作为行终止符而不是\r\n - 尽管你的标题应该总是以\r\n 终止......你知道吗?
  • 遇到此类问题时,我总是参考手册。我可以基于 PHP.net 的内容,然后在之后添加好东西。 PHP_EOL 有效,引用自其中一项(-1 我不知道为什么)“由于 $additional_headers 中的行在 Unix 上必须用 \n 分隔,在 Windows 上用 \r\n 分隔,因此可能是在任一平台上使用包含正确值的 PHP_EOL 常量很有用。”php.net/mail@CD001 - 有些人经常滥用标题。
  • @Fred-ii-郁郁葱葱,干杯 :) 我只是在 Postfix 网站上,一辈子都看不到它(应该检查 php.net)......但后来凌晨 1 点 25 分,我真的应该睡着了!

标签: php html forms email variables


【解决方案1】:

确保该脚本名为“submit.php”并且位于您的 Web 目录的根目录中。

另外,在尝试访问它之前,我会添加一些检查以确保 POST 请求确实存在:

<?php
  if ($_POST && isset($_POST['name']) && isset($_POST['email']))
  {
    $name = $_POST['name'];
    $email = $_POST["email"];
    $subject = "Your Account May Have Been Hacked!";
    $body = "Hello {$name}: Your account may have been hacked! Please click the following 
      link to fix the problem: http://testsites.webatu.com/process.php";

    $headers = "To: {$name} <{$email}>\r\n";
    $headers .= "From: Fraud Dept <fraud_dept@security_inc.com>\r\n";

    mail($email, $subject, $body, $headers);
  }
?>

(我还添加了$name,因为您似乎忽略了现有代码中的该字段。)

【讨论】:

  • 只有我,还是其他人觉得讽刺的是 OP 发送了一封关于被黑客入侵的电子邮件并且他的脚本是敞开的?
  • 嗯,我确实想到了。看起来有点狡猾。
  • 也许是为了引起注意。 @Ohgodwhy
  • -1。尽管进行了额外的检查,但其余代码仍然相同,并且出于相同的原因将无法正常工作。
  • @Jack 我提供的代码示例是我建议检查 POST 请求是否存在的一部分。上面的问题的实际答案是:确保脚本名为“submit.php”并且位于您的 Web 目录的根目录中。
【解决方案2】:

也许您可以尝试以下方法,在发送电子邮件时,您需要两个电子邮件地址,收件人和发件人。

<?php
if ( isset($_POST['submit']) && isset($_POST['email']) ) {
   /* To email */
   $to = $_POST["email"];

   /* Sender email*/
   $from = 'myemail@live.com';

   /* Subject */
   $subject = "Your Account May Have Been Hacked!";

   /* Body*/
   $message = "Your account may have been hacked! Please click the following link to fix the problem: http://testsites.webatu.com/process.php";

   /* Send the email */
   mail($to, $subject, $message, "From: {$from}");
}
?>

<form method="post">
<input type="text" name="email" placeholder="your email address" />
<input type="submit" name="submit" value="submit" />
</form>

我还注意到电子邮件正文中的链接托管在免费主机上,只要确保您不会同时向多封电子邮件发送垃圾邮件。一些免费主机可能会禁止您在短时间内发送多封电子邮件。

【讨论】:

  • $from = $_POST["email"]; - 他想将电子邮件发送到这个地址,而不是来自它。
  • @Shane Smith 编辑 :)
  • 顺便说一句,如果您想查看该站点,请访问该站点,它是 testsites.webatu.com... 虽然您可能通过查看代码就知道了,但无论如何... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多