Удобная штука, не пойму почему не сделанно стандартно в дле.
Нужно было мне сделать как то рассылку зарегестриованным посетителям сайта, но стандартно рассылка получается обезличностная, нельзя обратиться к каждому получателю по нику, как мне показалось это не правильно. Вот правкой этого мы и займеся.
Что на нужно, нужно заменить тег, например {user}, на имя получателя, это и начнем делать .
Файл рассылающий письма лежит по адресу engine/ajax/newsletter.php
Открываем его, смотрим, видим многокода (хотя не так уж и много), пугаемся :), упокаивамся, вспоменаем о хорошей функции
str_replace*, вот её и применим.
В начале нам нужно узнать ник получателя, для этого немного изменим запрос к БД
Найти
SELECT user_id FROM
Заменить на
SELECT user_id, name FROM
Найти
SELECT email FROM
Заменить на
SELECT email, name FROM
Теперь мы знаем ник получателя, осталось заменить тег на это имя.
найти
$db->query("INSERT INTO " . USERPREFIX . "_pm (subj, text, user, user_from, date, pm_read, folder) values ('$title', '$message', '$row[user_id]', '$member_id[name]', '$time', 'no', 'inbox')");
заменить на
$message_name = str_replace ( '{user}', stripslashes ( $row['name']), $message);
$db->query("INSERT INTO " . USERPREFIX . "_pm (subj, text, user, user_from, date, pm_read, folder) values ('$title', '$message_name', '$row[user_id]', '$member_id[name]', '$time', 'no', 'inbox')");
найти дальше
foreach ($h_mail as $key => $email) {
$mail->bcc = $bcc[$key];
$mail->send ($email, $title, $message);
}
заменить на
foreach ($h_mail as $key => $email) {
$message_name = str_replace ( '{user}', stripslashes ( $row['name']), $message);
$mail->bcc = $bcc[$key];
$mail->send ($email, $title, $message_name);
}
найти
$mail->send ($row['email'], $title, $message);
заменить на
$message_name = str_replace ( '{user}', stripslashes ( $row['name']), $message);
$mail->send ($row['email'], $title, $message_name);
Ну вродибы ничего не упустил, тестим и радуемся :)
По аналогии можете задать любой другой тег с другим значением.
Не забудьте в начале протестировать хак, для этого можете создать группу (например tested) в ней несколько "demo-пользователей", этой группе и поведите рассылку, разумеется e-mai у этих demo-пользователе должен быть тот к которому вы имеете доступ (дабы проверить получение письма).
Только не забудтье отключить в настройках дле "Использовать поле BCC для рассылки", установить в "нет", иначе может быть полный "хаос" в получателях
*
str_replace - возвращает строку в которой все вхождения нужного нам тега заменены на нужное нам значение, синтаксис такой:
str_replace ($search , $replace , $subject)
т.е. все вождения $search будут заменены на $replace, замена будет выполнена в теле $subject которое уже с необходимыми заменами и будет возвращенно функцией.