[解決済み] htmlフォームからPHPでメールを送信する。
質問
ユーザーがHTMLフォームに入力し、フォームからの情報をメール送信し終えたら、PHPでメールを送信したいのです。私は、フォームを持つウェブページを表示するのと同じスクリプトからそれをしたいのです。
私はこのコードを見つけたが、メールは送信されない。
<?php
if (isset($_POST['submit'])) {
$to = $_POST['email'];
$subject = $_POST['name'];
$message = getRequestURI();
$from = "[email protected]";
$headers = "From:" . $from;
if (mail($to, $subject, $message, $headers)) {
echo "Mail Sent.";
}
else {
echo "failed";
}
}
?>
PHPでメールを送信するためのコードは何ですか?
どのように解決するのですか?
編集 (#1)
私の理解が正しければ、あなたはすべてを1つのページに収め、同じページから実行したいのですね。
1つのページからメールを送信するには、例えば次のようなコードを使用します。
index.php
または
contact.php
これと私の元の答えとの唯一の違いは
<form action="" method="post">
で、アクションが空白のままになっていることです。
を使うのがよいでしょう。
header('Location: thank_you.php');
の代わりに
echo
の代わりに、PHPハンドラでユーザーを別のページにリダイレクトさせることができます。
以下のコード全体を1つのファイルにコピーしてください。
<?php
if(isset($_POST['submit'])){
$to = "[email protected]"; // this is your Email address
$from = $_POST['email']; // this is the sender's Email address
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$subject = "Form submission";
$subject2 = "Copy of your form submission";
$message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
$message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];
$headers = "From:" . $from;
$headers2 = "From:" . $to;
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";
// You can also use header('Location: thank_you.php'); to redirect to another page.
}
?>
<!DOCTYPE html>
<head>
<title>Form submission</title>
</head>
<body>
<form action="" method="post">
First Name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
Email: <input type="text" name="email"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
オリジナルの回答
質問の意味がよくわかりませんでしたが、メッセージのコピーはフォームに記入した人に送られるという印象を持っています。
HTMLフォームとPHPハンドラのテストされた/動作するコピーがここにあります。これは PHP の
mail()
関数を使用しています。
PHP ハンドラは、フォームに記入した人にメッセージのコピーも送ります。
2 つのフォワードスラッシュ
//
を行の前に付けると良いでしょう。
例えば
// $subject2 = "Copy of your form submission";
は実行されません。
HTMLフォームです。
<!DOCTYPE html>
<head>
<title>Form submission</title>
</head>
<body>
<form action="mail_handler.php" method="post">
First Name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
Email: <input type="text" name="email"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
PHPハンドラ (mail_handler.php)
(HTMLフォームの情報を使ってメールを送信します)
<?php
if(isset($_POST['submit'])){
$to = "[email protected]"; // this is your Email address
$from = $_POST['email']; // this is the sender's Email address
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$subject = "Form submission";
$subject2 = "Copy of your form submission";
$message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
$message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];
$headers = "From:" . $from;
$headers2 = "From:" . $to;
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";
// You can also use header('Location: thank_you.php'); to redirect to another page.
// You cannot use header and echo together. It's one or the other.
}
?>
HTMLとして送信する。
HTMLとしてメールを送信する場合、両方のインスタンスに対して、異なる変数名を持つ2つの別々のHTMLヘッダセットを作成する必要があります。
のマニュアルを読んでください。
mail()
のマニュアルを読んで、HTMLとしてメールを送信する方法を学んでください。
脚注です。
- HTML5 に関して
投稿されたデータを処理するサービスのURLを、action属性で指定する必要があります。
で説明しているように https://www.w3.org/TR/html5/forms.html の下に 4.10.1.3 サーバーと通信するためのフォームを設定する . 完全な情報については、そのページを参照してください。
したがって
action=""
はHTML5では動作しません。
適切な構文としては
-
action="handler.xxx"
または -
action="http://www.example.com/handler.xxx"
.
注意点として
xxx
は、プロセスを処理するために使われるファイルの種類の拡張子になります。これは
.php
,
.cgi
,
.pl
,
.jsp
ファイル拡張子など
メール送信に失敗した場合のスタックについて、以下のQ&Aを参考にしてください。
関連
-
[解決済み】Notice: 非オブジェクトのプロパティを取得しようとしているエラー
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] PHPスクリプトからJSONを返す
-
[解決済み] PHP ページから GMail SMTP サーバを使用してメールを送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】PHP フェイタルエラー。未定義の関数mssql_connect()をコールしています。
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] PHP 未定義関数への呼び出し