Отправить письмо с PHP из html-формы на отправку с тем же скриптом
Я хочу отправить электронное письмо с PHP, когда пользователь закончил заполнение HTML-формы, а затем отправил по электронной почте информацию из формы. Я хочу сделать это из того же сценария, который отображает веб-страницу, которая имеет форму.
Я нашел этот код, но Почта не отправляет.
<?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?
8 ответов:
EDIT (#1)
если я правильно понял, вы хотите, чтобы все на одной странице и выполнить его с той же страницы.
вы можете использовать следующий код для отправки почты с одной страницы, например
index.phpилиcontact.phpединственное различие между этим и моим первоначальным ответом -
<form action="" method="post">где действие оставлено пустым.лучше использовать
header('Location: thank_you.php');вместоechoв обработчике 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 .
обработчик PHP также будет отправить копию данного сообщения так, чтобы человек, который заполнил форму.
вы можете использовать две косые черты
//перед строкой кода, если вы не собираетесь использовать его.например:
// $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 и для обоих экземпляров, то вам нужно будет создать два отдельных набора заголовков 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 на стеке, если отправка почты не удается:
PHP скрипт для подключения к SMTP серверу и отправки электронной почты на Windows 7
отправка электронной почты с PHP В Windows-это немного минное поле с gotchas и почесыванием головы. Я попытаюсь провести вас через один экземпляр, где я получил его для работы на Windows 7 и PHP 5.2.3 под (IIS) Internet Information Services webserver.
Я предполагаю, что вы не хотите использовать какой-либо предварительно построенный фреймворк, такой как CodeIgniter или Symfony, который содержит возможность отправки электронной почты. Мы будем отправка сообщения электронной почты из автономного файла PHP. Я приобрел этот код из-под капота codeigniter (под system/libraries) и изменил его, чтобы вы могли просто бросить это письмо.php файл и он должен просто работать.
это должно работать с более новыми версиями PHP. Но никогда не знаешь наверняка.
Шаг 1, вам нужно имя пользователя / пароль с сервером SMTP:
я использую smtp-сервер от
smtp.ihostexchange.netкоторый уже создан и настроен для меня. Если вы нет этого вы не можете продолжить. Вы должны быть в состоянии использовать почтовый клиент, как thunderbird, evolution, Microsoft Outlook, чтобы указать ваш smtp-сервер, а затем иметь возможность отправлять электронные письма через него.Шаг 2, Создайте свой файл электронной почты Hello World:
Я предполагаю, что вы используете IIS. Поэтому создайте файл с именем index.php под
C:\inetpub\wwwrootи поставить этот код:<?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"; ?>вы должны быть в состоянии посетить этот индекс.php путем перехода к localhost / index.php в браузере, он будет извергать ошибки, потому что электронная почта.php отсутствует. Но убедитесь, что вы можете хотя бы запустить его из браузера.
Шаг 3 создайте файл с именем
Email.php:создайте новый файл с именем Email.php под
C:\inetpub\wwwroot.скопируйте / вставьте этот PHP код в Электронная почта.php:
https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php
поскольку существует много видов smtp-серверов, вам придется вручную возиться с настройками в верхней части
Email.php. Я настроил его так, что он автоматически работает сsmtp.ihostexchange.net, но ваш smtp-сервер может быть другим.например:
- установите параметр smtp_port в порт вашего smtp сервер.
- установите параметр smtp_crypto в соответствии с потребностями вашего smtp-сервера.
- установите $newline и $crlf, чтобы он был совместим с тем, что использует ваш smtp-сервер. Если вы выбрали неверно, smtp-сервер может игнорировать ваш запрос без ошибок. Я использую \r\n, для вас может быть это.
связанный код слишком длинный, чтобы вставить как ответ stackoverflow, если вы хотите его отредактировать, оставьте комментарий здесь или через github, и я изменю оно.
Шаг 4, Убедитесь, что ваш php.в ini включено расширение ssl:
найдите свой PHP.ini и раскомментируйте
;extension=php_openssl.dllТак выглядит:
extension=php_openssl.dllШаг 5 запустите индекса.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.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>затем поместите свой фрагмент в верхней части документа en отправить письмо. Что
echo($_SERVER['PHP_SELF']);делает то, что он отправляет вашу информацию в верхнюю часть вашего скрипта, чтобы вы могли ее использовать.
вот Настройки Почты 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.";
вам нужен сервер SMPT для
... mail($to,$subject,$message,$headers);на работу.
вы можете попробовать легкие SMTP-серверы, такие как xmailer
Я думаю, что одна ошибка в исходном коде может быть что он:
$message = echo getRequestURI();вместо:
$message = getRequestURI();(С тех пор код был отредактирован.)
Comments