Письма отправляются много раз
115 сообщений
#15 лет назад
В одном проекте рассылаются уведомления на список адресов, которые берутся из базы данных.Код отправки примерно такой:
Цитата:
$q = 'select * from hl_maillist';
$sth = mysql_query($q) or die(mysql_error());
while($row = mysql_fetch_array($sth))
{
/*Здесь код формирования письма*/
mail($row,"New HYIP is added in G.S. Monitor",$message,"Content-type: text/html; charset=windows-1251\nFrom: ".$settings);
}
И почему-то приходит иногда по пять одинаковых писем на один адрес, а иногда и больше.
Проверял - каждый адрес присутствует в базе данных один раз.
Почему такое может быть?
И как только я не колдовал над этим кодом, и задержку добавлял, и в очередь письма добавлял - проблема не решается, хоть ты тресни - приходят два письма, иногда даже три.
249 сообщений
#15 лет назад
Ну судя по коду письмо отправляется столько раз сколько записей в таблице
115 сообщений
#15 лет назад
А приходит два и больше писем на один адрес.
249 сообщений
#15 лет назад
Jason_Bourne, а точно невнимательно прочитал - попробуй просто mail отправить вне цикла если несколько раз значит с настройками сервера что-то, иначе все же в цикле косяк
263 сообщения
#15 лет назад
Цитата ("Jason_Bourne"):
...
И почему-то приходит иногда по пять одинаковых писем на один адрес, а иногда и больше.
Проверял - каждый адрес присутствует в базе данных один раз.
Почему такое может быть?
И как только я не колдовал над этим кодом, и задержку добавлял, и в очередь письма добавлял - проблема не решается, хоть ты тресни - приходят два письма, иногда даже три.
Это забавно. Вообще-то, почтовая система физически не способна "размножать" сообщения - иначе мы бы уже утонули под потоками спама. Рекомендую Вам сделать следующее:
1. Сравните заголовки повторяющихся писем, в частности, значения заголовка "Message-Id:". Если значение этого поля повторяется - значит ошибка на стороне клиента, если разное - письмо поступило в почтовую систему два раза.
2. Посмотрите логи почтовой системы, что-то вроде /var/log/mail.log для выбранных Message-Id. Если у Вас нет прав доступа к этим логам - попросите провайдера сделать для Вас выборку из логов.
3. Добавьте - теста ради - содержимое записи hl_maillist в тело письма. Убедитесь, что дублирующие письма, действительно, были посланы по одной записи hl_maillist.
4. Модифицируйте оператор select так, чтобы выбирать единственную запись для каждого значения в поле email, что-то вроде SELECT DISTINCT ... GROUP BY .... В документации MySQL должны быть примеры на этот случай.
5. Теста для, выкиньте из hl_maillist все записи кроме одной и прогоните Вашу программу еще раз. Посмотрите сколько писем будет послано. ВНИМАНИЕ: не забудьте сделать резервную копию таблицы hl_maillist.
В принципе, этих тестов должно быть достаточно для того, чтобы идентифицировать проблему. Успехов.