通过django跟踪打开的电子邮件

时间:2018-10-04 10:32:00

标签: django django-models django-forms django-templates django-views

大家好,我尝试用PHP跟踪打开的邮件,但是Google的新图像代理现在不允许通过邮件执行php脚本(如果有人有工作脚本,请指点我在那里,我尝试了这个{{ 3}})。所以我在这篇文章

中在Django中尝试
  

https://github.com/brampauwelyn/php-email-tracker

但是它似乎正在工作,但是我不知道如何实现它。他略过了一部分。真是令人困惑。 现在我有

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url

from mailer import views

urlpatterns = [
    url(r'^image_load/$', views.image_load, name='image_load'),
    path('admin/', admin.site.urls),
]

views.py

def image_load(request):
    print("\nImage Loaded\n")
    red = Image.new('RGB', (1, 1))
    response = HttpResponse(content_type="image/png")
    red.save(response, "PNG")
    return response

执行此操作时出现错误

text_content = '<h1>This is an image message.</h1>'
tracker = '<img src="{{image_url}}" alt="" width="1" height="1" border="0">'
text_content += tracker
text_content["image_url"] = HttpRequest.build_absolute_uri(reverse("image_load"))
print(context_data)

第四行说

  

tracker ['image_url'] = request.path('image_load')TypeError:'str'   对象不可调用

请帮助解决这个问题。

1 个答案:

答案 0 :(得分:0)

我使用一种略有不同的方法来做到这一点。在此示例中,我跟踪哪些用户打开了电子邮件,但是您可以使用另一种方法。在网址中:

val name : String = ???   
val all_files : Seq[String] = dbutils.fs.ls("s3://bucket").map(_.path).filter(_.matches(name))

在视图中:

url(r"^open-tracking/(?P<user>[0-9]+)/$", PixelView.as_view(), name="pixel_view")

在电子邮件中:

import os.path
class PixelView(View):

    def get(self, request, *args, **kwargs):
        script_dir = os.path.dirname(os.path.abspath(__file__))
        image_data = open(os.path.join(script_dir, 'static/img/open-tracking/pixel.png'), 'rb').read()
        user_id = kwargs.get('user')

        ###Record somewhere that user_id has viewed the email

        return HttpResponse(image_data, content_type="image/png")

在加载电子邮件时,它将使用用户ID调用PixelView视图。 PixelView获取用户ID(您可以使用该ID登录用户已阅读电子邮件的某个地方),然后返回像素图像以显示在电子邮件上。

没什么要注意的,1)像素/图像应该是1x1透明图像。 2)如果电子邮件客户端卸载了图像,则此方法不起作用。 3)电子邮件客户端有时会在实际打开电子邮件之前加载图像内容