web-dev-qa-db-ja.com

PHPMAILERは送信せず、エラーも発生しません

ユーザーに連絡フォームに記入してもらい、それが私のメールに送信されるようにします。しかし、何らかの理由で機能していません。エラーメッセージのない空白のページが表示されるだけで、テキストやメールも送信されません。

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   = "[email protected]"; // SMTP account username example
    $mail->Password   = "password";        // SMTP account password example

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

    $mail->AddAddress('[email protected]', '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';
13
Wale

動作するようになったため、「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   = "[email protected]"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

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

$mail->AddAddress('[email protected]', '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';
14
Wale

呼び出す必要があります:

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

ドキュメントから:

true paramは、エラー時に例外をスローすることを意味し、キャッチする必要があります。

14
user3670588

SMTPDebugを有効にしてもエラーメッセージが表示されず、同じ問題が発生しました。実例を探し回った後、SMTP Secure値が含まれていないことに気付きました。この行を追加してみてください:

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

今魅力のように動作します。

6
Syclone

私のために働いたのは、FromをUsernameに、FromNameを$ _POST ['email']に設定することでした

お役に立てれば

2
Raf

私は、送信するHTMLファイルをロードしようとしていましたが、これはUbuntuサーバーのwww-dataグループに属していませんでした。

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

問題が解決しました!

1
Andy

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   = "[email protected]"; // SMTP account username example
    $mail->Password   = "password";        // SMTP account password example

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

    $mail->AddAddress('[email protected]', '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();
}
1
Bastien D

既存のクラス構造に、独自のハンドラーまたはクローバー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

御Works走を働かせ、車輪の再発明を私を救った。

0
Mike M0ITI