отслеживание открытой электронной почты через Django - PullRequest
0 голосов
/ 04 октября 2018

Привет всем, я пытался отследить открытые письма с помощью PHP, но новый прокси-сервер изображений Google теперь не позволяет выполнять php-скрипты по почте (может быть, у меня есть воображение, если у кого-то есть работающий скрипт, пожалуйста, укажите мне, я попробовал этот https://github.com/brampauwelyn/php-email-tracker). Так что я пытаюсь это в Django с этим постом

https://www.pythoncircle.com/post/626/how-to-track-email-opens-sent-from-django-app/

Но похоже, что это работает, но я не могу понять, какреализовать его. Он пропустил часть его. Это так запутанно. Прямо сейчас у меня есть

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)

В 4-й строке написано

tracker ['image_url'] = request.path ('image_load') TypeError: объект 'str' не может быть вызван

Пожалуйста, помогите пройти через это.

1 Ответ

0 голосов
/ 04 октября 2018

Я сделал это, используя немного другой метод, который работает.В этом примере я отслеживаю, какие пользователи открыли письмо, но вы можете использовать другой подход.В URL:

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")

В сообщении электронной почты:

<img src="{{ settings.PROJECT_DOMAIN }}/open-tracking/{{ user.id }}/">

При загрузке сообщения оно вызывает представление PixelView с пользователями.Я БЫ.PixelView получает идентификатор пользователя (который затем можно использовать для регистрации в том месте, где пользователь прочитал электронную почту), а затем возвращает пиксельное изображение для отображения в электронном письме.

Несколько замечаний, 1) пиксель /изображение должно быть прозрачным изображением 1x1.2) Это не работает, если почтовый клиент отключил загрузку изображения.3) Почтовый клиент иногда загружает содержимое изображения до фактического открытия электронного письма

...