【PHP講座】mb_send_mail関数でメール送信

mb_send_mail関数でメール送信

前回は、お問い合わせフォームの画面遷移やどこでどういう処理をするかをざっくりと紹介しました。

【PHP講座】お問い合わせフォーム

2019.06.18

今回は、PHP でメールを送信する方法を具体的に紹介していきます。

それではどうぞ。



mb_send_mail関数でメール送信

PHP で日本語メールを送信するには、mb_send_mail関数を使います。

送信する前に日本語で送るための準備として以下のコードを書きます。

mb_language("Japanese");
mb_internal_encoding("utf-8");

そして、次が mb_send_mail関数の書き方です。

mb_send_mail(宛先, タイトル, 本文, ヘッダ);

ちなみに当ブログでは XAMPP を使って、PHP をローカル環境で動かしていましたが、メール送信にはメールサーバーが必要です。

レンタルサーバーで試した方が簡単だったりします。

本来ならテストもせずにいきなり本番環境というのはあまりよろしくないかもしれませんが。

mb_send_mail関数をとりあえず試したい程度なら良いのではないかと思います(アマチュアなんで)。

メールの場合、実用で使えるとなるとSPFレコードの設定など本番環境で色々やることがあると思いますが、今回は考えていません。

一応、ロリポップで私が試したソースコードを紹介します。

エックスサーバーでやっても良かったんですが、ロリポップが現状ほとんど使用していない状態だったのでテストしました。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>テストメール</title>
</head>
<body>
<?php

mb_language("Japanese");
mb_internal_encoding("utf-8");

$flg = mb_send_mail("XXXXX@yahoo.co.jp", "メールタイトル", "メール本文", "ヘッダ情報");

if($flg){
  echo "送信成功";
}

?>
</body>
</html>

ちなみに XXXXX@yahoo.co.jp は、自分の Yahooメールを使いました。

ヘッダ情報は、本来なら、色々設定すべきなんですが、今回は、Fromヘッダだけ指定してテストしました。

メールは受信できました(Yahooメール)。

PHPマニュアルで mb_send_mail関数を調べても、必ず Fromヘッダが含まれていなくてはいけませんと書いてあったので、最低でも Fromヘッダは付けるべきです(というか他にも指定するべきでしょう)。

私のコードも不完全なものなので、あくまで参考程度に(そもそも、body内に処理をごちゃごちゃ書いている段階であまり良いとは言えません)。

SPF とは

SPF とは、Sender Policy Framework の略で送信元アドレスの詐称を防止する認証技術です。

受信したメールのヘッダ情報を見たときに Received-SPF が pass になっていれば正常に設定されています。

実は奥が深いメール送受信

メール送受信は奥が深いです。

こんなこと書いている私も素人なんですが、調べると本当に色々気を遣う点が出てきます。

多分、やってみるとわかるかと思いますが、環境によっては迷惑メールとして受信されることもあるかと思います。

そういえば、大学のときの友達なんですが、まだガラケーを使っているとき。

キャリアのメールアドレスを変更したことを電話帳の友達に一斉送信して、間違ったからまた一斉送信してということをすると相手側の方でブロックされたことを思い出しました。

たしかドコモだったと思うのですが、1日に500件以上送信するドメインのメールが受信側でデフォルトで拒否になっていたことが原因でした。

この場合、1日待てば、無事メールを送れるようになるわけですが、その子は結構メールをする子だったので、困ってました。

他にも相手側でスパム判定されてしまう場合もあるので注意しましょう。

最後に

いかがでしょうか。

もっと簡単にできると思っていたのですが、わからないことが色々あって調べているとなんだかんだで時間を使っていました。

いきなり色々なことをやろうとすると大変なんで、とりあえずは練習で簡単なものから挑戦することをおすすめします。

お問い合わせフォームも自作して実用レベルまで持っていくとなるとセキュリティ面や今回のメールが迷惑メールとして判定されないかなど色々な工夫をする必要があります。

とにかく素人が自作するのは大変だということがわかりました。

というわけでそろそろ Laravel 学習の続きをしようと思う管理人でした。