ユーザーがHTMLフォームに入力し、フォームから情報を電子メールで送信し終えたら、PHPを付けて電子メールを送信します。フォームを持つWebページを表示するのと同じスクリプトから実行したいのです。
このコードを見つけましたが、メールは送信されません。
<?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でEメールを送信するためのコードは何ですか?
私が正しく理解しているならば、あなたは1つのページにすべてを入れて、同じページからそれを実行したいです。
次のコードを使用して、1ページからメールを送信できます。たとえば、index.php
またはcontact.php
これと私の最初の答えの唯一の違いはアクションが空白のままにされている<form action="" method="post">
です。
後でユーザーを別のページにリダイレクトするには、PHPハンドラーでecho
の代わりにheader('Location: thank_you.php');
を使用することをお勧めします。
<?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";
は実行されません。
<!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>
(HTMLフォームの情報を使用してEメールを送信します)
<?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ヘッダーのセットを作成する必要があります。
HTMLとしてEメールを送信する方法を学ぶためにmail()
のマニュアルを読んでください:
脚注:
Action属性を使用して、送信データを処理するサービスのURLを指定する必要があります。
https://www.w3.org/TR/html5/forms.html ので説明されているとおりサーバーと通信する。完全な情報については、ページを調べてください。
したがって、action=""
はHTML5では機能しません。
正しい構文は次のとおりです。
action="handler.xxx"
またはaction="http://www.example.com/handler.xxx"
。xxx
は、プロセスを処理するために使用されるファイルの種類の拡張子になります。これは.php
、.cgi
、.pl
、.jsp
ファイル拡張子などです。
メールの送信に失敗した場合は、Stackに関する次のQ&Aを参照してください。
WindowsでPHPから電子メールを送信するのは、ちょっとした苦労と頭の引っかき傷のある鉱山のようなものです。 Windows 7およびPHP 5.2.3(IIS)のインターネットインフォメーションサービスWebサーバーで動作するようにした場合の1つの例を紹介します。
CodeIgniterやSymfonyのような電子メール送信機能を含む、あらかじめ構築されたフレームワークを使用したくないと思います。スタンドアロンのPHPファイルからメールを送信します。私は、codeigniterフードの下(システム/ライブラリの下)からこのコードを取得して、あなたがこのEmail.phpファイルにドロップすることができるようにそれを修正しました、そしてそれはただ動くべきです。
これは新しいバージョンのPHPで動作するはずです。しかし、あなたは知りません。
ステップ1、あなたはSMTPサーバとのユーザ名/パスワードを必要とします:
私はすでに作成され、私のためにセットアップされているsmtp.ihostexchange.net
からのSMTPサーバーを使用しています。あなたがこれを持っていないなら、あなたは先に進むことができません。あなたはあなたのsmtpサーバを指定するために Thunderbird、evolution、Microsoft Outlookのような電子メールクライアント を使うことができなければなりません。
ステップ2、Hello Worldの電子メールファイルを作成します。
私はあなたがIISを使っていると思います。それでC:\inetpub\wwwroot
の下にindex.phpと呼ばれるファイルを作成し、そこにこのコードを入れてください:
<?php
include("Email.php");
$c = new CI_Email();
$c->from("[email protected]");
$c->to("[email protected]");
$c->subject("Celestial Temple");
$c->message("Dominion reinforcements on the way.");
$c->send();
echo "done";
?>
ブラウザでlocalhost/index.phpに移動するとこのindex.phpにアクセスできるはずです。Email.phpが見つからないためエラーが発生します。ただし、少なくともブラウザから実行できることを確認してください。
ステップ3、Email.php
というファイルを作成する:
C:\inetpub\wwwroot
の下にEmail.phpという名前の新しいファイルを作成します。
このPHPコードをEmail.phpにコピーするか貼り付けてください。
https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php
多くの種類のsmtpサーバーがあるので、あなたは手動でEmail.php
の上の設定をいじる必要があるでしょう。 smtp.ihostexchange.net
で自動的に動作するように設定しましたが、あなたのsmtpサーバは違うかもしれません。
例えば:
\n
が必要です。リンクされたコードは長すぎてstackoverflowの回答として貼り付けることができません。編集したい場合は、ここまたはgithubを通じてコメントを残してください。変更します。
ステップ4、あなたのphp.iniがssl拡張子を有効にしていることを確認してください:
あなたのPHP.iniファイルを見つけて、コメントアウトしてください。
;extension=php_openssl.dll
だからそれはように見えます:
extension=php_openssl.dll
ステップ5、作成したindex.phpファイルをブラウザで実行します。
次のような出力が得られるはずです。
220 smtp.ihostexchange.net Microsoft ESMTP MAIL Service ready at
Wed, 16 Apr 2014 15:43:58 -0400 250 2.6.0
<[email protected]> Queued mail for delivery
lang:email_sent
done
ステップ6、メールアドレスとスパムフォルダを確認します。
[email protected]の電子メールアカウントにアクセスすると、電子メールを受信しているはずです。それは5か10秒以内に着くべきです。そうでない場合は、ページに返されたエラーを調べます。それでもうまくいかない場合は、「食料品店での作業はそれほど悪くない」と唱えながら、Googleのキーボードで自分の顔をマッシュアップしてみてください。
あなたはphpでメールを送るのにmandrillアプリを使うこともできます。このAPIは https://mandrillapp.com/api/docs/index.php.html から入手できます。送ったと他の詳細。
まだ行っていない場合は、php.ini
を調べて、[mail function]
設定の下のパラメータが電子メールサービスをアクティブにするように正しく設定されていることを確認します。あなたは PHPMailer ライブラリを使用して、指示に従うことができた後。
これが私が使用するPHPメール設定です:
//Mail sending function
$subject = $_POST['name'];
$to = $_POST['email'];
$from = "[email protected]";
//data
$msg = "Your MSG <br>\n";
//Headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: <".$from. ">" ;
mail($to,$subject,$msg,$headers);
echo "Mail Sent.";
次のようにaction
をフォームに追加する必要があります。
<form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'>
<!-- All your input for the form here -->
</form>
それからあなたのスニペットを文書の一番上に置いてメールを送ってください。 echo($_SERVER['PHP_SELF']);
がすることはあなたがそれを使うことができるようにあなたの情報をあなたのスクリプトのトップに送るということです。
あなたはSMPTサーバーが必要です
... mail($to,$subject,$message,$headers);
働く。
あなたはxmailerのような軽量のSMTPサーバーを試すことができます