У меня есть простое сообщение, которое я отправляю с помощью php mail (). Используемый код:
//recipient info $to = "$bookernavn <$mail>"; $from = "Visens Venner Hillerød <booking@eksample.dk>"; $subject = "Kvittering - $a_titel - ". date("j/n - Y",$a_dato); $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=utf-8" . "\r\n"; $headers .= "From: $from" . "\r\n"; $headers .= "Reply-To: $from" . "\r\n"; $headers .= "Return-Path: $from" . "\r\n"; $headers .= "Bcc: $from" . "\r\n"; // now lets send the email. mail($to, $subject, $mailmsg, $headers); }
По какой-то странной причине две письма отправляются каждый раз …
Иногда с несколькими минутами между …
Есть идеи?
Вы не проверяете, была ли форма отправлена, поэтому обновление браузера снова отправит данные формы и вызовет повторную отправку почты. Это также происходит, когда пользователь нажимает кнопку «Назад».
После отправки электронной почты вам необходимо выполнить перенаправление 303, чтобы предотвратить повторную отправку. Вы можете перенаправить на ту же страницу, если хотите.
Это называется шаблоном Post / Redirect / Get .
mail(...); header('Location: /some-page-php', true, 303); exit;
простой способ предотвратить это – использовать метод POST вместо GET для формы.
<form method="post"> if (isset($_POST['submitted']))
и в конце почтового кода используйте перенаправление, которое отправит браузер для загрузки с использованием метода GET.
Не только вы можете перенаправить своего пользователя на страницу «ОК», отправив «почту» или страницу с ошибкой «извините, что была ошибка, повторите попытку», обновление этой страницы, открытой браузером, отправит GET, а не инициирует функция отправки почты
if (empty($errors)) { header('Location: http://www.example.com/mail_OK.html'); exit; } else { // passing data to the "error/retry" page $info = array( 'msg' => $msg, 'email' => $_POST['email'], 'name' => $_POST['name'] // etc... ) header('Location: http://www.example.com/mailform.php?'.http_build_query($info)); exit; }
в вашей форме вы можете получить информацию
<input name="name" type="text" placeholder="Naam" class="form-control" value="<?php echo htmlspecialchars($_GET['name']); ?>">