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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

2回答

3482閲覧

PHP 問い合わせフォームが機能しない

shunta80

総合スコア96

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

2クリップ

投稿2021/04/01 15:58

編集2021/04/03 01:58

前提・実現したいこと

1.PHPの問い合わせフォームをブラウザ上で正常に機能させたい
2.送信元アドレスをフォームに入力したメールアドレスにしたい

このような問い合わせフォームを作りました。
コードも記載します。
イメージ説明

<?php if ($_SERVER['REQUEST_METHOD'] != 'POST') { // POSTでのアクセスでない場合 $name = ''; $email = ''; $subject = ''; $message = ''; $err_msg = ''; $complete_msg = ''; } else { // フォームがサブミットされた場合(POST処理) // 入力された値を取得する $name = $_POST['name']; $email = $_POST['email']; $subject = $_POST['subject']; $message = $_POST['message']; // エラーメッセージ・完了メッセージの用意 $err_msg = ''; $complete_msg = ''; // 空チェック if ($name == '' || $email == '' || $subject == '' || $message == '') { $err_msg = '全ての項目を入力してください。'; } // エラーなし(全ての項目が入力されている) if ($err_msg == '') { $to = '******@outlook.jp'; // 管理者のメールアドレスなど送信先を指定 $headers = "From: " . $email . "\r\n"; // 本文の最後に名前を追加 $message .= "\r\n\r\n" . $name; //日本語での送信 mb_language("japanese"); mb_internal_encoding("UTF-8"); // メール送信 mb_send_mail($to, $subject, $message, $headers); // 完了メッセージ $complete_msg = '送信されました!'; // 全てクリア $name = ''; $email = ''; $subject = ''; $message = ''; } } ?> <!DOCTYPE html> <html lang="jp"> <head> <meta charset="utf-8"> <title>お問い合わせフォーム</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP" rel="stylesheet"> <style> body { background: #f3f3f3; } .container { font-family: "Noto Sans JP"; margin-top: 60px; } h1 { margin-bottom: 50px; text-align: center; } button { margin-top: 30px; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-xs-offset-4 col-xs-4"> <h1>お問い合わせ</h1> <?php if ($err_msg != ''): ?> <div class="alert alert-danger"> <?php echo $err_msg; ?> </div> <?php endif; ?> <?php if ($complete_msg != ''): ?> <div class="alert alert-success"> <?php echo $complete_msg; ?> </div> <?php endif; ?> <form method="post"> <div class="form-group"> <input type="text" class="form-control" name="name" placeholder="お名前" value="<?php echo $name; ?>"> </div> <div class="form-group"> <input type="text" class="form-control" name="email" placeholder="メールアドレス" value="<?php echo $email; ?>"> </div> <div class="form-group"> <input type="text" class="form-control" name="subject" placeholder="件名" value="<?php echo $subject; ?>"> </div> <div class="form-group"> <textarea class="form-control" name="message" rows="5" placeholder="本文"><?php echo $message; ?></textarea> </div> <button type="submit" class="btn btn-success btn-block">送信</button> </form> </div> </div> </div> </body> </html>

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

1.ローカル側でしか入力内容が設定したアドレスに送信されない
ブラウザ側では入力内容は送信されません

2.メッセージ送信元が自分のアドレスになる
(下記はxamppのsendmail.iniファイルのコードです。
コードのauth_usernameとforce_senderに入力したアドレスが送信元になり
フォームに入力したアドレスが送信元になりません)

xampp設定ファイル

1; configuration for fake sendmail 2 3; if this file doesn't exist, sendmail.exe will look for the settings in 4; the registry, under HKLM\Software\Sendmail 5 6[sendmail] 7 8; you must change mail.mydomain.com to your smtp server, 9; or to IIS's "pickup" directory. (generally C:\Inetpub\mailroot\Pickup) 10; emails delivered via IIS's pickup directory cause sendmail to 11; run quicker, but you won't get error messages back to the calling 12; application. 13 14smtp_server=smtp.office365.com 15 16; smtp port (normally 25) 17 18smtp_port=587 19 20; SMTPS (SSL) support 21; auto = use SSL for port 465, otherwise try to use TLS 22; ssl = alway use SSL 23; tls = always use TLS 24; none = never try to use SSL 25 26smtp_ssl=auto 27 28; the default domain for this server will be read from the registry 29; this will be appended to email addresses when one isn't provided 30; if you want to override the value in the registry, uncomment and modify 31 32;default_domain=mydomain.com 33 34; log smtp errors to error.log (defaults to same directory as sendmail.exe) 35; uncomment to enable logging 36 37error_logfile=error.log 38 39; create debug log as debug.log (defaults to same directory as sendmail.exe) 40; uncomment to enable debugging 41 42;debug_logfile=debug.log 43 44; if your smtp server requires authentication, modify the following two lines 45 46auth_username=******@outlook.jp 47auth_password=****** 48 49; if your smtp server uses pop3 before smtp authentication, modify the 50; following three lines. do not enable unless it is required. 51 52pop3_server= 53pop3_username= 54pop3_password= 55 56; force the sender to always be the following email address 57; this will only affect the "MAIL FROM" command, it won't modify 58; the "From: " header of the message content 59 60force_sender=*******@outlook.jp 61 62; force the sender to always be the following email address 63; this will only affect the "RCTP TO" command, it won't modify 64; the "To: " header of the message content 65 66force_recipient= 67 68; sendmail will use your hostname and your default_domain in the ehlo/helo 69; smtp greeting. you can manually set the ehlo/helo name if required 70 71hostname= 72 73

補足情報(FW/ツールのバージョンなど)

xamppを使用してローカル側でPHPを動作させています

PHPファイルはcyberdackのFTP機能でブラウザにアップしました。

お名前ドットコムの
レンタルサーバを使用しています。

ご回答宜しくお願い致します。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/04/01 17:14

まず「ローカル側でしか入力内容が設定したアドレスに送信されない・・・」という表現が第三者から見ると非常に分かりにくいです。「ローカル側」「ブラウザ側」とは何か?を具体的に書いた方が良いかと思います。 あと、レンタルサーバの情報をもう少し書いた方がいいかもしれません。なぜかというと、メール送信機能はスパムメールの温床になるので、各レンタルサーバとも色々な制限をかけていたりします。まずはレンタルサーバのメール送信処理に関する情報を確認した方が良いでしょう。 あと、メッセージ送信元が自分のアドレスになるというのは仕様というか、自分が契約しているSMTPサーバを送っているメールですから、自分のアドレスが送信元になるのは極めて自然というか、普通だと思います。送信元を入力フォームのメアドに変えることも技術的には可能ですが、お行儀は良くないですし、なにより迷惑メール判定に引っかかりやすくなると思います。 参考 https://sendgrid.kke.co.jp/blog/?p=12290
guest

回答2

0

ベストアンサー

PHPを使ってメール制御、自分はよく業務で受け持つことが多いのですが
テスト段階で気をつけることが山のようにあります。

  • mb_send_mail1はif文にして、送信されているかどうかをチェックするようにしておきましょう。必要なステータスが変数に取り込まれていない場合もゼロではないので。

でも、これはだいたいtrueを返します。ですが、次が盲点になりやすいのですが、叩き台として利用したメールサーバはけっこう迷惑メールとして処理されることが多いです。

なので、メールサーバのステータスを確認してみてください。もし、ステータスがbouncedとなっている場合はメールサーバ側が迷惑メールとして処理しているのでホワイトリスト入りなど、メールサーバ側での対応が必要になってきます。

また、`セキュリティソフトが勝手にブロックしている場合もあります。この場合はなかなか気づかないことが多いので要注意(自分は丸一日費やしたことが…)です。

投稿2021/04/02 00:47

FKM

総合スコア3633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shunta80

2021/05/06 02:35

迷惑メール迷惑フォルダに届いていました ありがとうございました。
guest

0

〈xamppを使用してローカル側でPHPを動作させています〉ってことですので、
Windows10にXAMPPを立ち上げているものと仮定して説明しますと。

PHPのメール送信機能は、sendmailという外部のメール送信プログラムに委ねる仕組みで、
それをWindows上で実現するためにfake sendmailというのが入っています。
一度fake sendmailで検索して情報を集めてください。

Fake Sendmailってなに?? - Qiita
fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信 : Gmail なので ssl(465) : logical error

PHPのコードの書き方以前に、fake sendmailを環境に合わせて設定を仕込んでいるかどうかが
大事になってきますので。

で、それで動作確認を取るのと、
レンタルサーバーやホスティングしているサーバー上でのメール送信は
また確認や設定が違ってくることと、
Gmailほかwebメールサービスのたぐいを使ってメール送信するには
昨今ユーザー認証の仕組みが変わってきていることもあり、
素のPHPとsendmailではうまく行かないこともあるように聞き及んでいます。
レンタルサーバーに独自ドメインを仕込んで、そのドメインからのメール送信だとうまくいくとは思うのですが。


初めてのサーバーガイド|初めてのメール運用|お名前.comレンタルサーバー
にある手順に沿って、まずはメールの送受信をそのサーバー経由でできることを確認して、
それからPHPからのメール送信をやってみる、という流れかと。

投稿2021/04/02 00:12

編集2021/04/03 02:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shunta80

2021/04/02 01:06

回答ありがとうございます。 独自ドメインとレンタルサーバーはありますのでドメインからメール送信するためにはどういった設定をすればよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2021/04/02 01:20

レンタルサーバー業者によっても変わる部分なので、 業者が提供するドキュメントを読み込むことが肝要かと。 質問文中に、使用するレンタルサーバーの業者や利用プランなども示すと、 さらにアドバイスが貰えるかも。
shunta80

2021/04/03 01:58

レンタルサーバーの情報を加えました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問