Я хочу отправить электронное письмо с PHP, когда пользователь закончил заполнять форму HTML, а затем отправил электронную почту из формы. Я хочу сделать это из того же сценария, который отображает веб-страницу с формой.
Я нашел этот код, но почта не отправляет.
<?php if (isset($_POST['submit'])) { $to = $_POST['email']; $subject = $_POST['name']; $message = getRequestURI(); $from = "zenphoto@example.com"; $headers = "From:" . $from; if (mail($to, $subject, $message, $headers)) { echo "Mail Sent."; } else { echo "failed"; } } ?>
Каков код для отправки электронной почты на PHP?
Если я правильно понимаю, вы хотите иметь все на одной странице и выполнять ее с той же страницы.
Вы можете использовать следующий код для отправки почты с одной страницы, например index.php
или contact.php
Единственное различие между этим и моим первоначальным ответом – это <form action="" method="post">
где действие осталось пустым.
Лучше использовать header('Location: thank_you.php');
вместо echo
в обработчике PHP для перенаправления пользователя на другую страницу впоследствии.
<?php if(isset($_POST['submit'])){ $to = "email@example.com"; // 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>
при<?php if(isset($_POST['submit'])){ $to = "email@example.com"; // 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 также отправит копию сообщения лицу, заполнившему форму.
Вы можете использовать две передние косые черты //
перед строкой кода, если вы не собираетесь ее использовать.
Например: // $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 и отправляет электронную почту)
<?php if(isset($_POST['submit'])){ $to = "email@example.com"; // 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. } ?>
при<?php if(isset($_POST['submit'])){ $to = "email@example.com"; // 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 и для обоих экземпляров, вам нужно будет создать два отдельных набора заголовков HTML с разными именами переменных.
Прочтите руководство по mail()
чтобы узнать, как отправлять электронные письма в формате HTML:
Примечания:
Вы должны указать 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
и т. Д.
Проконсультируйтесь со следующими вопросами и ответами, если отправка почты не удалась:
Отправка электронной почты с PHP в Windows – это немного минное поле с ошибками и царапинами головы. Я попытаюсь провести вас через один экземпляр, где я получил его для работы с Windows 7 и PHP 5.2.3 под (IIS) веб-сервером Internet Information Services.
Я предполагаю, что вы не хотите использовать какую-либо заранее созданную инфраструктуру, такую как CodeIgniter или Symfony, которая содержит возможности отправки электронной почты. Мы отправим электронное письмо из автономного файла PHP. Я приобрел этот код из-под оболочки codeigniter (под системой / библиотеки) и изменил его, чтобы вы могли просто заглянуть в этот файл Email.php, и он должен просто работать.
Это должно работать с более новыми версиями PHP. Но ты никогда не знаешь.
Шаг 1. Вам нужно имя пользователя / пароль с SMTP-сервером:
Я использую SMTP-сервер из smtp.ihostexchange.net
который уже создан и настроен для меня. Если у вас этого нет, вы не можете продолжить. Вы должны иметь возможность использовать почтовый клиент, такой как thunderbird, evolution, Microsoft Outlook , чтобы указать ваш smtp-сервер, а затем сможете отправлять электронные письма туда.
Шаг 2. Создайте свой файл электронной почты Hello World:
Я предполагаю, что вы используете IIS. Поэтому создайте файл под C:\inetpub\wwwroot
index.php под C:\inetpub\wwwroot
и поместите здесь этот код:
<?php include("Email.php"); $c = new CI_Email(); $c->from("FromUserName@foobar.com"); $c->to("user_to_receive_email@gmail.com"); $c->subject("Celestial Temple"); $c->message("Dominion reinforcements on the way."); $c->send(); echo "done"; ?>
в<?php include("Email.php"); $c = new CI_Email(); $c->from("FromUserName@foobar.com"); $c->to("user_to_receive_email@gmail.com"); $c->subject("Celestial Temple"); $c->message("Dominion reinforcements on the way."); $c->send(); echo "done"; ?>
Вы должны иметь возможность посетить этот index.php, перейдя в localhost / index.php в браузере, это приведет к ошибкам, потому что отсутствует Email.php. Но убедитесь, что вы можете хотя бы запустить его из браузера.
Шаг 3. Создайте файл с именем Email.php
:
Создайте новый файл с именем Email.php в папке C:\inetpub\wwwroot
.
Скопируйте / вставьте этот PHP-код в Email.php:
https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php
Поскольку существует много типов smtp-серверов, вам придется вручную Email.php
настройки в верхней части 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 <534edd7c92761@summitbroadband.com> Queued mail for delivery lang:email_sent done
Шаг 6, проверьте электронную почту и папку со спамом:
Посетите учетную запись электронной почты для user_to_receive_email@gmail.com, и вы должны получить электронное письмо. Он должен прибыть в течение 5 или 10 секунд. Если вы этого не сделаете, проверьте ошибки, возвращенные на странице. Если это не сработает, попробуйте размять лицо на клавиатуре на Google, повторяя: «Работа в продуктовом магазине не так уж плоха».
Если вы еще этого не сделали, посмотрите на свой php.ini
и убедитесь, что параметры в настройках [mail function]
установлены правильно, чтобы активировать службу электронной почты. После использования библиотеки PHPMailer и следуйте инструкциям.
Вы также можете использовать приложение mandrill для отправки почты в php. Вы получите API от https://mandrillapp.com/api/docs/index.php.html, где вы сможете найти полную информацию о отправляемых письмах и других деталях.
Вам нужно добавить action
в форму:
<form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'> <!-- All your input for the form here --> </form>
Затем поместите свой фрагмент в верхнюю часть документа, чтобы отправить почту. Что такое echo($_SERVER['PHP_SELF']);
что он отправляет вашу информацию в начало вашего скрипта, чтобы вы могли его использовать.
Вот настройки почты PHP, которые я использую:
//Mail sending function $subject = $_POST['name']; $to = $_POST['email']; $from = "zenphoto@example.com"; //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.";
при//Mail sending function $subject = $_POST['name']; $to = $_POST['email']; $from = "zenphoto@example.com"; //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.";
Вам нужен SMPT-сервер, чтобы
... mail($to,$subject,$message,$headers);
работать.
Вы можете попробовать SMTP-серверы с легким весом, такие как xmailer
Я думаю, что одна ошибка в исходном коде могла бы заключаться в том, что она имела:
$message = echo getRequestURI();
вместо:
$message = getRequestURI();
(С тех пор этот код был отредактирован.)