PHP/XAMPPのローカルホストからのメール送信
1) 困っている点
PHP初心者です。PHPでXAMPPを用いてお問い合わせフォームからローカルホスト経由でメールを飛ばすことができるよう環境設定をしていますが、つまづいています。ご教示くださるようお願いします。他に試す箇所、確認すべき個所はありますでしょうか。 環境条件は、Windows11を使用。メールアドレスは外部プロバイダーメール(OCNの@dream.com)を用いて設定を試みています。XAMPPはApache/2.4.56 (Win64) OpenSSL/1.1.1t PHP/8.2.4 Server at localhost Port 80。
(なお、一通り、PHPの基本的なプログラムは記載し、Marina DB含め、ローカルホストからメールを飛ばさないPHPコードは無事動いています。)
2)PHPのコード
ローカルホストから自分のgmailにメールに飛ばすテスト hogehoge@gmail.comのhogehogeの箇所は自分のメールアドレスを記載。PHPではエラーを表示するようにさせた。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
mb_language('Japanese');
mb_internal_encoding('utf-8');
$to = 'hogehoge@gmail.com'; ←hogehogeは自分のgmailアドレス
$subject = 'メール送信テスト:test for PHP';
$message = 'メール送信テスト:test for PHP';
$headers = 'From: 自動送信 <hogehoge@dream.com>' . "\r\n"; ←hogehogeは自分のプロバイダーアドレス
$headers .= 'Content-Type: text/plain; charset=utf-8';
if(mb_send_mail($to, $subject, $message, $headers)) {
echo "送信完了";
} else {
echo "送信失敗";
}
?>
3) phpホルダー内のphi.iniの記載 (一部抜粋)
[mail function] ; For Win32 only. ; https://php.net/smtp
SMTP=localhost ← 修正
https://php.net/smtp-port smtp_port=25 ← 修正
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" ← 修正
上記のSMTP、Portのパラメータは下記のHPを参考にし、倣った。
https://miya-system-works.com/blog/detail/xampp-send-mail/
*なお、ここの箇所では下記のパラメータでも行ったがNG。エラーメッセージは5)ii)に記載。
このパラメータはsendmail.iniで入力したものと同じ。
SMTP = smtp.ocn.ne.jp
smtp_port = 465
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
4) sendmail内ホルダーのsendmail.iniの記載 (一部抜粋)
hogehogeの箇所は自分のアドレス、P/Wを入力。
pop3_~=~の箇所は三行空欄。
smtp_server=pop.ocn.ne.jp ← 修正(プロバイダー案内通り)
smtp_port=465 ← 修正 (プロバイダー案内通り)
smtp_ssl=auto ← 修正
auth_username=hogehoge@dream.com ← 自分のアドレスに修正 auth_password=hogehoge ← 自分のPWに修正
; if your smtp server uses pop3 before smtp authentication, modify the ; following three lines. do not enable unless it is required.
pop3_server= ← デフォルトのまま空欄
pop3_username= ← デフォルトのまま空欄
pop3_password= ← デフォルトのまま空欄
force_sender=hogehoge@dream.com ← 自分のアドレスに修正
5) ブラウザーでの表示
(上記2)のコードを走らせた後)
ポートに接続できないとのエラーメッセージ。しかし、6)に記載したThunderbirdからはポート:465からメールを送れている。
i) SMTP:localhost,、SMTPポート:25の場合
Warning: mb_send_mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\test\test_sendmail_2.php on line (mb_sendとしたPHPコードのラインの箇所)
送信失敗
ii) SMTP :smtp.ocn.ne.jp、 SMTPポート:465の場合
Warning: mb_send_mail(): Failed to connect to mailserver at "pop.ocn.ne.jp" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\test\test_sendmail_2.php on line (mb_sendとしたPHPコードのラインの箇所)
送信失敗
6)補足
なお、プロバイダーメールアドレス、PWは念のためローカルPC上にメールソフトを新規にThunderbirdを落とし、設定したところ、溜まっていたプロバイダーメールは全て落ちてきたのでPWに間違いはないことを確認済み。その際、SMTPサーバー名とsmtp_portは自動検出されたので、手打ちはしていない。Thunderbirdでは自動的にSMTPサーバー名:smtp.ocn.ne.jp、ポート:465で設定されていた。
以上よろしくお願いします。説明不足、用語の使い方で適切でない箇所がありましたら、修正、追記します。
お礼
早速のご回答ありがとうございます! smtpサーバーの設定はしておりますが、ご提案の方法で再度挑戦し、結果を明日ご連絡いたします。
補足
ご回答内容から、下記プログラムを実行してみましたところ、 <?php include('Mail.php'); $recipients = 'sample@nifty.com'; $headers['From'] = 'sample@nifty.com'; $headers['To'] = 'sample@nifty.com'; $headers['Subject'] = 'Test message'; $body = 'Test message'; $params['sendmail_path'] = '/usr/sbin/sendmail'; // Mail::factory メソッドを使用してメールオブジェクトを作成します $mail_object =& Mail::factory('sendmail', $params); $mail_object->send($recipients, $headers, $body); ?> 下記エラーが発生しました。 Strict Standards: Non-static method Mail::factory() should not be called statically in C:\xampp\htdocs\test\mail_test_sendmail.php on line 15 Strict Standards: Non-static method Mail_RFC822::parseAddressList() should not be called statically, assuming $this from incompatible context in C:\xampp\php\PEAR\Mail.php on line 253 Strict Standards: Non-static method PEAR::raiseError() should not be called statically, assuming $this from incompatible context in C:\xampp\php\PEAR\Mail\sendmail.php on line 164 Strict Standards: Non-static method PEAR::getStaticProperty() should not be called statically, assuming $this from incompatible context in C:\xampp\php\PEAR\PEAR.php on line 871 ?> やはり全く意味がわからなく行うことに、無理があるように思います。 PHPを学ぶコース(学校)を探してみます。 ご教授感謝いたします。