はじめに
PHP学習中に起こった、解決まで時間がかかったエラーをどう解決したかまとめる
Uncaught Error: Call to undefined function ○○(mb関数)
試したこと
- 独習PHPのセットアップ順を再度試した
- XAMMP再インストール
- php.ini
- 環境変数PATH再設定&最も上に設置
- 学習用コードファイルをhtdocsディレクトリにコピー
- XAMMP再インストール
- VSCode
- settings.json確認
- 拡張機能確認
- ネット検索
👆環境PATH設定確認した所、指定先が間違っていた
学習用コードファイルをhtdocsディレクトリにコピーし、そこからファイルを実行したときに上手くいった
※原因はわからん
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:\○○
▼和訳
mb_send_mail(): php.iniの "SMTP "と "smtp_port "の設定を確認するか、ini_set()を使用してください。
▼試したこと(1/3)
資料:知恵袋
・設定でSMTPサーバにlocalhostを指定しているため、自分のPC上にSMTPサーバが動いていなければエラーになる
・対策
1. 自身の契約しているISPのアドレスまたは利用できるSMTPサーバーの情報を書く
2. 「実際にはメールが飛んで行かない」ダミーのメールサーバを使う
👆使い方わからんから別の方法を探す
▼試したこと(2/3)
資料:独習PHP 第4版
1)php.iniの設定を変更する(Windows版)
<変更前>
1)メール送信に利用する文字コードの変更設定
;mbstring.language = Japanese
2)sendmail.exeを有効化
;sendmail_path =
<変更後>
1)
mbstring.language = "Japanese"
2)
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
2)sendmail.iniの設定を変更する(Windows版)
<変更前>
1)SMTPサーバーのホスト名を変更
smtp_server=mail.mydomain.com
2)SMTPサーバーのポート番号
smtp_port=25
3)認証ユーザー名
auth_username=
4)認証パスワード
auth_password=
5)送信元アドレス
force_sender=
<変更後>
1)
smtp_server=smtp.example.com
2)
smtp_port=587
3)
auth_username=user01
4)
auth_password=passwd01
5)
force_sender=user01@example.com
3)Apacheを再起動
・サンプルを実行した結果、送信されたメールを指定の宛先で受け取ることができれば成功
👆参考書に書かれている内容のまま変更した状態で以下のコードを実行すると以下のようなエラーメッセージが来た
<?php
$to = 'wings@example.com';
$subject = '独習PHP 改訂版';
$body = "こんにちは、mb_send_mail関数!\nどうですか?";
$headers = "From : user01@example.com\n";
$headers .= "Cc : yamada@example.com\n";
$headers .= "X-Mailer : PHP 8\n";
if (mb_send_mail($to, $subject, $body, $headers)) {
print 'メール送信に成功しました。';
} else {
print 'メール送信に失敗しました。';
}
You must configure the smtp_server and default_domain in:
C:\xampp\sendmail\sendmail.ini
or
HKLM\Software\Sendmail
/// 和訳
smtp_serverとdefault_domainを設定する必要があります。
👆書籍にある事をそのまま実行していた為、自身の環境に合わせていない。各変更項目の確認を再度行う必要がありそう。
▼試したこと(3/3)
「▼試したこと(2/2)」で変更した設定項目の確認
目的:自身のGmailを使って自分あてにメールを送りたい
資料:GmailのSMTPサーバーを使って無料でメールを送信する方法
・Gmailに合わせた変更を行う
<変更前(sendmail.ini)>
1)
smtp_server=smtp.example.com
2)
smtp_port=587
3)
auth_username=user01
4)
auth_password=passwd01
5)
force_sender=user01@example.com
<変更前後>
1)Gmailのデフォルトのサーバーアドレス
smtp_server=smtp.gmail.com
2)GmailのSMTPポート
smtp_port=587
3)メールアドレス
auth_username=you@gmail.com
4)ログインパスワード or アプリパスワード
auth_password=passwd01
👆ログインパスワードでやったら、「配信中にエラーが発生しました: アプリケーション固有のパスワードが必要です。」とエラーメッセージが来た。そのためアプリパスワードを設定して代わりに張り付けた
5)メールアドレス
force_sender=you@gmail.com
👆再設定して実行したら正しく処理された!
<?php
$to = 'you@gmail.com';
$subject = '独習PHP 改訂版';
$body = "こんにちは、mb_send_mail関数!\nどうですか?";
$headers = "From : you@gmail.com";
if (mb_send_mail($to, $subject, $body, $headers)) {
print 'メール送信に成功しました。';
} else {
print 'メール送信に失敗しました。';
}
// 結果
//メール送信に成功しました。