Интеграция phplist
Описание интеграции phplist в существующий сайт
Почтовая программа phplist имеет только одно предназначение — обеспечить рассылку почтовых сообщений. Однако множество настроек и нюансов конфигурирования позволяют выполнять этот процесс множеством разнообразных способов. Конечно же, для получателей системы обычно неважно, каким образом работает сама система внутри, им хочется получать сообщения в читабельном виде, иметь возможность отписаться от нежелательной корреспонденции либо же наоборот, — иметь возможность быстрой подписки на регулярные анонсы. Собственно про интеграцию в существующую систему, прозрачным для пользователей способом и пойдет речь в сегодняшней статье.
Можно использовать несколько возможных вариантов интеграции phplist в готовый веб-сайт. Проще всего конечно, заставить пользователей регистрироваться в этой системе, задав внешний вид ее шаблонов, так, чтобы он соответствовал оформлению существующего веб-сайта. Однако стоит учесть, что такой способ кроме долгожданной простоты может принести и проблемы. Ведь, как общеизвестно лишний раз регистрироваться никто не любит.
Исходя из этого, наиболее оптимальным способом интеграции phplist будет внедрение почтовой системы «внутрь» самого сайта. При этом для нормальной работы всего комплекса достаточно обеспечить добавление новых записей в базу данных phplist при регистрации новых пользователей на самом сайте. Конечно, желательно также удалять записи из почтовой системы при желании пользователя отменить регистрацию либо же отказе от получения лишней корреспонденции. Тут уже можно использовать встроенные возможности phplist, позволяющей создавать формы для конечных пользователей. Однако реализация самого удаления е-майлов из списка рассылки не является сколько-нибудь сложной. Поэтому, именно этот вариант интеграции phplist и будет предложен вам сегодня.
Конечно же, перед работой по созданию интеграционных методов внутри хост-системы, к которой и будет подключаться phplist, необходимо соответствующим образом настроить последнюю. Для этого необходимо как минимум отключить возможность самостоятельной регистрации в почтовой системе. Как правило, если производится интеграция phplist в отлаженный веб-сайт, в последнем, пользователи и так уже как минимум один раз проходят регистрацию. Поэтому есть смысл дописывать функции по добавлению «пользовательских» записей в phplist в уже существующую схему идентификации пользователей сайта. Для этого стоит отключить функционал мейлера, который связан с самостоятельным подключением желающих получать рассылки. Таким образом, регистрация будет совершенно незаметна для новых получателей ваших анонсов и тем самым ваш ресурс может снискать большую популярность, за счет меньшей надоедливости дополнительных сервисов.
Создание нового сообщения |
Итак, какие же действия необходимо выполнить для прозрачной интеграции phplist:
- Отключаем встроенную регистрацию пользователей, для этого вносим изменения в файл .htaccess, который расположенный в корне каталога со скриптами phplist'a:
DirectoryIndex index.php
<FilesMatch "\.(php|inc)$">
Order allow,deny
deny from all
</FilesMatch>
Таким способом просто запрещается доступ ко всем файлам, которые имеют расширения php, inc и html. Единственным же способом регистрации в системе phplist будет оставаться внесение записей в базу данных сторонним скриптом, ну или же импорт такого списка с помощью административного интерфейса системы.
- Вставляем в уже существующую процедуру регистрации пользователя код, который добавит нужные записи в базу данных phplist. Приблизительно это может выглядеть следующим образом:
if ( $newusergetnews )
{
$mdb->query( "
INSERT INTO
phplist_user_user
SET
email='".mysql_escape_string($newemailaddress)."',
confirmed=1,
blacklisted = 0,
entered = now(),
modified = now(),
uniqid = '".mt_rand(0,100).md5(mt_rand(1,15600000))."',
htmlemail =1,
password = '".mt_rand(120,1200000)."',
passwordchanged = '".date( "Y-m-d").",
disabled = 0'
" );
$newid = mysql_insert_id( $mdb->_link );
$mdb->query( "INSERT INTO phplist_listuser SET userid=$newid+0, listid=1, modified = now()" );В этом примере $mdb — это объект, который обеспечивает интерфейс к базе данных MySQL с помощью метода query(). Е-майл пользователя, который добавляется — $newemailaddress. Переменная $newusergetnews — указывает на то, что пользователь согласился получать анонсы при регистрации на сайте. Следует отметить один нюанс. В последнем запросе пользователь добавляется в список рассылки, имеющий код «1». По-умолчанию, такую рассылку создает сам инсталлятор phplist, для тестовых целей и при этом называет ее соответствующим образом. Тут даже нет особой необходимости переименовывать ее, однако можно это сделать с той целью, чтобы название рассылки было более понятно для самого администратора. Само собой, для использования другого списка рассылки изменение значение, которое присваивается полю listid, в уже упомянутом, последнем запросе.
Администрирование списка пользователей - Создаем страницу для быстрой отписки пользователей от услуг сервиса. Конечно же, можно было бы использовать для этого и встроенную форму phplist, ссылка которой обычно располагается на стартовой пользовательской странице. Однако в ряде случаев своя собственная процедура более выгодна в том плане, что отключение от услуг рассылки может выполняться также и редактированием профиля пользователя, который может быть сделан более дружелюбно и привычно для пользователя, в отличие от более простых форм phplist. Вот примерный код, который служит для удаления пользователей из рассылки. При желании его легко подстроить под свои нужды:
$olist_user = $mdb->query_obj( $sql = "SELECT * FROM phplist_user_user WHERE email='".trim($emailaddress)."'" );
if ( $olist_user )
{
$mdb->query( "DELETE FROM phplist_listuser WHERE userid={$olist_user->id}" );
$mdb->query( "DELETE FROM phplist_user_user WHERE id={$olist_user->id}" );
$mdb->query( "DELETE FROM phplist_user_user WHERE email='{$emailaddress}'" );
}Небольшие пояснения, — $mdb->query_obj(), — возвращает запись MySQL в виде объекта. Сам код сначала ищет в базе phplist запись пользователя с е-майлом $emailaddress, который и необходимо отписать от рассылки, а затем собственно удаляет эту запись и вообще все записи с таким электронным адресом. Конечно, последняя процедура может и не понадобиться в том случае если администратор будет вовремя «убирать» базу данных phplist'а с помощью инструмента reconcile users / merge duplicate (англ.: согласование списка пользователей / объединение дубликатов), который встроен в административный интерфейс.
Перед тем как начать работать с системой отправки почты следует позаботиться о синхронизации баз данных вашего сайта и phplist. Это необходимо, поскольку на сайте уже могут существовать зарегистрированные пользователи, а в базу мейлера будут добавляться только новые регистрации. Для этого можно использовать способность системы phplist к импорту е-майлов. Можно сказать, что разработчики мейлера постарались сделать доступный импорт из практически любого источника данных. Сами функции активируются из административного интерфейса с помощью ссылки import.
- import emails with different values for attributes — импорт е-майлов с различными значениями атрибутов из практически произвольного файла формата CSV. Здесь можно настроить и символ разделителя, и импортировать из того же файла сразу же и другие параметры, например, имена пользователей. Следует отметить возможность пропускать при обработке файла уже существующие в базе е-майлы;
- import emails with the same values for attributes, — импорт е-майлов в одинаковыми значениями атрибутов. С помощью этого пункта можно «влить» текстовый файл, который содержит только сами е-майлы (по одному на строку);
- import emails from an imap account — в том случае если вы пользуетесь для работы с почтой сервером imap, можно взять е-майлы напрямую из своего акаунта;
- import emails from another database — импорт е-майлов из другой базы, с помощью этого пункта можно импортировать нужные данные из любой базы MySQL, достаточно задать реквизиты подключения, имя таблицы и название поля в котором находятся адреса. Этот способ можно назвать самым эффективным, если необходимо получить десятки тысяч адресов, которые находятся в базе данных на этом же хостинге. При этом можно указать, что существующие е-майлы будут перезаписаны, то есть исключить возможность дублирования информации.
Импортирование данных из произвольной базы MySQL |
В заключение
необходимо отметить, что такой способ интеграции phplist в вашу систему несколько необычен. Он требует знания PHP и вообще перед таким необходимо хорошо ориентироваться в дебрях собственного сайта. Однако взамен вы сразу получите профессиональное приложение по отправке корреспонденции внутри своего сайта, взамен многих попыток добиться нормальной работы системы рассылки другими способами.
Ссылки по теме
Источник: hostinfo.ru