PHP mail()函数没有发送

时间:2015-02-23 09:50:20

标签: php email server

我正在尝试使用PHP发送电子邮件 我正在使用这种形式:

<form class="pure-form pure-form-aligned" action="contact.php">
    <fieldset>
        <input type="Text" placeholder="Nome" name="Name">
        <input type="email" placeholder="Email" name="email">
         </fieldset>
         <fieldset>
        <button type="Reset" class="pure-button pure-button-primary">Limpar</button>
        <button type="submit" class="pure-button pure-button-primary">Enviar</button>
        </fieldset>

</form>

和这个PHP代码

<?php
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$field_name = $_POST['cf_name'];
$field_email = $_POST['cf_email'];

$mail_to = 'nelson.maia@geralucros.com';
$subject = 'GeraRelax: '.$field_name;

$body_message = 'De: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";

$headers = 'De: '.$field_email."\r\n";
$headers .= 'Responder para: '.$field_email."\r\n";

$mail_status = @mail($mail_to, $subject, $headers);

if ($mail_status) { ?>
    <script language="javascript" type="text/javascript">
        alert('Obrigado pela contacto.');
        window.location = 'index.php';
    </script>
<?php
}
else { ?>
    <script language="javascript" type="text/javascript">
        alert('Envio falhado');
        window.location = 'index.php';
    </script>
<?php
}
?>

我之前使用过它,但现在它不起作用。我猜这与服务器配置有关? 有人可以启发我吗?

3 个答案:

答案 0 :(得分:1)

您需要添加表格METHOD!

<form class="pure-form pure-form-aligned" action="contact.php" METHOD="POST">

也不见了。添加到标题。

$headers .= 'De: '.$field_email."\r\n";

同样输入NOME应为NAME

<input type="Text" placeholder="Nome" name="Name">

TYPO IN VARIABLE NAMES

$field_name = $_POST['name'];
$field_email = $_POST['Email'];

答案 1 :(得分:0)

如果您查看了PHP手册,那么您的问题是您错误地创建了mailhttp://php.net/manual/pt_BR/function.mail.php // http://php.net/manual/en/function.mail.php

您会看到mail($to, $usbject, $message, $headers);并且您的版本没有这样做,您的邮件中没有$message值。

同时添加

error_reporting(E_ALL);
ini_set('display_errors', 1);

在代码顶部显示错误消息,这些消息可以为您提供有关电子邮件发送失败原因的更多反馈。并从您的邮件功能中删除@,直到您确定它有效。

你应该

 error_reporting(E_ALL);
 ini_set('display_errors', 1);
 ...
 $mail_status = mail($mail_to, $subject, $body_message, $headers); 

建议:

  • 使用UTF-8字符集,如果可能,使用UTF-16。

  • 使用专用的邮件程序扩展程序,例如 PHPMailer Swift Mailer

  • 在您的代码中添加错误跟踪(例如),直到您确定它有效。

  • 每天吃五个新鲜水果和蔬菜。

  • 还从PHP Mail中注意到:

  

发送邮件时,邮件必须包含From标头。这可以   使用additional_headers参数设置,或者可以设置默认值   php.ini中。

     

如果不这样做,将导致类似于警告的错误消息:   mail():&#34; sendmail_from&#34;未设置在php.ini或custom&#34; From:&#34;头   失踪。 From标头还设置了Windows下的Return-Path。

答案 2 :(得分:-1)

在此处添加表单方法:

<form class="pure-form pure-form-aligned" action="contact.php">

在此处添加提交按钮名称:

 <button type="submit" name="submit" class="pure-button pure-button-primary">Enviar</button>

将php代码更改为:

<?php if(isset($_POST['submit'])){

   // your code here..
    .
    .
    .
   // change the mail headers..
   $headers .= 'De: '.$field_email."\r\n";    
} ?>