PHPのmb_send_mailでメールが届かない原因と特定のメールアドレスだけ届かない原因
##送信の流れ
本当は確認画面を表示して、そこから送信の流れに持って行きたかったのですが
最終的にはLP上のフォームに入力→送信ボタン→送信完了(送信内容を送信相手に受信させる)
という流れになりました。
index.php→send.php
##煩雑ですがこちらがコードです
<?php
session_start();
//クリックジャッキング対策
header('X-FRAME-OPTIONS: SAMEORIGIN');
// トークン生成
if (!isset($_SESSION['token'])) {
$_SESSION['token'] = sha1(random_bytes(30));
}
// HTML特殊文字をエスケープする関数
function escape($str) {
return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
?>
中略
<div class="form">
<h2>Contact</h2>
<p>お仕事のご依頼などこちらからお問い合わせください</p>
<form action="functions/send.php" method="Post">
<div class="form-title">
<dl>
<dt>お名前
<dd>
<div>
<input type="text" name="namedata" placeholder="例) 花子" class="inputText namearea" required>
</div>
</dd>
</dt>
<dt>
E-mail
<dd>
<div>
<input type="text" name="mailarea" placeholder="例)info@gmail.com" class="inputText mailarea" required>
</div>
</dd>
</dt>
<dt>
お問い合わせ内容
<dd>
<textarea name="textboxdata" placeholder="お問い合わせ内容を入力" class="inputText textboxarea" required>
</textarea>
</dd>
</dt>
</dl>
<div class="makesurebox">
<input type="submit" class="btnStyle1" value="送信する" />
</div>
</div>
</form>
</div>
form actionで次に送りたいsend.phpに飛ぶように
actionはpostです。
次にsend.phpです。最初は確認ページなども作っていたのでフォルダをfunctionsというのを作って入れています。なのでfunctions/send.phpを指定してます。
略
<body>
<?php
header("Content-Type:text/html; charset=UTF-8");
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = "hogehogeinfo@gmail.com";
$title = "お問い合わせがありました";
// メール本文
$message = "名前:" . $_POST["namedata"] . "\n本文:" . $_POST["textboxdata"];
if (!mail($to, $title, $message, "From: " . $_POST["mailarea"])) {
exit("error");
}
?>
<!--送信完了ページの文言-->
<div class="sendpg">
<h4>送信完了しました</h4>
<p>お問い合わせありがとうございました!</p>
<div class="btnStyle3">
<a href="../index.php">Topに戻る</a>
</div>
</div>
</body>
to は自分の受信させたいメールアドレス
title はメールのタイトル
$messageにお問い合わせ元、メアド、名前といった最低必要条件のみ、とりあえず入れます。index.phpのフォームで入力された値をそのままぶち込みます(自分宛のメールだからとりあえず)
そのあとのmail関数ですが、ここがmb_send_mail関数だとエラーでメールが届かなかったところです。どうやらgmailがはねられてしまうらしい、、?この辺が謎なんですが。なのでmail関数で対応しました。
mail($to, $title, $message, "From: " . $_POST["mailarea"])
//自分のメアド、メールのタイトル、メール本文、送信元
この4つを入れて、今回はこれらが!な時はエラーを出す
という指定をしています。
PHPほとんど勉強したことがなくて、挙動がちょっとイマイチよくわかってないんですが(phpの問題ではないのか?)
mb_send_mail関数でつまずいている方はmail関数のこちらで試してみてください。
参考にさせていただいたのは以下の記事です、こちらはmb_send_mailを使ってますが、ここをmail関数に変更しました。
↓
メールの送信
メールを送信 - mail()、mb_send_mail()
結構、意味がわからないところがたくさんありすぎて、PHPちゃんと勉強してみようかなと思いました。Twitterで泣き言をよく呟いてます。
自分の大道芸のHPのメールフォーム送信、mail関数で手こずってて、やっと解決した〜〜本当にやりたかった挙動にはならなかったので、ここは各々改善するとして。qiitaに記事書こう。モチベーションが保てたのは、「作ってるやつは人間なんだから私にだってできるはず。」#プログラミング
— Yumiko@ミニマリスト東京滞在中 (@engineerman8) April 29, 2020