繁体   English   中英

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

[英]Track php emails with php script?

我正在使用 php mail() function 发送 email 时事通讯。

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

状态将是
1. 发送次数。
2. 交付数量。
3. 交货日期。
4. 总阅读次数。
5. 唯一阅读次数。
6. 阅读日期。
7. 退回次数。
8. Total Num.Of 用户点击了 email 中的链接。
9. Unique Num.Of用户点击了email中的链接。

从上述状态我可以跟踪以下内容:
1. 已发送。 // 这在从编码发送时被跟踪。
8. Total Num.Of 点击了 email 中的链接。 // 这是通过在 url 中添加附加参数来跟踪的。
9. Unique Num.Of点击了email中的链接。 // 这是通过在 url 中添加附加参数来跟踪的。

如何跟踪mail() function发送的邮件的其他状态?
我必须从同一台服务器发送和跟踪电子邮件。

您不能直接从 mail() function 跟踪其他状态。 技术上已发送仅告诉您邮件已成功传递到服务器的出站邮件队列 - 您实际上无法判断它是否离开了您的服务器。

1,。 您需要检查您的邮件服务器日志以准确了解 email 何时离开服务器。

2,3。 送达和送达日期的数量 - 您需要再次检查您的邮件服务器日志以查看邮件何时(成功)移交给第三方邮件服务器。 但是,这取决于您对交付的定义(到最终用户邮箱?到他们的 email 客户端?)这些统计信息的可靠性。

4,5,6。 读取的总数、读取的唯一编号、读取日期。 您无法准确地跟踪这一点。 但是,如果您发送 HTML email 您可以将图像嵌入到 email 中,而图像的来源是您的网络服务器。 If each image URL had a unique identifier for the person you sent the email to then you could track this from your server logs (or via php if the url was a php script that returned an image). 然而,这依赖于最终用户允许从外部网络服务器加载图像(例如 Outlook 和 gmail 默认情况下关闭此功能)。

7、。 如果您将发件人地址发送为服务器上的脚本,它可以解析退回消息并确定退回的数量。 或者,您可以将发件人地址设置为 go 进入的邮箱并手动检查。

8, 9. email 中的每个链接都需要是指向您网络服务器上 url 的链接。 URL 可能是一个脚本,可以跟踪谁点击(通过使用查询变量)以及他们想要查看的内容(另一个查询变量),然后将它们重定向(php 中的标题 function)到您希望它们结束的位置。

要获得所有这些统计数据,您将不得不使用不同的系统:

检查发送的号码

邮件 function 的返回码是不可靠的,它只是告诉你系统将开始尝试发送邮件。 您必须使用通过 SMTP 本身进行通信的专用 PHP class 或解析系统邮件日志。 但请记住,这个数字几乎毫无意义,这导致了下一点......

检查送达号码

Even if you would start to parse the mail logs or use a specialised PHP class to send via SMTP yourself, you could only check the first server in the chain you pass the email to. 例如,在一家大公司中,邮件可能会被传递到中央邮件服务器,您可以对其进行检查。 然后将其发送到公司的另一个内部邮件服务器,该服务器拒绝该邮件。 你永远不会知道。 更不用说垃圾邮件过滤器了。 因此,无法判断邮件是否已送达 - 直到下一点...

检查读取次数

更正式地说,您必须说“检查打开的电子邮件数量”。 For that, you add an image with an unique URL to your HTML mail, for example http://mywebsite.com/images/IDOFRECIPIENT/IDOFMAILING/logo.jpg - when the URL is requested, you know the corresponding recipient opened the mailing . 缺点:如果收件人阻止加载外部内容,您将无能为力,您永远不会知道他的阅读情况。

链接的点击次数

那很简单:将邮件中的所有链接替换为您自己域中的链接。 当访问这些链接时,会出现一个计数器并将访问者转发到真实站点。 注意:如果您的 HTML email 中的链接文本包含域的名称,但您链接到另一个域,大多数 email 客户会认为这是垃圾邮件。 例如,

www.citibank.com
不好。

反弹

那是一个艰难的。 在 email 中指定一个“发件人”Header。 这是 email 被退回的地址。 You can use another address than the "From" Header, which means that when a recipient hits the "Reply" button, he can send an email to info@yourdomain.com, but if it bounces, the email goes to bounces-123- 456@newsletter.yourdomain.com。

诀窍是创建弹跳地址作为整个域的包罗万象 - 所以每个发送到“...@newsletter.yourdomain.com”的 email 应该 go 到同一个收件箱。 在 email 地址内,保存收件人和邮件的 ID:bounces-[recipientid]-[mailingid]@newsletter.yourdomain.com。 收件人地址是退回时唯一可靠的数据,其他所有内容都可能被收件人的邮件服务器删除。

然后只需编写一个 PHP 脚本,该脚本通过 POP3 获取邮件并检查发件人。

希望我能帮助你!

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

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 的mail() function 的任何外发邮件流量。

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

我可以推荐:如果您正在运行 linux,我可以推荐: 如何记录使用 PHP 的 mail() Function 发送的电子邮件以检测表单垃圾邮件以获取更多详细信息。

您可以通过向 php 脚本和邮件功能添加一些附加代码来跟踪电子邮件并获取已读回执(更改为 email 消息)。

这是一个链接,可帮助您跟踪 email 已读回执 - php 脚本

由于 email 营销中的 PHP 时事通讯脚本,我们通常在 email 中插入小图片或句子以使其不可见。 PHP function 将返回小图片的回声,将跟踪状态返回给您的邮件服务器。 当您打开时事通讯,并允许出现 email 中的所有图片时,此跟踪 function 将被激活。

对于退回系统,它必须参考服务器环境。 只有当您在您的 VPS 或其他服务器中配置代码时,才能激活它。 相信你应该看到http://www.phpnewsletter.org

(已编辑)

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

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

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

如果您是 go Drupal,那么大部分繁重的工作已经为您完成了。 你只需要以你喜欢的方式组装拼图。 我个人建议使用 MailChimp 来跟踪您的电子邮件。 他们有一个 Drupal 模块也可以与之集成(http://drupal.org/project/mailchimp)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM