18

我试图让用户填写联系表格,然后将其发送到我的电子邮件。但由于某种原因它不起作用。我只是得到一个没有错误消息或任何文本和电子邮件的空白页也没有发送。

if (isset($_POST['submit']))
{
    include_once('class.phpmailer.php');

    $name = strip_tags($_POST['full_name']);
    $email = strip_tags ($_POST['email']);
    $msg = strip_tags ($_POST['description']);

    $subject = "Contact Form from DigitDevs Website";

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->CharSet = 'UTF-8';

    $mail->Host       = "mail.example.com"; // SMTP server example
    //$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "info@example.com"; // SMTP account username example
    $mail->Password   = "password";        // SMTP account password example

    $mail->From = $email;
    $mail->FromName = $name;

    $mail->AddAddress('info@example.com', 'Information'); 
    $mail->AddReplyTo($email, 'Wale');

    $mail->IsHTML(true);

    $mail->Subject = $subject;

    $mail->Body    =  $msg;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    if(!$mail->Send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
    exit;
}
echo 'Message has been sent';
4

9 回答 9

17

您需要致电:

$mail = new PHPMailer(true); // with true in the parenthesis

从文档中:

true参数意味着它将抛出我们需要捕获的错误异常。

于 2014-05-24T01:42:25.153 回答
14

它现在可以工作了,我没有包含“class.smtp.php”文件。工作代码如下:

 if (isset($_POST['submit']))
{
 include_once('class.phpmailer.php');

 require_once('class.smtp.php');

$name = strip_tags($_POST['full_name']);
$email = strip_tags ($_POST['email']);
$msg = strip_tags ($_POST['description']);

$subject = "Contact Form from DigitDevs Website";

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
//$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "info@example.com"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

$mail->From = $email;
$mail->FromName = $name;

$mail->AddAddress('info@example.com', 'Information'); 
$mail->AddReplyTo($email, 'Wale');

$mail->IsHTML(true);

$mail->Subject = $subject;

$mail->Body    =  $msg;
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->Send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
 echo 'Message has been sent';
于 2013-06-29T21:00:44.420 回答
9

即使启用了 SMTPDebug,我也遇到了同样的问题,没有错误消息。在搜索了工作示例后,我注意到我没有包含SMTP Secure值。尝试添加这一行:

$mail->SMTPSecure = 'ssl'; //secure transfer enabled

现在像魅力一样工作。

于 2013-12-04T19:52:43.423 回答
4

我有一个类似的问题。参考@Syclone 的回答。我使用的是默认的“tls”。

$mail->SMTPSecure = 'tls';

在我将其更改为 $mail->SMTPSecure = 'ssl'; It works 之后!我的邮件服务器只接受 SSL 连接。

于 2016-02-03T03:25:22.287 回答
2

对我有用的是将 From 设置为 Username 并将 FromName 设置为 $_POST['email']

希望这可以帮助

于 2014-04-26T12:40:18.430 回答
1

PHPMailer 使用异常。

尝试这个

try {

    include_once('class.phpmailer.php');

    $name = strip_tags($_POST['full_name']);
    $email = strip_tags ($_POST['email']);
    $msg = strip_tags ($_POST['description']);

    $subject = "Contact Form from DigitDevs Website";

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->CharSet = 'UTF-8';

    $mail->Host       = "mail.example.com"; // SMTP server example
    //$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "info@example.com"; // SMTP account username example
    $mail->Password   = "password";        // SMTP account password example

    $mail->From = $email;
    $mail->FromName = $name;

    $mail->AddAddress('info@example.com', 'Information'); 
    $mail->AddReplyTo($email, 'Wale');

    $mail->IsHTML(true);

    $mail->Subject = $subject;

    $mail->Body    =  $msg;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->Send();

    exit;

} catch (phpmailerException $e) {
  echo $e->errorMessage(); //error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage();
}
于 2013-06-28T12:39:13.213 回答
1

我试图加载一个 HTML 文件来发送,它不属于我的 Ubuntu 服务器上的 www-data 组。

chown -R www-data * 
chgrp -R www-data *

问题解决了!

于 2014-01-17T06:09:51.260 回答
0

我正在争论是否将我自己的处理程序或撬棒 PHPMailer 编写到我现有的类结构中。由于在 PHPMailer 系统中使用的 spl_autoload_register 函数的多功能性以及我现有的类结构,这非常容易。

我只是在现有的类结构中创建了一个基本类电子邮件,如下所示

<?php

   /**
     * Provides link to PHPMailer
     *
     * @author Mike Bruce
     */
   class Email {
      public $_mailer; // Define additional class variables as required by your application
      public function __construct()
      {
         require_once "PHPMail/PHPMailerAutoload.php" ;
         $this->_mailer = new PHPMailer() ;
         $this->_mailer->isHTML(true);
         return $this;
      }
   }
?>

从调用 Object 类的代码将是:

$email = new Email;
$email->_mailer->functionCalls();

// continue with more function calls as required

工作一种享受,让我重新发明了轮子。

于 2014-08-09T12:46:31.837 回答
0

试试这个 ssl 设置:

$mail->SMTPSecure  = 'tls'; //tls or ssl
$mail->SMTPOptions = array('ssl' => array('verify_peer'       => false,
                                          'verify_peer_name'  => false,
                                          'allow_self_signed' => true));
于 2021-04-13T17:58:23.810 回答