質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.19%

【WordPress】自作問い合わせフォーム/メールが送受信されない

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 329

lalalady

score 1

前提・実現したいこと

問い合わせしてくれた人(ユーザー)へサンクスメールの送信、管理者へは入力された情報をメールで受信したい。

発生している問題・エラーメッセージ

htmlでの構築段階では特に問題なく送受信ができていたのですが、WordPressに移行後完了ページに遷移してもメールが届かなくなってしまいました。
サーバーは担当者がAWSを一から構築して使用しおります。

入力フォーム画面・送信内容確認画面・完了画面は全て固定ページにしており、画面遷移はうまく行っています。

コードに記述ミスがあるのか、サーバー側で何か設定しないといけないのか...何が原因なのか分かりません。
php初心者、サーバー知識はあまりないですが宜しくお願い致します。

該当のソースコード

【送信完了画面
:mail.php】
<?php header("Content-Type:text/html;charset=utf-8"); ?>

<?php
$action = $_POST['action'];
$firstname = htmlspecialchars($_POST['firstname']);
$lastname = htmlspecialchars($_POST['lastname']);
$first_f_name = htmlspecialchars($_POST['first_f_name']);
$last_f_name = htmlspecialchars($_POST['last_f_name']);
$company = htmlspecialchars($_POST['company']);
$sex = htmlspecialchars($_POST['sex']);
$age = htmlspecialchars($_POST['age']);
$type = htmlspecialchars($_POST['type']);
$send = htmlspecialchars($_POST['send']);
$zip11 = htmlspecialchars($_POST['zip11']);
$addr11 = htmlspecialchars($_POST['addr11']);
$address = htmlspecialchars($_POST['address']);
$tel = htmlspecialchars($_POST['tel']);
$email = htmlspecialchars($_POST['email']);
$comment = htmlspecialchars($_POST['comment']);
$privacy_check = htmlspecialchars($_POST['privacy_check']);

/* 管理者用 */
$to = 'test@test.co.jp';
$subject = '資料請求';
$message .= '◆https://sample.com/'."\n\n";
$message .= '[お名前]'."\n".$firstname .$lastname."\n\n";
$message .= '[フリガナ]'."\n".$first_f_name .$last_f_name."\n\n";
$message .= '[勤務先]'."\n".$company."\n\n";
$message .= '[性別]'."\n".$sex."\n\n";
$message .= '[年齢]'."\n".$age."歳"."\n\n";
$message .= '[資料の受取方法]'."\n".$type."\n\n";
$message .= '[希望の送付先]'."\n".$send."\n\n";
$message .= '[住所]'."\n"."〒".$zip11."\n".$addr11.$address."\n\n";
$message .= '[電話番号]'."\n".$tel."\n\n";
$message .= '[メールアドレス]'."\n".$email."\n\n";
$message .= '[お問い合わせ内容]'."\n".$comment."\n\n";
$header = 'From: '.$email."\r\n";
$header .= 'Reply-To: '.$email."\r\n";

/* 申し込み者用 */
$mailto = $email;
$subject2 = '資料のご請求ありがとうございます。';
$message2 .= 
    '※本メールは自動配信です。送信専用の為、ご返信いただいてもお答えできません。ご了承ください。'
    ."\n".'お問い合わせは本メールに記載の連絡先へご連絡いただきますようお願い申し上げます。'
    ."\n\n\n".$firstname .$lastname.'様、この度は資料請求ありがとうございます。'
    ."\n\n".'- ▼ 送 信 内 容 - - - - - - -'
    ."\n".'[お名前] '.$firstname .$lastname
    ."\n".'[フリガナ] '.$first_f_name .$last_f_name
    ."\n".'[勤務先] '.$company
    ."\n".'[性別] '.$sex
    ."\n".'[年齢] '.$age."歳"
    ."\n".'[資料の受取方法] '.$type
    ."\n".'[住所] '."〒".$zip11."\n".$addr11.$address
    ."\n".'[電話番号] '.$tel
    ."\n".'[メールアドレス] '.$email
    ."\n".'[お問い合わせ内容] '."\n".$comment
    ."\n\n".'- ▼ 資料のダウンロードはこちら - - - - - - -'
    ."\n".'ダウンロード用URL記載'
    ."\n".'- - - - - - - - - - - - - - - - - - - - - - - - -'
    ."\n\n\n".'郵送をご希望のお客様は、到着までに3日ほどお時間いただきます。ご了承ください。'
    ."\n\n".'ご不明点等ございましたらお気軽にお問い合わせください。'
    ."\n\n\n".'https://sample.com/'
    ."\n".'TEL:00-0000-0000 info@sample.co.jp';

$header2 = 'From: '.$to."\r\n";

if($action == "post")
$status = mb_send_mail($to, $subject, $message,$header);
if($action == "post")
$status = mb_send_mail($mailto, $subject2,$message2,$header2);
?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+3

回答ではないです。

これ、公開サーバに置かないでください。
メールが送れるようになると、SPAM の発射台になります。

バリデーションなし、メールヘッダインジェクション可能とか、ひどすぎだと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/18 17:34

    te2ji 様
    ご忠告あありがとうございます。

    そうなんですね...
    サーバー担当者の方がセキュリティ詳しいので強化するみたいですが、これではダメでしょうか?

    キャンセル

  • 2020/08/18 18:14

    > バリデーションなし、メールヘッダインジェクション可能とか、ひどすぎだと思いますよ。

    キャンセル

  • 2020/08/18 19:08

    割とすぐにスパマーに発見されて色々大変なことになるケースですね。

    キャンセル

checkベストアンサー

+2

mb_send_mail() を使用されていますが、php.ini の「[mail function]」は、どのように設定されているでしょうか。( PHP マニュアル > 関数リファレンス > メール関連 > メール > インストール/設定 > sendmail_path w参照)

デフォルトのままであれば、 php を実行しているサーバーに Sendmail や postfix 等の SMTP サーバーは、導入されていますか?

導入されている場合、メールのログには、どのようなメッセージが記録されていますか?


また、AWS の場合、公式ヘルプの EC2 インスタンスからポート 25 の制限を削除するにはどうすればよいですか? に

Amazon EC2 は、デフォルトですべての EC2 インスタンスのポート 25 のトラフィックを制限していますが、この制限の削除をリクエストできます。

とあるように、最初は、ポート25 での外部へのメール送信が制限されています。

このドキュメントに記載されているような「E メール送信制限解除申請」はされていますか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/18 17:23

    そうなんですね、ありがとうございます。

    AWSでメールサーバー構築してないそうです。

    送受信テスト用として下記のメールアドレスを私のメールアドレスにしています。
    $to = 'test@test.co.jp';
    ドメインは独自ドメイン、Gsuiteを使用しています。
    Gsuite側で何か設定が必要ですか?

    キャンセル

  • 2020/08/18 17:42

    AWS EC2 で実行されている PHP から Gsuite から送信するのであれば、PHP のメール送信関数ではなく、PHPMailer ( https://github.com/PHPMailer/PHPMailer ) 等を使って、送信する必要があります。


    別の回答で指摘されていますが、現状のコードでは、メールが送り放題になると思われるので、悪用された場合に「差出人ドメイン」がブラックリストに掲載されて、悪質なサイトと評価されると思います。

    IPA が配布している「安全なウェブサイトの作り方」( https://www.ipa.go.jp/security/vuln/websecurity.html ) 等を読んで、プログラムでも対策を検討してください。

    キャンセル

  • 2020/08/18 19:48

    ありがとうございます!
    参考にさせていただきます。

    キャンセル

+2

サーバーは担当者がAWSを一から構築して使用しおります。

とのことですが、
迷惑メール送信元としてメール受信する側や経路上で認定されていると、
メールが届かなくなることがあります。

送信ドメイン認証(SPF / DKIM / DMARC)の仕組みと、なりすましメール対策への活用法を徹底解説 – エンタープライズIT \[COLUMNS\]

この解説ページで説明していることを構築した人に確認してもらって、
対策済みであるかどうかをテストしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/18 17:09

    m6u 様
    回答ありがとうございます。

    担当者に確認してもらいます。

    キャンセル

  • 2020/08/18 17:16 編集

    こちらでメールサーバを構築していない点、現在送信元に設定されているであろう(※会社の)ドメインからのメールが実際に送受信可能である点(現状クライアントからのなりすましの報告がない)、これらを考えて現在規制を受けている可能性は非常に低いと考えます。

    との返信が返ってきました。

    キャンセル

0

他の方の回答にある通り、かなり致命的な問題が存在するので独自実装はやめた方が良いと思います。

問い合わせフォームをきちんと構築運用するには色々な知見が必要なので
開発そのものが目的で無い限りは
Googleフォームや他の問い合わせフォームサービスを使うことで対応できないかの検討をされることをお勧めします。

自前で持つにしても、WordPressの問い合わせフォームプラグインを使うなどする方がまだ管理しやすいと思います。(WordPressとプラグインが適切に管理されている前提になりますが)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る