跟踪像素和 Gmail 代理的问题
Problems with tracking pixels and Gmail proxy
我正在尝试为从 wordpress 发出的电子邮件实施自定义跟踪像素。
感谢这些 post:
Tracking email with PHP and image
Tracking email opens with a real image
尤其是
http://www.phpdevtips.com/2013/06/email-open-tracking-with-php-and-mysql/
我能够实现核心思想。
电子邮件加载跟踪像素通过
<img src="https://www.example.com/tracking.php?order_id=1" width="100" height="100" />
并在 tracking.php
$graphic_http = 'https://www.example.com/GIF-example.gif';
header('Content-Type: image/gif');
readfile( $graphic_http );
在浏览器中打开 tracking.php 文件会打开 gif 图像以供下载。
但是,跟踪 pixel/Tracking 图片不会显示在 Gmail 电子邮件中。只有损坏的图像徽标,当我单击以显示图像时,此 link 已打开
表示 Google 404:
Google 404. 错误
在此服务器上找不到请求的 URL /proxy/l2xUKFGnNFKm64zEYmJhOcUmEJm15w9MC1txRRF01tpKlcL3t3O16aMJgbYQkucBySV0xV2T0EsCwikOAC0Z4em6uPzSs38lkHrYBvosRRAk14EfPoEXqC5JdLxRm8ToZmGSQqt_RwHCaBE_3uLgQDVEB05Rdtkq-Xzuw30=s0-d-e1-ft。我们知道的就这些。
Google 的代理无法读取 php 脚本似乎是个问题。 tracking.php 和 GIF-example.gif 文件都拥有 775 权利并且可以公开访问。
在 Hotmail 上这确实有效,所以这似乎确实是 Google 代理的问题。
有人知道如何让 Google 代理访问这个跟踪像素吗?
你所有的 header 都在试图强制浏览器下载文件并忽略它的文件类型(因为你从不说它是什么文件类型)。要在浏览器中显示图像,您需要设置正确的 header。
这基本上就是您需要做的所有事情:
$orderId = isset($_GET['order_id']) ? $_GET['order_id'] : null;
if ($orderId) {
// Save stuff in your DB or how you want to log it.
}
header('Content-Type: image/gif');
echo file_get_contents('/absolute/path/to/image.gif');
exit; // Not really necessary, but just to make sure there's no more output.
我找到了答案:问题出在 Google 代理和问号上?在 https://www.example.com/tracking.php?order_id=1
Google 代理地址搞砸了,因为它已经有一个问号并导致 404。
我使用 https://www.example.com/tracking.php/order_id=1
解决了它,然后在 tracking.php 上我没有使用 $_GET
但 $_SERVER['REQUEST_URI']
并解析了 /order_id=
字符串。
跟踪像素显示在 Gmail 中,并在 tracking.php 脚本中进行跟踪。
我正在尝试为从 wordpress 发出的电子邮件实施自定义跟踪像素。
感谢这些 post:
Tracking email with PHP and image
Tracking email opens with a real image
尤其是
http://www.phpdevtips.com/2013/06/email-open-tracking-with-php-and-mysql/
我能够实现核心思想。
电子邮件加载跟踪像素通过
<img src="https://www.example.com/tracking.php?order_id=1" width="100" height="100" />
并在 tracking.php
$graphic_http = 'https://www.example.com/GIF-example.gif';
header('Content-Type: image/gif');
readfile( $graphic_http );
在浏览器中打开 tracking.php 文件会打开 gif 图像以供下载。
但是,跟踪 pixel/Tracking 图片不会显示在 Gmail 电子邮件中。只有损坏的图像徽标,当我单击以显示图像时,此 link 已打开
表示 Google 404:
Google 404. 错误
在此服务器上找不到请求的 URL /proxy/l2xUKFGnNFKm64zEYmJhOcUmEJm15w9MC1txRRF01tpKlcL3t3O16aMJgbYQkucBySV0xV2T0EsCwikOAC0Z4em6uPzSs38lkHrYBvosRRAk14EfPoEXqC5JdLxRm8ToZmGSQqt_RwHCaBE_3uLgQDVEB05Rdtkq-Xzuw30=s0-d-e1-ft。我们知道的就这些。
Google 的代理无法读取 php 脚本似乎是个问题。 tracking.php 和 GIF-example.gif 文件都拥有 775 权利并且可以公开访问。
在 Hotmail 上这确实有效,所以这似乎确实是 Google 代理的问题。
有人知道如何让 Google 代理访问这个跟踪像素吗?
你所有的 header 都在试图强制浏览器下载文件并忽略它的文件类型(因为你从不说它是什么文件类型)。要在浏览器中显示图像,您需要设置正确的 header。
这基本上就是您需要做的所有事情:
$orderId = isset($_GET['order_id']) ? $_GET['order_id'] : null;
if ($orderId) {
// Save stuff in your DB or how you want to log it.
}
header('Content-Type: image/gif');
echo file_get_contents('/absolute/path/to/image.gif');
exit; // Not really necessary, but just to make sure there's no more output.
我找到了答案:问题出在 Google 代理和问号上?在 https://www.example.com/tracking.php?order_id=1
Google 代理地址搞砸了,因为它已经有一个问号并导致 404。
我使用 https://www.example.com/tracking.php/order_id=1
解决了它,然后在 tracking.php 上我没有使用 $_GET
但 $_SERVER['REQUEST_URI']
并解析了 /order_id=
字符串。
跟踪像素显示在 Gmail 中,并在 tracking.php 脚本中进行跟踪。