Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php脚本跟踪php电子邮件?_Php_Email_Tracking_Newsletter - Fatal编程技术网

用php脚本跟踪php电子邮件?

用php脚本跟踪php电子邮件?,php,email,tracking,newsletter,Php,Email,Tracking,Newsletter,我正在使用phpmail()函数发送电子邮件时事通讯。 我必须跟踪时事通讯电子邮件的状态。 状态将为 1.发送的数量。 2.交付数量。 3.交付日期。 4.总读取次数。 5.唯一读取次数。 6.读取日期。 7.反弹次数。 8.单击电子邮件中链接的用户总数。 9单击电子邮件中链接的唯一用户数。 从上述状态,我可以跟踪以下内容: 1.已发送。//从编码发送时会对其进行跟踪。 8.在电子邮件中单击链接的总数。//可通过在url中添加其他参数来跟踪此操作。 9在电子邮件中单击链接的唯一数量。//可

我正在使用php
mail()
函数发送电子邮件时事通讯。

我必须跟踪时事通讯电子邮件的状态。

状态将为
1.发送的数量。
2.交付数量。
3.交付日期。
4.总读取次数。
5.唯一读取次数。
6.读取日期。
7.反弹次数。
8.单击电子邮件中链接的用户总数。
9单击电子邮件中链接的唯一用户数。

从上述状态,我可以跟踪以下内容:
1.已发送。//从编码发送时会对其进行跟踪。
8.在电子邮件中单击链接的总数。//可通过在url中添加其他参数来跟踪此操作。
9在电子邮件中单击链接的唯一数量。//可通过在url中添加其他参数来跟踪此操作。

如何跟踪从
mail()
功能发送的电子邮件的其他状态?


我必须从同一台服务器发送和跟踪电子邮件。

您不能通过mail()函数直接跟踪其他状态。从技术上讲,“已发送”只会告诉您邮件已成功传递到服务器的出站邮件队列,而实际上无法告诉您邮件是否离开了服务器

一,,。您需要检查邮件服务器日志,以查看电子邮件何时离开服务器

2,3。Num of delivered and delivered date-同样,您需要检查邮件服务器日志,查看邮件何时(成功)移交给第三方邮件服务器。但是,这些统计数据的可靠性将取决于您对“已发送”(发送到最终用户邮箱?发送到他们的电子邮件客户端?)的定义

4,5,6。读取总数、读取唯一编号、读取日期。你不能准确地追踪这个。但是,如果您发送HTML电子邮件,您可以在电子邮件中嵌入一个图像,该图像的源是您的Web服务器。如果每个图像URL都有您发送电子邮件给的人的唯一标识符,那么您可以从服务器日志(如果URL是返回图像的php脚本,则可以通过php)跟踪该标识符。但是,这取决于最终用户是否允许从外部Web服务器加载图像(例如Outlook和gmail在默认情况下关闭了此功能)

七,,。如果将发件人地址作为服务器上的脚本发送,它可以解析跳出消息并确定跳出的数量。或者,您可以将发件人地址设置为一个邮箱,然后手动进入并检查

八,九。电子邮件中的每个链接都需要是指向Web服务器上url的链接。该URL可以是一个脚本,可以跟踪谁单击了(通过使用查询变量)以及他们希望看到的内容(另一个查询变量),然后将它们重定向(php中的header函数)到您希望它们结束的位置。

(已编辑)

这里的基本概念是在PHP端记录发送。每条消息都有一些嵌入的HTML和一个图像。当用户打开电子邮件时,图像将向服务器发出ping,发送电子邮件已打开(读取)的事实和日期(可以来自服务器)以及其他信息,如用于打开邮件的邮件客户端(请求标题)

关于交付的参数,我不完全确定。我知道您可以从某些类型的邮件服务器(例如Microsoft Exchange)获取此信息,但我不知道您的标准POP3服务器是否支持此功能

使用此方法,您可以自动收集大量数据。它会像一个标准的网页广告跟踪器一样工作。对于服务器端,我建议使用CMS框架(如Drupal)或PHP框架(如CodeIgniter)


如果你选择Drupal,那么大部分的重担都已经为你完成了。你只需要以你喜欢的方式组装拼图。就个人而言,我建议使用MailChimp跟踪您的电子邮件。他们还有一个Drupal模块用于与之集成(http://drupal.org/project/mailchimp).

您可以轻松地记录通过PHP的
mail()
函数发送的任何邮件流量

这是通过创建一个包装器来完成的,该包装器将同时负责记录和发送电子邮件。这相对容易实现,可以通过
php.ini
设置进行控制


我可以推荐:如果您运行的是linux,请查看更多详细信息。

对于发送的数量,您可以使用基本包装:

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

要获得所有这些统计信息,您必须使用不同的系统:

检查发送的号码 邮件功能的返回码不可靠,它只告诉您系统将开始尝试发送邮件。您必须使用专门的PHP类,该类通过SMTP本身进行通信或解析系统邮件日志。但请记住,这个数字几乎没有意义,这就引出了下一点

检查发送的号码 即使您自己开始解析邮件日志或使用专门的PHP类通过SMTP发送邮件,您也只能检查传递邮件到的链中的第一个服务器。例如,在一家大公司中,邮件可能会传递到一个中央邮件服务器,您可以对其进行检查。然后它被发送到公司的另一个内部邮件服务器,该服务器拒绝邮件。你永远不会知道。甚至连垃圾邮件过滤器都不提。因此,无法判断邮件是否已送达-直到下一点

检查读取次数 更正式地说,你必须说“检查打开的电子邮件数量”。为此,您可以在HTML邮件中添加一个具有唯一URL的图像,例如,当请求URL时,您知道相应的收件人打开了邮件。缺点:如果收件人阻止加载外部内容,你对此无能为力,你永远也不会知道他的阅读

点击链接的次数 这很简单:用你自己域上的链接替换邮件中的所有链接。当访问这些链接时,将引发一个计数器,并将访问者转发到t
www.citibank.com