Как я могу отправлять ежедневные уведомления по электронной почте пользователям в PHP? - PullRequest
6 голосов
/ 17 мая 2011

У меня есть простая форма регистрации пользователя с флажком, который позволяет пользователям получать ежедневные уведомления по электронной почте, если они были активны в каком-либо из своих проектов ... так же, как в Stack Overflow выдается "Уведомлять xxx@example.com ежедневно о любых новых ответы».

В настоящее время я думаю реализовать это в среде LAMP:

  1. В базе данных пользователей установите логическое значение, если пользователь хочет получать ежедневные электронные письма.

  2. Если есть какие-либо действия по проекту, проект обновляется с текущей отметкой времени.

  3. Каждую ночь (полночь) исполняется файл PHP (вероятно, с помощью задания cron), который просматривает базу данных проекта, чтобы определить, какие проекты были активны в этот день. Для проектов с активностью выбирается имя владельца проекта и сканируется пользовательская таблица, чтобы проверить, хочет ли пользователь получать ежедневное уведомление по электронной почте. Если да, добавьте в список получателей; иначе игнорируй.

У меня есть вопросы / проблемы, которые были бы полезны, прежде чем я приступлю к реализации:

  1. Я нахожусь в среде общего хостинга. Какие меры предосторожности нужно предпринять, чтобы не быть идентифицированным как спам хостинговой компанией или получающими почтовыми серверами?

  2. Нужно ли "разбивать" список получателей (по 50 писем за раз) и отправлять по электронной почте каждой группе? Это так же просто, как спать (30); между каждым звонком на почту ()?

  3. Я использую платформу CodeIgniter и заставлю задание cron вызывать соответствующую функцию в контроллере для запуска этого в полночь. Как ограничить вызовы только заданием cron, чтобы неавторизованный пользователь не мог вызывать эту функцию из браузера?

Спасибо.

Ответы [ 4 ]

1 голос
/ 17 мая 2011
  1. Если вы измените заголовок «From» в php, убедитесь, что вы изменили его на домен, размещенный на этом сервере.Это выглядит подозрительно, когда mail @ a.com отправляется серверами b.com.

  2. Я бы отправлял электронные письма индивидуально foreach ($Users as $User)..., так как это позволяет персонализировать содержимое электронной почты.Даже если вам не нужно персонализировать электронную почту сейчас, вы можете захотеть позже, и поддержка для нее уже будет доступна, когда она вам понадобится.

  3. Во-первых, я бы сохранилСценарий вне корня сети.Я не уверен, что CodeIgniter позволит вам сделать это, но нет необходимости, чтобы скрипт обслуживал Apache.Крону все равно, где хранится скрипт.Кроме того, я проверил время выполнения скрипта.Если это не полночь, то не взламывайте электронные письма.Кроме того, вы можете вести журнал, а также проверять, чтобы электронные письма еще не были отправлены в этот день перед отправкой.

1 голос
/ 17 мая 2011

О третьем вопросе: вы можете использовать файл .htaccess, чтобы запретить доступ к этой конкретной странице, или вы можете вызвать свой скрипт в cron с параметром командной строки и проверить эту переменную в $argv.

1 голос
/ 17 мая 2011

1) Запись SPF - самая важная вещь. Используйте электронную почту с домена, чтобы бы то ни было@@whwhat.com, где бы на веб-узле what.com были правильно установлены записи SPF.

2) Всегда полезно задушить электронную почту, особенно при первом запуске. Вам следует проверить политики общих серверов, которые обычно составляют 200-500 в час. Подсчитайте, сколько секунд это доходит. Например, 300 / час равен 1 каждые 12 секунд. После нескольких недель отправки хороших писем вы можете отправлять большие суммы.

3) Вы можете иметь файл cron вне webroot или ограничить доступ через .htaccess или другим способом.

1 голос
/ 17 мая 2011

1) Начните с записи SPF и DKIM, если вы можете, чтобы почтовые серверы знали, ожидают ли письма от ваших серверов

2) Сначала вам нужно поместить получателей в поле BCC, чтобыне каждый пользователь имеет адреса электронной почты 49 других пользователей в вашей системе.Еще один шаг - сделать каждое электронное письмо отдельно, указав в поле «ТО» только получателя.Этот подход также позволяет вам адаптировать каждое электронное письмо к пользователю (возможно, добавив «Привет [Имя]».

3) У задания cron что-то вроде wget <a href="http://localhost/send-emails" rel="nofollow">http://localhost/send-emails</a>

Затемваш скрипт, отметьте $_SERVER и убедитесь, что вы разрешаете запросы только от 127.0.0.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...