PEAR::Mailで220送信エラー

ショコラ
ショコラ

PEAR::Mailで220送信エラー

PHP8を使用しています。2024年の話です。

PEAR::Mailでメールを送信しようとすると、
「authentication failure [SMTP: STARTTLS failed (code: 220, response: 2.0.0 Ready to start TLS)]」
のエラーがでます。
因みに、メールサーバーに「メール用の SSL/TLS 証明書」を設定しない場合です。
証明書があると正常に送信できます。
さらにポート25で接続する。

これもネット上に色々な記事がありますが、古いものが多くコピペしても思った通りに動きません。
ChatGPT先生も役に立ちませんでした。

もっさん先輩
もっさん先輩

元々はこちらで送りたかった。

$params = array(
  'host'     => 'answorz.com',
  'port'     => '587',
  'auth'     => true,
  'username' => 'mossan@answorz.com',
  'password' => '123456',
);

しかし、なんどやっても「authentication failure [SMTP: STARTTLS failed (code: 220, response: 2.0.0 Ready to start TLS)]」

ポート25で送信するように変更する。
因みに auth を false にすると「Failed to add recipient: test@answorz.com [SMTP: Invalid response code received from server (code: 554, response: 5.7.1 test@answorz.com: Relay access denied)]」のエラーがでました。送信の認証効いています。

$params = array(
  'host'     => 'answorz.com',
  'port'     => '25',
  'auth'     => true,
  'username' => 'mossan@answorz.com',
  'password' => '123456',
);
$mail_object = Mail::factory('smtp',$params);

SMTPファイルの修正を行う必要ありです。
https://www.authsmtp.com/php-pear-mail/ を参考にしました。

  //public function auth($uid, $pwd , $method = '', $tls = true, $authz = '')
    public function auth($uid, $pwd , $method = '', $tls = false, $authz = '')

送信元のソースは↓のようになっていた。tlsまで渡せていません・・・。なのでここを書き換えるのもありなのかもしれません。

            if (PEAR::isError($res = $this->_smtp->auth($this->username,
                                                        $this->password,
                                                        $method))) {

↓修正後

            if (PEAR::isError($res = $this->_smtp->auth($this->username,
                                                        $this->password,
                                                        $method,false))) {

以上

Scroll to Top