我如何修复sendmail.php不起作用?

时间:2016-07-19 08:43:22

标签: php html sendmail

我有网站,我不是专业但已经完成除了sendmail问题。 当我点击"立即发送"按钮消息显示在屏幕上"感谢您的留言"但我没有收到任何电子邮件。

  • 我检查了垃圾邮箱,它也不存在

  • 我检查了phpinfo SMTP端口打开和25

  • 我检查了phpinfo senmail_path / usr / sbin / sendmail -t -i

  • 我打电话给托管公司并发送电子邮件,他们说每个服务器都可以检查你的sendmail脚本。

这里是sendmail.php文件;

<?php
$name       = @trim(stripslashes($_POST['name']));
$from       = @trim(stripslashes($_POST['email'])); 
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to         = 'tradertarik@gmail.com';

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $message, $headers);
die;

我需要帮助才能找出问题所在。我检查了其他问题,并以某种方式对我没有任何帮助。 提前谢谢。

P.S。我不确定是否有人需要使用HTML代码,但我认为添加它也会很好。

    <div class="contact-form wow fadeIn" data-wow-duration="1000ms" data-wow-delay="600ms">
      <div class="row">
        <div class="col-sm-6">
          <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
            <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
              <div class="col-sm-6">
                <div class="form-group">
                  <input type="text" name="name" class="form-control" placeholder="Name" required>
                </div>
              </div>
              <div class="col-sm-6">
                <div class="form-group">
                  <input type="email" name="email" class="form-control" placeholder="Email Address" required>
                </div>
              </div>
            </div>
            <div class="form-group">
              <input type="text" name="subject" class="form-control" placeholder="Subject" required>
            </div>
            <div class="form-group">
              <textarea name="message" id="message" class="form-control" rows="4" placeholder="Enter your message" required></textarea>
            </div>                        
            <div class="form-group">
              <button type="submit" class="btn-submit">Send Now</button>
            </div>
          </form>   
        </div>

2 个答案:

答案 0 :(得分:1)

您的$headers参数不正确;它应该是string而不是array。来自PHP manual

  

要插入电子邮件标题末尾的字符串。

     

这通常用于添加额外的标题(From,Cc和Bcc)。应使用CRLF(\ r \ n)分隔多个额外标头。如果使用外部数据来组成此标头,则应对数据进行清理,以便不会注入不需要的标头。

您应该能够像这样解决问题:

mail($to, $subject, $message, implode("\r\n", $headers));

答案 1 :(得分:0)

如果没有正确配置sendmail,

来自php的邮件功能很难使用。而不是,我确实使用了https://github.com/PHPMailer/PHPMailer(不要惊慌失措,你只需要来自class.phpmailer.php和class.smtp.php的2个文件)。

基于PHPMailer的send_mail函数示例

function send_mail($subject, $body, $altbody, $to, $name, $attach = '')
{
$mail = new PHPMailer(true);
$mail->IsHTML(true);
$mail->IsSMTP();
$mail->CharSet = 'text/html; charset=UTF-8;';

$mail->Host       = "some.external.smtp.server";    // SMTP server example
$mail->SMTPDebug  = 0;                      // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                   // enable SMTP authentication
$mail->Port       = port_for_external_smtp;                     // set the SMTP port for the GMAIL server
$mail->Username   = "username_for_external_smtp_server";        // SMTP account username example
$mail->Password   = "pass";             // SMTP account password example

try 
    { 
        $mail->setFrom('address', 'name'); 
        $mail->addReplyTo($to, $name); 
        $mail->addAddress($to, $name);
        $mail->Subject = $subject; 
        $mail->Body = $body;
        $mail->isHTML(true);
        $mail->AltBody = $altbody;  // altbody if for text only mail
        if (!($attach == ''))
        {
                $mail->AddAttachment($attach); // attachment 
            }
        $mail->send(); 
        } 
catch (phpmailerException $e) 
    { 
        echo $e->errorMessage(); //Pretty error messages from PHPMailer 
        } 
catch (Exception $e) 
    { 
        echo $e->getMessage(); //Boring error messages from anything else! 
        }   
}