大家好,我尝试用PHP跟踪打开的邮件,但是Google的新图像代理现在不允许通过邮件执行php脚本(如果有人有工作脚本,请指点我在那里,我尝试了这个{{ 3}})。所以我在这篇文章
中在Django中尝试但是它似乎正在工作,但是我不知道如何实现它。他略过了一部分。真是令人困惑。 现在我有
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' 对象不可调用
请帮助解决这个问题。
答案 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)电子邮件客户端有时会在实际打开电子邮件之前加载图像内容