我正在使用 phpmail()
函数发送电子邮件通讯。
我必须跟踪时事通讯电子邮件的状态。
状态将是
1。Num.Of Sent。
2. 交付数量。
3. 交货日期。
4. 总阅读次数。
5. 唯一阅读次数。
6. 阅读日期。
7. 退回次数。
8. Total Num.Of 用户点击了电子邮件中的链接。
9. Unique Num.Of 用户点击了电子邮件中的链接。
从上述状态我可以跟踪以下内容:
1. 已发送。// 这在从编码发送时被跟踪。
8. Total Num.Of 点击了电子邮件中的链接。// 这是通过在 url 中添加附加参数来跟踪的。
9. Unique Num.Of 点击了邮件中的链接。// 这是通过在 url 中添加附加参数来跟踪的。
如何跟踪从mail()
功能发送的电子邮件的其他状态?
我必须从同一台服务器发送和跟踪电子邮件。
7 回答
您不能直接从 mail() 函数跟踪其他状态。技术上已发送仅告诉您邮件已成功传递到服务器的出站邮件队列 - 您实际上无法判断它是否离开了您的服务器。
1,。您将需要检查您的邮件服务器日志以准确了解电子邮件离开服务器的时间。
2,3。送达和送达日期的数量 - 您需要再次检查您的邮件服务器日志,以查看邮件何时(成功)移交给第三方邮件服务器。但是,这取决于您对交付的定义(到最终用户邮箱?到他们的电子邮件客户端?)这些统计信息的可靠性。
4,5,6。读取的总数、读取的唯一编号、读取日期。您无法准确地跟踪这一点。但是,如果您发送 HTML 电子邮件,您可以将图像嵌入到电子邮件中,而图像的来源是您的网络服务器。如果每个图像 URL 都有一个您向其发送电子邮件的人的唯一标识符,那么您可以从您的服务器日志中跟踪这一点(如果 url 是一个返回图像的 php 脚本,则可以通过 php)。然而,这依赖于最终用户是否允许从外部网络服务器加载图像(例如 Outlook 和 gmail 已默认关闭此功能)。
7、。如果您将发件人地址发送为服务器上的脚本,它可以解析退回消息并确定退回的数量。或者,您可以将发件人地址设置为您进入并手动检查的邮箱。
8, 9. 电子邮件中的每个链接都必须是指向您网络服务器上的 url 的链接。该 URL 可能是一个脚本,它将跟踪谁点击(通过使用查询变量)和他们想要看到的内容(另一个查询变量),然后将它们(php 中的标头函数)重定向到您希望它们结束的位置。
要获得所有这些统计数据,您将不得不使用不同的系统:
检查发送的号码
邮件函数的返回码并不可靠,它只是告诉你系统将开始尝试发送邮件。您必须使用通过 SMTP 本身进行通信或解析系统邮件日志的专用 PHP 类。但请记住,这个数字几乎毫无意义,这导致了下一点......
检查送达号码
即使您自己开始解析邮件日志或使用专门的 PHP 类通过 SMTP 发送,您也只能检查您将电子邮件传递到的链中的第一台服务器。例如,在一家大公司中,邮件可能会被传递到中央邮件服务器,您可以对其进行检查。然后将其发送到公司的另一个内部邮件服务器,该服务器拒绝该邮件。你永远不会知道。更不用说垃圾邮件过滤器了。因此,无法判断邮件是否已送达 - 直到下一点...
检查读取次数
更正式地说,您必须说“检查打开的电子邮件数量”。为此,您向 HTML 邮件添加具有唯一 URL 的图像,例如http://mywebsite.com/images/IDOFRECIPIENT/IDOFMAILING/logo.jpg - 当请求 URL 时,您知道相应的收件人打开了邮件. 缺点:如果收件人阻止加载外部内容,您将无能为力,您永远不会知道他的阅读情况。
链接的点击次数
那很简单:将邮件中的所有链接替换为您自己域中的链接。当访问这些链接时,会出现一个计数器并将访问者转发到真实站点。注意:如果您的 HTML 电子邮件中的链接文本包含一个域的名称,但您链接到另一个域,大多数电子邮件客户端会认为它是垃圾邮件。例如,
www.citibank.com
不好。
反弹
那是一个艰难的。在您的电子邮件中指定一个“发件人”标头。这是电子邮件被退回的地址。您可以使用除“发件人”标头之外的其他地址,这意味着当收件人点击“回复”按钮时,他可以向 info@yourdomain.com 发送电子邮件,但如果它被退回,则电子邮件会发送至bounces-123- 456@newsletter.yourdomain.com。
诀窍是创建弹跳地址作为整个域的包罗万象 - 因此发送到“...@newsletter.yourdomain.com”的每封电子邮件都应该发送到同一个收件箱。在电子邮件地址中,您保存收件人和邮件的 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
您可以轻松记录通过 PHPmail()
函数的任何外发邮件流量。
这是通过创建一个包装器来完成的:记录和发送电子邮件。这相对容易实现,并且可以通过php.ini
设置进行控制。
我可以推荐:如果您正在运行 linux,如何记录使用 PHP 的 mail() 函数发送的电子邮件以检测表单垃圾邮件以获取更多详细信息。
作为电子邮件营销中的PHP时事通讯脚本,我们通常在电子邮件中插入小图片或句子以使其不可见。PHP 函数将返回小图片的回声,以将跟踪状态返回到您的邮件服务器。当您打开时事通讯,并允许显示电子邮件中的所有图片时,此跟踪功能将被激活。
对于退回系统,它必须参考服务器环境。只有当您在您的 VPS 或其他服务器中配置代码时,才能激活它。我相信你应该看到http://www.phpnewsletter.org
您可以通过向 php 脚本和邮件功能(更改电子邮件信息)添加一些附加代码来跟踪电子邮件并获取已读回执。
这是一个链接,可帮助您跟踪电子邮件已读回执 - php 脚本
(已编辑)
这里的基本概念是您在 PHP 端记录发送。每条消息都会有一些嵌入的 HTML 和图像。当用户打开电子邮件时,图像将向服务器发送 ping,发送电子邮件已打开(已阅读)和日期(这可以来自服务器)以及其他信息,例如用于打开邮件的邮件客户端 (请求标头)。
关于交付的参数,我不完全确定。我知道您可以从某些类型的邮件服务器(例如 Microsoft Exchange)获得此功能,但我不知道您的标准 POP3 服务器是否支持此功能。
您可以使用此方法自动收集大量数据。它真的会像标准的网页广告跟踪器一样工作。对于服务器端,我建议使用 CMS 框架,例如 Drupal 或 PHP 框架,例如 CodeIgniter。
如果你使用 Drupal,那么大部分繁重的工作已经为你完成了。你只需要以你喜欢的方式组装拼图。我个人建议使用 MailChimp 来跟踪您的电子邮件。他们也有一个 Drupal 模块用于与之集成(http://drupal.org/project/mailchimp)。