Отслеживать php письма с помощью php скрипта? - PullRequest
13 голосов
/ 15 июня 2011

Я отправляю новостные рассылки по электронной почте, используя функцию php mail().

Я должен отслеживать статус электронных рассылок.

Статус будет
1. Количество отправленных.
2. Количество доставленных.
3. Дата доставки.
4. Общее количество. Прочитано.
5. Уникальный номер. Прочитано.
6. Прочитать дату.
7. Количество отклоненных.
8. Общее число пользователей, щелкнувших по ссылкам в электронном письме.
9. Уникальное количество. Клики щелкнули по ссылкам в электронном письме.

Из вышеприведенного статуса я могу отслеживать следующее:
1. Отправлено.// Это отслеживается, поскольку оно отправлено из кодирования.
8. Всего Num.Of нажал ссылки в электронном письме.// Это отслеживается путем добавления дополнительных параметров в URL.
9. Уникальный номер. Кликнул по ссылкам в письме.// Это отслеживается путем добавления дополнительных параметров в URL.

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

Ответы [ 7 ]

16 голосов
/ 15 июня 2011

Вы не можете напрямую отслеживать другой статус с помощью функции mail ().Технически отправляется только говорит вам, что почта была успешно передана в очередь исходящей почты сервера - вы не можете сказать, покинул ли он ваш сервер.

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

2,3.Количество доставленных и доставленных дат - опять же вам нужно будет проверить журналы вашего почтового сервера, чтобы увидеть, когда почта была (успешно) передана стороннему почтовому серверу.Однако от того, насколько надежной будет эта статистика, будет зависеть ваше определение доставленного (в почтовый ящик конечных пользователей? В их почтовый клиент?)

4,5,6.Общее количество прочитанных, уникальное число прочитанных, прочитанных дат.Вы не можете точно отследить это.Однако, если вы отправили электронное письмо в формате HTML, вы можете вставить изображение в электронное письмо, где источником изображения был ваш веб-сервер.Если каждый URL-адрес изображения имеет уникальный идентификатор человека, которому вы отправили электронное письмо, вы можете отслеживать это по журналам вашего сервера (или по php, если URL-адрес был сценарием php, который возвращал изображение).Однако это зависит от того, что конечный пользователь разрешает загрузку изображений с внешних веб-серверов (например, в Outlook и gmail это отключено по умолчанию).

7 ,.Если вы отправили адрес от имени, чтобы быть сценарием на вашем сервере, он может проанализировать сообщение о сбое и определить, сколько из них отскочил.В качестве альтернативы вы можете использовать адрес отправителя в качестве почтового ящика, в который вы заходите и проверяете его вручную.

8, 9. Каждая ссылка в письме должна быть ссылкой на URL-адрес вашего веб-сервера.Этим URL-адресом может быть скрипт, который будет отслеживать, кто нажал (с помощью переменной запроса) и что они хотят видеть (другая переменная запроса), а затем перенаправить их (функция заголовка в php) туда, куда вы хотите, чтобы они оказались.

9 голосов
/ 27 июня 2011

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

Проверка отправленного номера

Код возврата почтовой функции ненадежен, он только говорит о том, что система начнет пытаться отправить почту. Вы должны будете использовать специализированный класс PHP, который взаимодействует через сам SMTP или анализировать системные журналы почты. Но помните, что это число почти бессмысленно, что приводит к следующему пункту ...

Проверка доставленного номера

Даже если вы начнете анализировать почтовые журналы или используете специальный класс PHP для отправки через SMTP самостоятельно, вы можете проверить только первый сервер в цепочке, на которую вы передаете письмо. Например, в большой компании почта может передаваться на центральный почтовый сервер, который вы можете проверить. Затем он отправляется на другой внутренний почтовый сервер компании, который отказывается от почты. Ты никогда не узнаешь. Даже не говоря о спам-фильтрах. Таким образом, невозможно определить, была ли доставлена ​​почта - до следующего момента ...

Проверка количества чтений

Более формально, вам нужно будет сказать "проверка количества открытых электронных писем". Для этого вы добавляете изображение с уникальным URL-адресом в свою HTML-почту, например http://mywebsite.com/images/IDOFRECIPIENT/IDOFMAILING/logo.jpg - когда запрашивается URL-адрес, вы знаете, что соответствующий получатель открыл почтовое сообщение. Недостаток: если получатель блокирует загрузку внешнего содержимого, вы ничего не можете с этим поделать, вы никогда не узнаете о его прочтении.

Количество нажатий на ссылки

Это просто: замените все ссылки в почте ссылками на ваш собственный домен. Когда эти ссылки посещаются, счетчик поднимается, и посетитель перенаправляется на реальный сайт. Осторожно: если текст ссылки в вашем электронном письме в формате HTML содержит имя домена, но вы ссылаетесь на другой домен, большинство почтовых клиентов считают, что это спам. Так, например,

<a href="http://www.google.de" rel="noreferrer">www.citibank.com</a>
это плохо.

Отказы

Это сложный вопрос. Укажите заголовок «Отправитель» в своем электронном письме. Это адрес, на который отправлено письмо. Вы можете использовать другой адрес, отличный от заголовка «From», что означает, что когда получатель нажимает кнопку «Ответить», он может отправить электронное письмо на адрес info@yourdomain.com, но если он переходит, сообщение переходит на bounces-123- 456@newsletter.yourdomain.com.

Хитрость заключается в том, чтобы создать перенаправляющие адреса в качестве всеобъемлющего для всего домена, поэтому каждое электронное письмо, отправленное на "... @ newsletter.yourdomain.com", должно отправляться в один и тот же почтовый ящик. Внутри адреса электронной почты вы сохраняете идентификатор получателя и почтового сообщения: bounces- [receientid] - [mailingid] @ newsletter.yourdomain.com. Адрес получателя - единственные надежные данные при пересылке, все остальное может быть удалено почтовым сервером получателя.

Затем просто закодируйте PHP-скрипт, который получает почту через POP3 и проверяет отправителя.

Надеюсь, я смогу вам помочь!

4 голосов
/ 25 июня 2011

Для количества отправленных вы можете использовать простую обертку:

class Mailer
{
    /**
     * Events
     *
     * @var array
     */
    protected $_events = array();

    /**
     * Number of successful emails
     *
     * @var int
     */ 
    protected $_numFailures = 0;

    /**
     * Number of failed emails
     *
     * @var int
     */ 
    protected $_numSuccesses = 0;

    /**
     * Send email using PHP mail() function
     * 
     * @param string $to Send to email address
     * @param string $subject Email subject
     * @param string $message Email message
     * @param string $additionalHeaders Optional. Additional headers
     * @param string $additionalParams Optional. Additional params
     * @return Mailer
     */
    public function mail($to, $subject, $message, $additionalHeaders = '', $additionalParams = '')
    {
        $result = mail($to, $subject, $message, $additionalHeaders, $additionalParams);

        if ($result) {
            $this->_numSuccesses++;
        } else {
            $this->_numFailures++;
        }

        if (isset($this->_events['mail'])) {
            foreach ($this->_events['mail'] as $event) {
                $event($result, $to, $subject, $message);
            }
        }

        return $this;
    }

    /**
     * Get total number of emails sent
     *
     * @return int
     */
    public function count()
    {
        return $this->_numSuccesses + $this->_numFailures;
    }

    /**
     * Get number of successes
     *
     * @return int
     */
    public function getSuccessCount()
    {
        return $this->_numSuccesses;
    }

    /**
     * Get number of failures
     *
     * @return int
     */
    public function getFailureCount()
    {
        return $this->_numFailures;
    }

    /**
     * Add event
     * 
     * @param string $subject Event subject
     * @param Closure $event Event to execute when subject called
     * @return Mailer
     */
    public function addEvent($subject, Closure $event)
    {
        if (!is_string($subject)) {
            throw new InvalidArgumentException('$subject must be a string');
        }
        $this->_events[$subject][] = $event;
        return $this;
    }
}

/** Mailer */
$mailer = new Mailer();

$mailer->addEvent('mail', function($result, $to, $subject, $message) {
    // Code to log to database
});

$mailer->mail($to, $subject, $message);

// Execution order:
// 1. Mailer::mail()
// 2. Increase successes or failures, as appropriate
// 3. Execute 'mail' events
// 4. Closure with code to log to database executed
3 голосов
/ 24 июня 2011

Вы можете легко регистрировать любой исходящий почтовый трафик, проходящий через функцию PHP mail().

Это делается путем создания оболочки, которая позаботится как о регистрации, так и об отправке электронных писем. Это относительно просто сделать, и им можно управлять с помощью php.ini настроек.

Я могу порекомендовать: Как регистрировать электронные письма, отправленные с помощью функции PHP mail () для обнаружения спама в форме для получения более подробной информации, если вы используете Linux.

1 голос
/ 02 августа 2012

Вы можете отслеживать электронную почту и получать уведомления о прочтении, добавив дополнительный код в скрипт php и функцию mail (изменения в сообщении электронной почты).

Вот ссылка, которая поможет вам отслеживать чтение электронной почтыквитанции - php скрипт

1 голос
/ 28 июня 2011

Как сценарий новостной рассылки PHP в маркетинге по электронной почте, мы обычно вставляем в письмо маленькую картинку или предложения, чтобы сделать их невидимыми. Функция PHP возвращает эхо от маленьких картинок, чтобы вернуть статус отслеживания на ваш почтовый сервер. Когда вы откроете новостную рассылку и разрешите отображать все изображения в электронном письме, эта функция отслеживания будет активирована.

Для системы отказов она должна относиться к среде сервера. Только когда вы настраиваете код в своем VPS или каком-либо другом сервере, это может быть активировано. Я полагаю, вы должны увидеть http://www.phpnewsletter.org

0 голосов
/ 23 июня 2011

(Edited)

Основная концепция здесь заключается в том, что вы записываете посылки на стороне PHP. Каждое сообщение будет иметь встроенный HTML-код и изображение. Когда пользователь открывает электронные письма, изображение запускает проверку связи с сервером, отправляя тот факт, что электронное письмо было открыто (прочитано) и дата (это может быть получено с сервера), а также другая информация, такая как почтовый клиент, использованный для открытия сообщения ( заголовки запроса).

По поставленным параметрам я не совсем уверен. Я знаю, что вы можете получить это с определенных типов почтовых серверов (например, Microsoft Exchange), но я не знаю, поддерживают ли это ваши стандартные серверы POP3.

С помощью этого метода вы можете автоматически собрать приличное количество данных. Он будет работать как стандартный трекер рекламы на веб-страницах. Для серверной части я бы рекомендовал среду CMS, такую ​​как Drupal, или среду PHP, такую ​​как CodeIgniter.

Если вы пойдете в Друпал, то большая часть тяжелой работы за вас уже будет выполнена. Вы просто должны собрать кусочки головоломки так, как вам нравится. Лично я бы рекомендовал использовать MailChimp для отслеживания ваших писем. У них также есть модуль Drupal для интеграции с ним (http://drupal.org/project/mailchimp).

...