【问题标题】:PHP get form not receiving emailPHP获取表单未收到电子邮件
【发布时间】:2012-03-24 21:17:48
【问题描述】:

我正在使用一个简单的 Web 表单和一些 PHP 脚本将完成的表单发送到我的电子邮件。当我点击“提交”时,我收到了 PHP 文本“谢谢,我们会尽快联系”,但我没有收到包含提交表单信息的电子邮件。不知道是什么问题。

来自 HTML 文档:

<div class='' "letstalk_form">
    <form method="get" action="contact.php" name="contact" id="contact">
        <p>
            <label for="txtfname">Name:</label><input type="text" tabindex="1" name="txtfname" id="txtfname" class="clsTextBox">
        </p>
        <p>
            <label for="txtcompany">Company:</label><input type="text" tabindex="2" name="txtcompany" id="txtcompany" class="clsTextBox">
        </p>
        <p>
            <label for="txtemail">E-mail:</label><input type="text" tabindex="3" name="txtemail" id="txtemail" class="clsTextBox">
        </p>
        <p>
            Message:<textarea name="comments" id="comments" rows="2" cols="20"></textarea>
        </p>
        <p class="submit">
            <input type="submit" value="Submit">
        </p>
    </form>
</div>

和 PHP

$msg = "Sender Name:\t$txtfname\n";
$msg .= "Sender Company:\t$txtcompany\n";
$msg .= "Sender E-mail:\t$txtemail\n";
$msg .= "Comments:\t$comments\n\n";
$recipient = "receiversemail@somewhere.com";
$subject = "from PI Website";

$mailheaders = "From: Lets Do Business  <> \n";
$mailheaders .= "Reply-To: $txtemail\n\n";

mail($recipient, $subject, $msg, $mailheaders);

echo "<HTML><HEAD><TITLE>Form Sent!</TITLE></HEAD><BODY>";
echo "<H3 align=center>Thank You, $txtfname</H3>";
echo "<P align=center>Your submission was sent successfully.<br />
I will be contacting you soon.</P>";
echo "</BODY></HTML>";

?> 
</div>

我用过这是过去的,效果很好。有什么我忽略的吗?感谢您的帮助!


编辑:我最终使用 Turgut Dursun 提供的链接 (html-form-guide.com/contact-form/php-email-contact-form.html ) 来设置表单。效果很好。谢谢。

【问题讨论】:

  • 通过if (mail($r, $s, $m, $h)) echo "mail sent"; else echo "mail NOT sent";之类的方式测试邮件是否真的发送了
  • 尝试打开错误报告并检查您的mail() 调用的返回值。还要确保您在php.ini 文件中正确设置了smtp
  • 可能有多种原因,可能邮件服务器没有设置。
  • @Sorin Buturugeanu:回显页面显示“邮件已发送”。我把你提供的“if”语句放在'mail(($recipient, $subject, $msg, $mailheaders);'语句下。谢谢你的回复。

标签: php html forms get


【解决方案1】:

您是否在这部分代码之前将表单中的 $_GET[] 值分配给变量?

$msg = "Sender Name:\t$txtfname\n";
$msg .= "Sender Company:\t$txtcompany\n";
$msg .= "Sender E-mail:\t$txtemail\n";
$msg .= "Comments:\t$comments\n\n";
$recipient = "abosiger@embarqmail.com";
$subject = "from PI Website";

$mailheaders = "From: Lets Do Business  <> \n";
$mailheaders .= "Reply-To: $txtemail\n\n";

mail($recipient, $subject, $msg, $mailheaders);

如果没有,您需要将您的 $_GET[] 值初始化为单个变量:

$txtfname = $_GET['textfname'];

对于通过 get 发送的每个变量。或者您可以通过以下语法直接从 $_GET 数组中访问它们:

$msg = "Sender Name:\t" . $_GET['txtfname'] . "\n";

如果这有帮助,请告诉我。

【讨论】:

  • 我没有通过电子邮件获得信息
  • 我确实有 "$txtfname = $_GET['txtfname'];"在需要发送的每个变量的脚本开头。
  • 如上所述@Krister Andersson,我认为您可能需要检查 php.ini 中的 smtp 设置。
  • 我还会将您对 mail() 函数的调用放在 if/else 块中:if (mail($recipient, $subject, $msg, $mailheaders)) { echo 'Mail Sent.'; } else { echo 'Sending failed.'; }。如果此代码显示“已发送邮件”但您仍然没有收到电子邮件,或者显示“发送失败”,那么您应该尝试启用错误报告并从那里继续。
【解决方案2】:
<?php
$to = "someone@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "someonelse@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?> 

这样改。

【讨论】:

  • 我试过了,将我的电子邮件地址放在“收件人”字段中。我得到了新页面“已发送邮件”,但我没有收到包含信息的电子邮件。
  • 您能从表格中获取信息吗?请尝试回应您的价值观。回声 $_get["txtfname"];
  • 我最终使用您提供的链接 (html-form-guide.com/contact-form/php-email-contact-form.html ) 来设置表单。效果很好。谢谢。
  • 哦,不错。出了什么问题?
【解决方案3】:

问题可能来自邮件功能的错误配置。您必须正确配置它。

此外,您应该在“发件人”标题中提供电子邮件。

【讨论】:

    【解决方案4】:

    如果已发送邮件但未收到邮件,则此身份验证来自您的域 ...您的脚本可能运行良好 执行此操作的两种主要方法是使用 PHPMail() 或 SMTP。 PHPMail() 是开放的并被木马和病毒使用。大多数客户端都感染了仅使用 PHPMail() 发送邮件的文件,因为它不进行身份验证。它不会检查正在发送的电子邮件是否真的来自域,这会给邮件服务器带来很大压力,使合法邮件在队列中等待很长时间。

    如果您已经有一个使用 PHPMail() 函数的脚本,将其更改为 SMTP 非常简单,您只需更改 5 行代码并将电子邮件地址和密码(已在 cpanel 中创建)添加到代码,它会发送电子邮件就好了。

    if ($_POST['submit']){
    
    
    
     $from = "slick@meetslick.com"; //enter your email address
     $to = "slickbozz@gmail.com"; //enter the email address of the contact your sending to
     $subject = "Contact Form"; // subject of your email
    
    $headers = array ('From' => $from,'To' => $to, 'Subject' => $subject);
    
    $text = ''; // text versions of email.
    $html = "<html><body>Name: $name <br> Email: $email <br>Message: $message <br></body></html>"; // html versions of email.
    
    $crlf = "\n";
    
    $mime = new Mail_mime($crlf);
    $mime->setTXTBody($text);
    $mime->setHTMLBody($html);
    
    //do not ever try to call these lines in reverse order
    $body = $mime->get();
    $headers = $mime->headers($headers);
    
     $host = "localhost"; // all scripts must use localhost
     $username = "support@meetslick.com"; //  your email address (same as webmail username)
     $password = " here "; // your password (same as webmail password)
    
    $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true,
    'username' => $username,'password' => $password));
    
    $mail = $smtp->send($to, $headers, $body);
    
    if (PEAR::isError($mail)) {
    echo("<p>" . $mail->getMessage() . "</p>");
    }
    else {
    echo("<p>Message successfully sent!</p>");
    // header("Location: http://www.meetslick.com/");
    }
      }
    

    我希望有一天这会对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 2010-12-09
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多