Подтвердить что ты не робот

Отправить письмо с PHP из html формы на submit с тем же script

Я хочу отправить электронное письмо с PHP, когда пользователь закончил заполнять форму HTML, а затем отправил электронную почту из формы. Я хочу сделать это из того же script, который отображает веб-страницу с формой.

Я нашел этот код, но почта не отправляет.

<?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?

4b9b3361

Ответ 1

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 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"; не будет выполняться.

ФОРМА 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 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 one or the other.
    }
?>

Отправить в формате HTML:

Если вы хотите отправить почту как HTML и для обоих экземпляров, вам нужно будет создать два разных набора заголовков HTML с разными именами переменных.

Прочитайте руководство по mail(), чтобы узнать, как отправлять электронные письма как HTML:


Сноска:

  • Что касается HTML5

Вы должны указать URL-адрес службы, которая будет обрабатывать представленные данные, используя атрибут действия.

Как указано в 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 на стеке, если отправка почты не удалась:

Ответ 2

PHP script для подключения к SMTP-серверу и отправки электронной почты в Windows 7

Отправка электронной почты с PHP в Windows - это немного минное поле с gotchas и царапинами головы. Я попытаюсь провести вас через один экземпляр, где я получил его для работы с Windows 7 и PHP 5.2.3 под (IIS) веб-сервером Internet Information Services.

Я предполагаю, что вы не хотите использовать какие-либо заранее созданные рамки, такие как CodeIgniter или Symfony, которые содержат возможности отправки электронной почты. Мы отправим электронное письмо из автономного файла PHP. Я приобрел этот код из-под codeigniter hood (под system/libraries) и изменил его, чтобы вы могли просто заглянуть в этот файл Email.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";
?>

Вы должны иметь возможность посетить этот 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. Я настроил его так, что он автоматически работает с smtp.ihostexchange.net, но ваш smtp-сервер может быть другим.

Например:

  • Установите параметр smtp_port в порт вашего SMTP-сервера.
  • Задайте параметр smtp_crypto для вашего сервера smtp.
  • Установите $newline и $crlf, чтобы он совместим с тем, что использует ваш SMTP-сервер. Если вы ошибаетесь, сервер smtp может игнорировать ваш запрос без ошибок. Я использую \r\n, для вас возможно \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, повторяя: "Работа в продуктовом магазине не так уж плоха".

Ответ 3

Если вы еще этого не сделали, посмотрите на свой php.ini и убедитесь, что параметры под [mail function] установлены правильно, чтобы активировать службу электронной почты. После использования PHPMailer и следуйте инструкциям.

Ответ 4

Вы также можете использовать приложение mandrill для отправки почты в php. Вы получите API из https://mandrillapp.com/api/docs/index.php.html, где вы сможете найти полную информацию о отправляемых письмах и других деталях.

Ответ 5

Вот настройки почты 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.";

Ответ 6

Вам нужно добавить action в форму:

    <form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'>
          <!-- All your input for the form here -->
    </form>

Затем поместите ваш фрагмент в верхнюю часть документа, чтобы отправить почту. Что делает echo($_SERVER['PHP_SELF']);, так это то, что он отправляет вашу информацию в верхнюю часть вашего script, чтобы вы могли ее использовать.

Ответ 7

Вам нужен сервер SMPT для

... mail($to,$subject,$message,$headers);

для работы.

Вы можете попробовать SMTP-серверы с легким весом, такие как xmailer

Ответ 8

Я думаю, что одна ошибка в исходном коде могла быть такой:

$message = echo getRequestURI();

вместо:

$message = getRequestURI();

(С тех пор этот код был отредактирован.)