簡単なガイド: PHPMailer を使用してテストメールを送信する
P粉344355715
2023-08-26 21:06:15
<p>Debian/Bullseye でローカル Apache2 サーバーを実行しています。 PHPMailer を動作させようとしましたが、失敗しました。 PHPMailer をインストールするには 2 つの異なる方法があるようです。1 つ目は、composer を使用する方法で、これが私が最初に試した方法です。サイトのルートにベンダー フォルダーが作成され、このフォルダーには autoload.php ファイルと他のいくつかのファイルが含まれます。ファイルには次の内容が含まれています: </p>
<pre class="brush:php;toolbar:false;"><?php
// autoload.php @Composer によって生成
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitd359baac21f520c04e608f4eed750560::getLoader();</pre>
<p>これは不完全に見えます (終了タグがありません)。とにかく、「test.php」サンプルを動作させることができません。 </p>
<p>もう 1 つの方法は、gethub Web サイトから .zip ファイルをダウンロードし、サイトのルート ディレクトリに抽出することです。名前を変更すると、PHPMailer フォルダーができました。 「mailer.php」の例を使用しても効果はありません。 </p>
<p>どちらの場合も、ドメインの実際のアカウント情報 (電子メールの送信、ログイン パスワード、SMTP サーバー名、ホストの SMTP セキュリティ、ポート設定) を使用するように SMTP 情報を変更しましたが、拒否に対しても応答しませんでした。メールを受信しました。何も起こらなかった。表示されるのは空白の Web ページだけです。 </p>
<p> 以前に使用した php スクリプトがまだ動作するため、php を実行しています (テスト サイトから - 実際のサイトでは smtp の使用を要求しており、PEAR モジュールをインストールできません)。</p>
<p>これが私が使用している mailer.php スクリプトです - 一部の詳細は隠されています: </p>
<pre class="brush:php;toolbar:false;"><?php
//PHPMailer クラスをグローバル名前空間にインポートします
//これらは関数内ではなく、スクリプトの先頭にある必要があります
PHPMailer\PHPMailer\PHPMailer を使用します。
PHPMailer\PHPMailer\SMTP を使用します。
PHPMailer\PHPMailer\Exception を使用します。
'PHPMailer/src/Exception.php' が必要です。
'PHPMailer/src/PHPMailer.php' が必要です。
'PHPMailer/src/SMTP.php' が必要です。
// インスタンスを作成します。例外を有効にする場合は 'true' を渡します
$mail = 新しい PHPMailer(true);
試す
{
//サーバー設定
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //詳細なデバッグ出力を有効にする
$mail->isSMTP(); //SMTPを使用して送信
$mail->Host = 'mail.<domain>.ca'; //通過するSMTPサーバーを設定
$mail->SMTPAuth = true; //SMTP認証を有効にする
$mail->Username = 'mail@<domain>.ca'; //SMTP ユーザー名
$mail->Password = ''; //SMTP パスワード
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //暗黙的な TLS 暗号化を有効にする
$mail->Port = 465; //接続先の TCP ポート; 'SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS' が設定されている場合は、587 を使用してください
//受信者
$mail->setFrom('mail@<ドメイン>.ca', '私から');
$mail->addAddress('gary@<domain>.ca', 'to me'); //受信者を追加
// $mail->addAddress('Recipient@emailaddress.com'); // 名前はオプションです
// $mail->addReplyTo('yourname@domain.com', 'Your Name');
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
//添付ファイル (オプション)
// $mail->addAttachment('/var/tmp/file.tar.gz'); // 添付ファイルを追加
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // オプションの名前
//コンテンツ
$mail->isHTML(true); //メール形式をHTMLに設定します
$mail->Subject = 'これが件名です';
$mail->Body = 'これは太字の HTML メッセージ本文です!';
$mail->AltBody = 'これは非 HTML メール クライアントのプレーン テキストの本文です';
$mail->send();
echo 'メッセージが送信されました';
}
catch (例外 $e)
{
echo "メッセージを送信できませんでした。メーラー エラー: {$mail->ErrorInfo}";
}
?></pre>
<p>TLS 回線はホスティング会社からのものなので、正しいと思います。 </p>
<p>テストで必要のないオプションをコメントアウトしましたが、それでも機能しません。誰か私が間違っていることを理解できますか? </p>
<p>ありがとうございます。 </p>
###なるほど、分かりました。ホスティング会社はテスト コードを提供しており、その例では smtp.domain.com が使用されています。実際、彼らの smtp サーバーは smtp ではなくメールです。存在しないサーバーに直面するとコードの実行が停止するだけだと思います...