Google为图片链接添加了代理,图片无法显示

时间:2016-08-11 10:02:06

标签: php image symfony amazon-s3 gmail

我正在从我的组织发送批量电子邮件。我想跟踪谁打开了电子邮件。我知道它不是100%可行,但我们仍然会有一些统计数据。 当我通过Mailchimp或Postmark发送电子邮件时,我可以看到他们正确跟踪打开的电子邮件。

图片位于Amazon S3上,电子邮件通过Amazon SES发送。我使用记录用户的url设置图像的src,然后返回图像。如果我在浏览器中打开该URL,它会正确记录条目并下载图像。

问题是Gmail在图片前添加了代理,因此图片根本无法加载。 我正在使用Symfony2.8,这是我发送的响应。

    $response = new Response();

    $disposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'myimage.png');
    $response->headers->set("Content-Disposition", $disposition);
    $response->setPublic();
    $response->headers->set("Content-Transfer-Encoding", "binary");
    $response->setCache(array('max_age' => 0, 'public' => true));
    $response->mustRevalidate();
    $response->setExpires(0);
    $response->headers->set("Content-Type", "image/png");
    $response->headers->set("Content-Length", 10240);
    $response->setContent(file_get_contents("http://some-amazon-link/assets/logo/pressweb/myimage.png"));

    return $response;

P.S。我已经在Stack和其他网站上阅读了几乎所有关于它的问题。我的代码可能有问题。我不知道。 谢谢。

1 个答案:

答案 0 :(得分:0)

这对我有用。感谢Luciano,我在他的网站上找到了解决方案。 http://loige.co/transparent-pixel-response-with-symfony-how-to-track-email-opening/ 跟踪是个人选择,您如何跟踪您的用户,即使用ID等。整个代码可以在他的网站上找到。

class TransparentPixelResponse extends Response  
{
/**
 * Base 64 encoded contents for 1px transparent gif and png
 * @var string
 */
const IMAGE_CONTENT = 
    'R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='
;

/**
 * The response content type
 * @var string
 */
const CONTENT_TYPE = 'image/gif';

/**
 * Constructor
 */
public function __construct()
{
    $content = base64_decode(self::IMAGE_CONTENT);
    parent::__construct($content);
    $this->headers->set('Content-Type', self::CONTENT_TYPE);
    $this->setPrivate();
    $this->headers->addCacheControlDirective('no-cache', true);
    $this->headers->addCacheControlDirective('must-revalidate', true);
}

}