Скорее всего, скрипт просто запускается более одного раза. Это может быть вызвано плагинами браузера или невозможностью обработки пустых форм. Защитите от отправки пустых сообщений во время загрузки страницы, поместив ее в условие, подобное следующему:
if (isset($_POST['emailer'])) {
//Rest of your script
Главное, чтобы сначала проверить, отправляет ли один запуск вашего сценария несколько сообщений, или же сценарийвыполняется более одного раза (отправка одного сообщения каждый раз). Попробуйте записать что-нибудь в файл журнала или сделать это очевидным в полученных сообщениях, добавив случайное число в конец строки темы. Если вы получаете два сообщения с тем же номером в теме, они являются истинными дубликатами;если числа - разные темы, ваш скрипт запускается более одного раза:
$mail->Subject = 'Hi ' . rand();
Некоторые другие проблемы:
$mail->body = $body;
В свойствах PHP учитывается регистр, поэтому его следует$mail->Body = $body;
, но вы также звоните $mail->MsgHTML($body);
, который устанавливает для вас свойство Body
, поэтому вам не нужно также настраивать body самостоятельно.
Пока вы работаете надскрипт $mail->SMTPDebug = 1
не очень полезен, так как не показывает, что говорит сервер;установить $mail->SMTPDebug = 2
. Не забудьте установить его равным 0 в производственном процессе!
Я также вижу, что вы используете очень старую версию PHPMailer и основали свой код на устаревшем примере, поэтому update .