Отправить письмо с 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?

690   8  

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-сервер может быть другим.

например:

  1. установите параметр smtp_port в порт вашего smtp сервер.
  2. установите параметр smtp_crypto в соответствии с потребностями вашего smtp-сервера.
  3. установите $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

    Ничего не найдено.