itB!HatenaCopyAWSのCloud9環境でPHPの学習を進めています。レンタルサーバーを使って実際に作ったPHPが本番環境で動くかを確かめたり、といったことも行っています。PHPのmb_send_mailというメール送信の関数の使い方の話です。Cloud9環境では動くけどレンタルサーバーでは動かない事もあるので調べていました。侍エンジニア塾というプログラミングスクールに入ってるんですけど、自分で調べて解決したので記事にしています。いうことで今日はPHPのmb_send_mail関数を使ったメール送信をやってみました。教材のmb_send_mailが動いたり動かなかったりphpでメール送信するための手順は2つ1mb_send_mailを動かすphpファイルの作成2php.iniファイルの設定この2つの手順ですすめていきます。mb_send_mail関数のリファレンスを確認さてphpのコーディングをする前に関数のリファレンスを確認して引数やら使い方やらを見ていきましょう。mb_send_mailという関数はメールを送信する関数です。mail()関数でもメール送信はできるけどmb(マルチバイト)日本語を送る事を想定するとmb_send_mail関数を使った方が良いということで基本的にはmb_send_mailを使うようです。string型で送信先のメールアドレスを指定します。アドレスをカンマで区切れば複数の宛先を指定できます。string型でこのメールの本文を記述します。メールヘッダの最後に挿入されるstringまたはarrayとなっています。Bcc、返信先アドレスを指定したりできます。これでmb_send_mail関数を呼び出して成功すればTRUEが、失敗すればFALSEが返ります。以下のPHPファイルを用意します。MAILTOやFromやReturn-Pathは適宜編集してください。このphpファイルをレンタルサーバーにアップロードしてブラウザでアクセスするだけでメールが送信されます。"レンタルサーバーでのメール送信テストです。"このメールを受け取ったということはちゃんと送信されていますね。<p>メール送信が完了しました。"レンタルサーバーでのメール送信テストです。"このメールを受け取ったということはちゃんと送信されていますね。/><title>メール送信完了画面</title></head><body><p>メール送信が完了しました。</p></body></html>もしこのソースで試すなら、MAILTOはご自身のメールアドレスを設定してください。$headersにはヘッダー情報を入れていきますが、Fromだけでも大丈夫です。'From:from@pg-happy.jp';とすればOKです。ちなみにFromのメールアドレスは架空のでも問題ありませんでした。(本当は良くないと思うけど)レンタルサーバーによってはそのサーバー内で作成したメールアドレスしか受け付けない場合もあるかもしれません。PHPのリファレンスによるとFromは必ず記述しなければ以下のWarningが出ると書かれています。missingけど私がテストしたときはFromが無くてもメール送信できちゃいました。その際の送信元はレンタルサーバーのデフォルトメールアドレスになっていました。サーバーのphp.iniファイルの設定mb_send_mail関数を使うにあたってサーバー内にあるphp.iniファイルを編集する必要がある場合があります。私が使ってるレンタルサーバーのエックスサーバーでは特に編集の必要はありませんでしたけど。以下のように記述があると思いますがこのままで問題なし。-i最初メール送信ができなくて色々調査してたんですけど、ネットのブログとかでは以下のように編集すべし、とか書かれているブログもありました。-iSTMPには自分が契約しているサーバーの番号を記述し、smtp_portには25ではなくて587を指定せよ、ということです。念のためエックスサーバーのphp.iniの編集方法を書いておきますサーバーパネルからログインし画面下部php.ini設定をクリックし該当のドメインを選択しphp.ini直接編集をクリックこれで編集画面が出てくるので編集できるようになります。デフォルト送信元メールアドレスをphp.iniに記述しちゃう以下の1文をphp.iniに追記してもOKです。from@pg-happy.jpそうするとデフォルトの送信元メールアドレスがこれに設定されます。'From:from@pg-happy.jp';というのを書かなくてもいいことになります。書かなければphp.iniの方が使われます。一通り設定ができたらアップロードしたphpファイルにブラウザでアクセスしてみましょう。宛先メールアドレスにメールが届いていることを確認しましょう。mb_send_mailと各社レンタルサーバー別の挙動ここではmb_send_mailが各社レンタルサーバーで使えるかテストしてみたのでその結果を書いています。エックスサーバーでmb_send_mail前述のとおり問題なく動きました。さくらレンタルサーバーでmb_send_mail特に問題なくメール送信できた。php.iniの編集も必要なくデフォルトのままでOKでした。php.iniの設定はデフォルトで以下のようになっています。-i送信元メールアドレスは自動的に「アカウント名@wwwサーバ番号.sakura.ne.jp」となっていました。ロリポップレンタルサーバーでmb_send_mailこちらも特に問題なくメール送信できました。php.iniの編集もしておらずデフォルトのままです。ユーザーによるphp.iniの設定は制限がされていて、ロリポップの標準設定を使うようになってるみたいです。ちなみにデフォルトの送信元は「アカウント名@phy.lolipop.jp」のようになっていました。Fromを記述して設定しましょう。バリューサーバーでmb_send_mailこちらもmb_send_mailは正常に使えました。php.iniは以下のようになっており特に編集はしませんでした。デフォルトの送信元アドレスは「root@契約したバリューサーバードメイン.jp」です。-iということでお値段が安めの人気のレンタルサーバー4種に関してmb_send_mailが正常動作することを確認できました。教材のmb_send_mailが動いたり動かなかったり私がいまPHPの学習で取り組んでいる教材ではmb_send_mailの記述が以下のようになっていました。headerに色々と記述してるみたいなんですよね。$_POST['from’]となっています。これは教材ではNULLが入っているっぽくてphp.iniのデフォルトを使用するようになってるみたいですけど。Cloud9だとNULLでも問題なくメール送信できて、エックスサーバーだとメール送信できなかったんです。これだけはいまだに謎です。取り急ぎFromには何も記述しないか、しっかり送信元を記述すれば動くことがわかりました。...侍エンジニア塾レッスン6回目まで進んだ、今の進捗状況とかプログラミングスクールの侍エンジニア塾に通い始めて1ヶ月半が経過しました。...LaradockをWindowsにインストールしてブラウザ表示&mysqlユーザー作成&接続まで侍エンジニア塾でPHPの学習をしています。...侍エンジニア塾がつらい、辞めたい..本音の口コミ評判その1侍エンジニア塾に入塾して2ヶ月ほどたちます。Village」でインタビューさせていただきました!新着記事プログラミング入門の5ステップとスタートダッシュに使えるサイト&アプリ「プログラミングをやってみたい」「やってみよう」と思ったらその気持ちが大事です。...インフラエンジニアの仕事内容、キャリア、未経験転職の方法ども。元SEでインフラまわりもやったことがあるので自分のわかる範囲で。...ネットワークエンジニアは「楽」と「きつい」が同居する仕事ネットワークエンジニアの方にヒアリングしたことがあります。TOPグループサイト|Happiant。