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))) {
以上