1. ホーム
  2. php

[解決済み] htmlフォームからPHPでメールを送信する。

2023-09-03 04:09:25

質問

ユーザーが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を参考にしてください。