PHPMailerで外部SMTPサーバーへ接続に失敗します - PHPプロ!Q&A掲示板

4888

  • 募集中!! 0P

PHPMailerで外部SMTPサーバーへ接続に失敗します

質問日時 / 2017年11月28日 14:13    回答数 / 5件

Questioner:  tomatoma  このエントリーをはてなブックマークに追加 

キーワード / PHPMailer    PHP    SMTP   

閲覧いただき、ありがとうございます。
以前まで、QdmailにてSMTPに接続し、メールを送信しておりましたが、メールが送信できなくなっているのに気付き、PHPMailerに切り替えてみましたが、同様に外部SMTPサーバーに接続ができませんでした。
別途、サーバーやPHPMailerのオプション設定等が必要となってまいりますでしょうか。
ご教授のほど、よろしくお願いいたします。

※phpmailerは、composerにてPCにインストールし、サーバーにアップロードいたしました。
※メールアドレス、パスワードの組み合わせにて、hetemailにログインできるため、メールアドレスとパスワードの組み合わせも問題ないと思います。
fsockopenにてメールサーバーに接続できることは確認できておりますが、外部SMTPサーバーに接続ができませんでした。

使用環境
ヘテムルレンタルサーバー
PHPバージョン:7.1.2
PHPMailerバージョン:6.0.1

ーーーーエラー文
2017-11-28 04:59:56 SERVER -> CLIENT: 220 mail.heteml.jp HETEML-Fsecure
2017-11-28 04:59:56 CLIENT -> SERVER: EHLO www.heteml.jp
2017-11-28 04:59:56 SERVER -> CLIENT: 250-Welcome to Heteml2.0 smtp server...250-8BITMIME250-AUTH LOGIN PLAIN CRAM-MD5250 SIZE 104857600
2017-11-28 04:59:56 CLIENT -> SERVER: AUTH CRAM-MD5
2017-11-28 04:59:56 SERVER -> CLIENT: 334 PDE4MTc3LjE1MTE4NDUxOTZAbWFpbDIyLmhldGVtbC5qcD4=
2017-11-28 04:59:56 CLIENT -> SERVER: dGVzdEB0b2ViaXN1LmpwIDYyNmZjYmYwZWVmMWJiYWFjNzdiM2YyNTU2ODA0MGYx
2017-11-28 05:00:01 SERVER -> CLIENT: 535 authentication failed (#5.7.1)
2017-11-28 05:00:01 SMTP ERROR: Username command failed: 535 authentication failed (#5.7.1)
SMTP Error: Could not authenticate.
2017-11-28 05:00:01 CLIENT -> SERVER: QUIT
2017-11-28 05:00:01 SERVER -> CLIENT: 221 Welcome to Heteml2.0 smtp server...
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
ーーーーエラー文

ーーーーソースコード
  1. <?
  2. // mbstringの日本語設定
  3. mb_language("japanese");
  4. mb_internal_encoding("UTF-8");
  5.  
  6. require_once( "./phpmailer/vendor/autoload.php" );
  7.  
  8. use PHPMailer\PHPMailer\PHPMailer;
  9. use PHPMailer\PHPMailer\Exception;
  10.  
  11. // メールホスト名
  12. define('MAIL_HOST','mail.heteml.jp');
  13.  
  14. // メールユーザー名・アカウント名
  15. define('MAIL_USERNAME','test@heteml.jp');
  16.  
  17. // メールパスワード
  18. define('MAIL_PASSWORD','testxxxxx');
  19.  
  20.  // SMTPプロトコル(sslまたはtls)
  21. define('MAIL_ENCRPT','ssl');
  22.  
  23. // 送信ポート(ssl:465, tls:587)
  24. define('SMTP_PORT'465);
  25.  
  26. // メールアドレス
  27. define('MAIL_FROM','test@heteml.jp');
  28.  
  29. // 表示名
  30. define('MAIL_FROM_NAME','テスト');
  31.  
  32. // メールタイトル
  33. define('MAIL_SUBJECT','テスト');
  34.  
  35.   $mail = new PHPMailer();           //PHPMailerのインスタンス生成
  36.   // $mail->CharSet = "iso-2022-jp";    //文字コード設定
  37.   // $mail->Encoding = "7bit";          //エンコーディング
  38.     $mail->CharSet = "UTF-8";    //文字コード設定
  39.     $mail->Encoding = "base64";          //エンコーディング
  40.   
  41.     $mail->IsSMTP();                        // SMTPサーバー使用
  42.     $mail->SMTPAuth = true;                 // SMTPサーバー使用
  43.   $mail->SMTPDebug = 2;                   // debugging: 1 = errors and messages, 2 = messages only
  44.   
  45.     $mail->Host = MAIL_HOST// SMTPサーバー
  46.     $mail->Username = MAIL_USERNAME// SMTPユーザー名
  47.     $mail->Password = MAIL_PASSWORD// SMTPパスワード
  48.     $mail->SMTPSecure = MAIL_ENCRPT// SMTP暗号化形式
  49.     $mail->Port = SMTP_PORT// SMTPポート番号
  50.     
  51.     $mail->setFrom(MAIL_FROM,MAIL_FROM_NAME)// 差出人
  52.     $mail->addReplyTo(MAIL_FROM,MAIL_FROM_NAME)// 返信用アドレス
  53.     $mail->addAddress('test2@heteml.jp''テスト')// 受信アドレス
  54.     $mail->addCC('test3@gmail.com')// CCアドレス
  55.     $mail->addBcc('test3@gmail.com')// BCCアドレス
  56.     
  57.   $mail->WordWrap = 50// 折り返しを50文字に設定
  58.     $mail->isHTML(false);    // HTMLフォーマットは設定:(true)
  59.   // $mail->addAttachment('xxxxx.jpg');  // 添付ファイル
  60.   
  61.     $mail->Subject = MAIL_SUBJECT// メール件名
  62.     $body = 'メールの中身';
  63.     $mail->Body  = $body// メール本文
  64.     // $mail->AltBody = $body; // HTMLフォーマットはAltBodyも指定
  65.   
  66.     // メール送信の実行
  67.     if(!$mail->send()) {
  68.       echo 'メッセージは送られませんでした!';
  69.       echo 'Mailer Error: ' . $mail->ErrorInfo;
  70.     } else {
  71.       echo '送信完了!';
  72.     }
  73. ?>
ーーーーソースコード


ツリー一覧

┣A01shimixSMTPがmail.heteml.jpで、phpスクリプトもヘテムルに
┃┗A01-1tomatomaありがとうございます。 ヘテムルのメールサーバーと
┃ ┗A01-1-1shimix>25ポートを指定する場合にもメールサーバーやパス
┃  ┗A01-1-1-1tomatomaありがとうございます。 25ポートにてテストを行って
┗A02oraoradesukaデバッグ情報を見た限りでは、CRAM-MD5によるSMTP認証

回答一覧

並び替え:

A01
answerershimix [11月29日 10:04]

SMTPがmail.heteml.jpで、phpスクリプトもヘテムルに設置されているのでしょうか?

#であれば「外部」SMTPサーバではないと思いますが・・・

同一サーバもしくは同一LAN内のサーバであれば、まずはプレーンに(認証などを挟まずに)25番ポートに繋いでみては?

この意見に回答する

ツリーへ TOPへ

A01-1
replyertomatoma [11月29日 17:12] (最終編集:11月29日 17:14)

ありがとうございます。
ヘテムルのメールサーバーとなっておりますが、「mail.heteml.jp」ではございません。
表記がわかりづらく、ご迷惑をおかけいたしました。
現在は、サーバー内にて実行を行なっておりますが、他のサーバーにも設置しているところがありますので、外部サーバーという表現をさせていただいておりました。
まずは、ヘテムルサーバー内を優先して調整を試みております。

25ポートを指定する場合にもメールサーバーやパスワードの設定は必要となってまいりますでしょうか。
また、他の外部サーバーにて運用するためには、ヘテムルのサーバー設定等の変更等が必要となってまいりますでしょうか。
お忙しい中、大変恐縮でございますが、何卒よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [11月30日 09:00]

>25ポートを指定する場合にもメールサーバーやパスワードの設定は
>必要となってまいりますでしょうか。

メールサーバは指定しないと接続先が不明ですので(汗

まずはメールサーバのみ指定で。それがダメなら(内部からの接続の場合でもSMTP認証を要求していれば)認証の設定を追加して試せばいいと思います。


>また、他の外部サーバーにて運用するためには、ヘテムルのサーバー
>設定等の変更等が必要となってまいりますでしょうか。

他サーバから接続する場合にはMUA(メールクライアント)と同様の設定になりますので、SSL+SMTP認証が基本になります。今のソースのとおりSMTPs(ポート:465)でいいと思います。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyertomatoma [11月30日 15:18]

ありがとうございます。
25ポートにてテストを行ってみましたが、
同様の「SMTP connect() failed.」というエラーとなることが確認できました。
465/ssl、587/tls、587/プロトコルなし
その他、問題解決に試せる事項はございませんでしょうか。
お手数をおかけいたしますが、何卒、よろしくお願いいたします。

この意見に回答する

ツリーへ TOPへ

A02
answereroraoradesuka [11月30日 17:16]

デバッグ情報を見た限りでは、CRAM-MD5によるSMTP認証でエラーが出ています。

PHP経由のSMTP送信を試す前に、まずは普通のメールソフトに情報を設定し、正常にメールが送信できる事は確認できていますか?

問題の切り分けのために、まずはそこから試すと良いですね。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)