Wdrażanie sygnałów dla rozwiązań lokalnych: integracja PowerMTA
Ptak
30 sie 2019
1 min read

Kluczowe Wnioski
Cel: Ten przewodnik wyjaśnia, jak zintegrować PowerMTA 5.0+ z SparkPost Signals, aby przesyłać dane dotyczące wydarzeń i zaangażowania (odbicia, otwarcia, kliknięcia, skargi na spam) z on-premises MTA bezpośrednio do warstwy analitycznej SparkPost.
Podstawowa konfiguracja:
Dodaj enable-signals true i zdefiniuj swoje SparkPost ingest endpoint (https://api.sparkpost.com/api/v1/ingest/events lub jego odpowiednik w UE).
Użyj prawidłowego API key z uprawnieniem „Incoming Events: Write”.
Określ customer-id, a opcjonalnie ustaw custom tracking domains dla lepszej dostarczalności.
Ustawienia śledzenia: PowerMTA’s Engagement Tracking automatycznie dodaje piksele otwarć i kliknięć do wiadomości e-mail HTML. Możesz wyłączyć śledzenie dla danego linku za pomocą atrybutu data-msys-clicktrack="0".
Wybiorcze raportowanie: Signals mogą być włączane globalnie lub ograniczone do konkretnych VirtualMTAs, pools lub domen nadawcy, co pozwala na precyzyjną kontrolę danych.
Testowanie i weryfikacja: Użyj panelu integracji Signals oraz dzienników PowerMTA, aby potwierdzić przyjęcie wydarzeń i śledzić Health Scores, odbicia i wskaźniki zaangażowania w czasie rzeczywistym.
Dostrajanie dostarczalności:
Używaj znaczących nazw VirtualMTA i Job — te bezpośrednio mapują na IP Pools i Campaign IDs w raportach SparkPost.
Skonfiguruj DKIM signing, TLS enforcement i właściwe relay rules, aby zapobiec nieautoryzowanym wstrzyknięciom.
Zaawansowana konfiguracja: Artykuł zawiera również gotowe fragmenty dla FBL & out-of-band bounce handling, authenticated SMTP injection (port 587) i Python code do sanitacji nagłówków X-Job dla kompatybilności.
Q&A Highlights
Co dokładnie robi integracja Signals?
Automatycznie przesyła zdarzenia wiadomości PowerMTA (wstrzyknięcie, dostarczenie, odbicie, zaangażowanie) do Twojego konta SparkPost, dzięki czemu masz dostęp do pulpitów takich jak Health Score, Delay reports i Spam Trap Monitoring.
Dlaczego integrować Signals z lokalnym MTA?
Wiele przedsiębiorstw prowadzi samoobsługowe infrastruktury pocztowe ze względów zgodności, ale nadal chce korzystać z możliwości analitycznych i monitorujących SparkPost. Signals wypełnia tę lukę bez konieczności migracji dostarczania poczty do chmury.
Jak mogę zweryfikować, że wydarzenia są przesyłane do SparkPost?
Sprawdź logi PowerMTA dla
Signals: Transferred ... successfullyi potwierdź wpisy zdarzeń pod Signals → Events Search w SparkPost.Czy mogę używać własnej domeny śledzącej?
Tak — skonfiguruj CNAME, taki jak
track.mycompany.com → pmta.spgo.io(US) lubpmta.eu.spgo.io(EU), a następnie zarejestruj i zweryfikuj go w SparkPost dla spójności marki i reputacji.Co z ochroną prywatności danych lub użyciem dysku?
Dyrektywa
min-free-spaceautomatycznie usuwa stare pliki zdarzeń JSON, gdy kończy się miejsce na dysku, zapobiegając lokalnemu gromadzeniu się danych telemetrycznych.Jaka jest „bonus feature” na końcu?
Python regex utilita (
pmtaSafeJobID), która zapewnia, że nazwy kampanii/zadań używają tylko znaków ważnych w formacie nagłówka PowerMTAX-Job, zastępując niebezpieczne znaki podkreśleniami.
Zanurzmy się w szczegóły konfigurowania PowerMTA dla sygnałów SparkPost.
Zagłębmy się w szczegóły konfiguracji PowerMTA dla SparkPost Signals. Będziesz potrzebować:
Hosta do uruchomienia najnowszej wersji PowerMTA – nowego lub istniejącej maszyny
Konta SparkPost z uprawnieniem klucza API do „Wydarzenia przychodzące: Zapis” jak opisano tutaj
Skonfigurujemy PowerMTA do przesyłania wydarzeń do Twojego konta SparkPost, a następnie będziesz mógł używać następujących:
Najpierw zainstaluj (lub zaktualizuj do) PowerMTA 5.0 r4 lub nowszej wersji, postępując zgodnie z zwykłymi instrukcjami instalacji v5.0, które są dość proste. Następnie przejdziemy przez następujące kroki:
Skonfiguruj łącznik PowerMTA do SparkPost Signals
Ustaw śledzenie zaangażowania z niestandardową domeną śledzącą
Wybierz, które strumienie ruchu PowerMTA zgłosić do Signals
Testowanie, czy wydarzenia docierają do Signals
Przeglądanie, jak używać znaczących nazw, które dobrze się prezentują w raportach.
Omówimy również inne szczegółowe aspekty konfiguracji PowerPMTA używane w naszym demo Signals:
Zdarzenia FBL (Skargi na spam) i zdalne (out-of-band) zwroty
Konfiguracja iniekcji, w tym DKIM
Konfiguracja FBL i OOB
Konfiguracja i nazewnictwo VirtualMTA (i jak to się pojawia w raportach SparkPost Signals)
Na koniec jest „dodatkowa funkcja” z kodem zapewniającym zgodność nazw kampanii z konwencjami nazewnictwa PowerMTA X-Job.
Skonfiguruj PowerMTA connector
Konfiguracja Sygnalów jest opisana w Przewodniku Użytkownika 5.0, sekcja 10.1. Tutaj zaczniemy od „Przypadku Użycia #2”, który umożliwia Sygnaly dla całego ruchu z tego hosta PowerMTA, oraz włączymy śledzenie zaangażowania SparkPost.
Oto co robi każdy atrybut:
api-key
Jest to unikalne dla Twojego konta SparkPost, to wartość, którą wcześniej uzyskałeś z SparkPost.
upload-url
To musi odpowiadać adresowi Twojej usługi API SparkPost, niezależnie od tego, czy jest to US czy EU. Więcej informacji znajdziesz tutaj. Zwykłe wartości to:
SparkPost (US): https://api.sparkpost.com/api/v1/ingest/events
SparkPost EU: https://api.eu.sparkpost.com/api/v1/ingest/events
log-verbose
Ten dyrektywa jest opcjonalna i po włączeniu daje nieco więcej informacji w pliku pmta.log, co może być przydatne podczas konfiguracji, aby potwierdzić, że wszystko działa poprawnie. Każda minuta, nawet gdy nie ma ruchu, zobaczysz:
2019-07-26 11:47:57 Signals: Znaleziono 0 plików
Podczas ruchu zobaczysz coś takiego:
min-free-space
To informuje PowerMTA o progu przestrzeni dyskowej, przy którym powinien zacząć usuwać najstarsze pliki JSON wydarzeń SparkPost, aby zrobić miejsce dla nowych plików, gdy przestrzeń dyskowa jest niska.
enable-signals
To informuje PowerMTA o wysyłaniu do Sygnalów, w tym przypadku globalnie dla całego ruchu (więcej informacji tutaj, w wersji 5.0). Możesz być bardziej selektywny, jeśli chodzi o to, które strumienie ruchu wysyłać w górę.
Możesz także oznaczyć określony ruch PowerMTA jako należący do subkonta SparkPost – to kolejny sposób na rozróżnienie jednego określonego strumienia ruchu od innych.
engagement-tracking, customer-id
Rozwiązanie Śledzenia Zaangażowania PowerMTA domyślnie korzysta z domeny śledzenia dla usługi hostowanej w USA SparkPost. Określasz swój numeryczny identyfikator klienta SparkPost; oto instrukcje, jak go znaleźć.
tracking-domain
Dla kont SparkPost EU, dodaj następującą linię:
tracking-domain pmta.eu.spgo.io # to jest punkt końcowy dla SparkPost EU
Niestandardowa Domeny Śledzenia
Jeśli wolisz używać własnej domeny śledzenia (jest to lepsze ze względu na dostarczalność), zrób następująco:
Utwórz domenę śledzenia korzystając z dostawcy DNS, tworząc rekord CNAME. Zwykle będzie to subdomena Twojej domeny najwyższego poziomu, np. track.mycompany.com .
Możesz również używać domen śledzenia HTTPS, chociaż jest to bardziej skomplikowane (patrz kroki konfiguracji SparkPost dla domen śledzenia HTTPS).
Zarejestruj domenę śledzenia w swoim koncie SparkPost i zweryfikuj ją. Poczekaj kilka minut przed wypróbowaniem, aby pozwolić na propagację zmian DNS przez Internet, w zależności od swojego dostawcy DNS.
Skonfiguruj PowerMTA, aby korzystać z tej domeny zamiast domyślnej, używając
tracking-domain yourdomain.com # Umieść tutaj swoją własną domenę
Możesz sprawdzić, czy dostarczone emaile mają dodane „piksele otwarcia” i linki opakowane, patrząc na wewnętrzne części maila (w Gmailu użyj menu w prawym górnym rogu i wybierz „Pokaż oryginał”).

Zauważysz piksele otwarcia na początku i na końcu HTML w emailu. Każdy link HTML jest również zmieniany, aby zawierał REF wskazujący na domenę śledzenia.

To wszystko, czego potrzebujesz, aby uruchomić SparkPost Signals z wbudowanym Śledzeniem Zaangażowania PowerMTA.
Zapobieganie śledzeniu określonych linków w twoim emailu html
Możesz zapobiec śledzeniu przez PowerMTA określonych linków, ustawiając niestandardowy atrybut data-msys-clicktrack na „0” :
<a href="#" data-msys-clicktrack="0">Przykład</a>
PowerMTA nie opakuje linku. Usunie także ten atrybut przed przesłaniem wiadomości do odbiorcy.
Wybierz, które strumienie ruchu PowerMTA raportować do Signals
Testowanie, czy Twoje wydarzenia docierają do Signals
Oto widok SparkPost Signals, połączony z PowerMTA. Możesz zauważyć, że wynik zdrowia się zmienia.

Nazwy Kampanii są dostępne jako elementy raportowania, wraz z Subkonto, Pula IP, Dostawca Skrzynki Pocztowej i Domeną Wysyłającą.
Oprócz przeglądania logów PowerMTA, możesz sprawdzić, czy dane o zdarzeniach docierają do SparkPost, patrząc na ekran Integracji Sygnalizacji.

Na ekranie Wyszukiwania Zdarzeń SparkPost, powinieneś zobaczyć zdarzenia pojawiające się w ciągu kilku minut. Obejmą one Zdarzenia Wstrzyknięcia i Dostawy, jak również Odbicia i potencjalnie Zdarzenia Odbicia Poza Pasmem i Skargi Na Spam, jeśli już skonfigurowałeś PowerMTA, aby je obsługiwać.
Jeśli masz włączone Śledzenie Zaangażowania, zobaczysz również otwarcie, initial_open i kliknięcie zdarzenia.
Używanie znaczących nazw, które dobrze wyglądają w raportowaniu
Ustawienie nazw puli VirtualMTA PowerMTA i nazw zadań, aby były znaczące i czytelne dla ludzi, jest warte zrobienia. Pojawiają się bezpośrednio w aspektach SparkPost Signals i raporcie podsumowującym.
Jak wspomniano wcześniej, nie musisz tworzyć tych pul w swoim koncie SparkPost. SparkPost pobiera je z konfiguracji PowerMTA.
Oto jak terminy konfiguracji PowerMTA tłumaczą się na terminy SparkPost.
Termin PowerMTATermin raportów / sygnałów SparkPostRecipient Domain
Jednak PowerMTA może oznaczyć virtualMTAs, pule virtual MTA lub domeny Sender-or-From z ID subkonta dla celów raportowania SparkPost.
Ustawienie co najmniej jednego adresu smtp-source-host umożliwia także SparkPost prawidłowe rozpoznanie adresu IP nadawcy, aby pokazać go na zdarzeniach Iniekcji i Dostawy, a także w widoku raportu podsumowującego.
Nazwy zadań są ustawiane w PowerMTA za pośrednictwem nagłówka w wstrzykniętej wiadomości. Oprócz umożliwienia indywidualnej kontroli zadania (wstrzymaj/wznów itd.), co samo w sobie jest przydatne, PowerMTA przekazuje nazwy do raportowania SparkPost Signals jako „Campaign ID”. Zobacz Przewodnik użytkownika w5.0 sekcja 12.8 „Śledzenie kampanii w PowerMTA z JobID”.
Jest kilka rzeczy, na które należy zwrócić uwagę w przypadku nadawania nazw zadaniom. Chociaż SparkPost (z formatem JSON i ucieczką JSON) pozwala na użycie znaków jak <SPACE> w nazwach kampanii, nagłówki poczty są bardziej restrykcyjne. Dozwolone znaki w nagłówku X-Job to:
A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~
Innymi słowy, niedozwolone znaki obejmują <SPACE>, cudzysłowy „ i apostrof `. Jeśli jesteś przyzwyczajony do pracy z nazwami X-Job, nie będzie to zaskoczenie, a nazwy twoich Campaign ID będą „po prostu działać” w raportach SparkPost. Jeśli, tak jak ja, najpierw nauczyłeś się SparkPost, możesz potrzebować narzędzia, aby upewnić się, że wartości X-Job są bezpieczne; zobacz dodatkową funkcję na końcu tego artykułu.
FBL zdarzenia (Spam Complaints) i zdalne (out-of-band) bounces
PowerMTA może odbierać i przetwarzać wydarzenia FBL (znane w SparkPost jako wydarzenia zgłoszenia spamu) oraz zdalne odbicia (znane w SparkPost jako odbicia poza pasmem, ponieważ odpowiedź wraca jakiś czas później, a nie podczas rozmowy SMTP).
W Port25 Support Forum znajdują się artykuły na temat konfigurowania Bounce Processor i FBL Processor. Jeśli jesteś istniejącym użytkownikiem PowerMTA, prawdopodobnie już je masz.
Oto konfiguracja, którą zrobiłem na potrzeby demonstracji, na podstawie tych artykułów i zorientowana na hosting PowerMTA w Amazon EC2.
Jeśli znasz konfigurację PowerMTA w tym obszarze, możesz pominąć tę część, aż do następnej poziomej linii.
Konfiguracja Injection
Będziemy używać portu 587 dla wstrzykiwanych wiadomości, które będą pochodzić z innego hosta przez publiczny Internet. Musimy zapobiec odkryciu i nadużywaniu tej usługi przez złe podmioty, dlatego stosujemy uwierzytelnianie nazwą użytkownika/hasłem oraz opcjonalne TLS, podobnie jak w przypadku punktów wejścia SparkPost SMTP.
Chcemy móc wysyłać wiadomości z odpowiednio uwierzytelnionych źródeł do dowolnego miejsca docelowego. Chcemy również oddzielnego nasłuchu na porcie 25 dla FBL i zewnętrznych odpowiedzi na nieudane dostarczenia, które nie wymagają uwierzytelniania.
W poniższych deklaracjach <source> używamy uwierzytelniania nazwą użytkownika/hasłem oraz opcjonalnego TLS, aby bronić się przed nieautoryzowanym wstrzykiwaniem wiadomości. Ustawiamy także ograniczenia szybkości połączeń dokonujących nieudanych prób wprowadzenia hasła.
Twoja konfiguracja może być inna; na przykład, jeśli masz prywatną sieć między wstrzykiwaczem a PowerMTA, nie będziesz potrzebować uwierzytelniania hasłem.
Deklaracja <source {auth}> (zobacz tutaj. v5.0) stosuje się po pomyślnym uwierzytelnieniu. Tutaj, pozwala na dalsze przekazywanie, ustawia domyślną grupę wirtualnych MTA do użycia i dodaje nagłówek X-Job (który będzie raportowany przez SparkPost Signals jako campaign_id).
Lista przepisania mapuje wstrzykiwane wiadomości tak, aby używać określonej domeny MAIL FROM (znanej również jako domena zwrotna lub Return-Path:).
Potem ustawiamy naszą konfigurację TLS oraz nazwę użytkownika / hasło SMTP, zgodnie z obecnymi zaleceniami.
Możemy sprawdzić, że (niezabezpieczone, przestarzałe) TLS v1.0 nie jest akceptowane za pomocą mojego ulubionego narzędzia testowego SMTP, swaks.
Widzimy:
Podobnie dla –tls-protocol tlsv1_1.
Zastosujmy również podpis DKIM w naszych wychodzących wiadomościach, ponieważ jest to dobra praktyka (skorzystałem z tych instrukcji, aby skonfigurować klucz).
Konfiguracja FBL i OOB
Teraz .. w końcu .. deklarujemy, które konkretnie domeny są otwarte na zdalne odpowiedzi bounce i FBL. Nie chcemy ich przesyłać gdziekolwiek (aby zapobiec atakom backscatter), po prostu wewnętrznie przetwarzamy te odpowiedzi.
Możesz zobaczyć, że ustawiłem dwie domeny odbijania, gdy eksperymentowałem z używaniem/nieużywaniem zasady mfrom przepisywania.
Domena FBL jest zwykle rejestrowana w zewnętrznych usługach, takich jak Microsoft SNDS; zobacz ten artykuł dla więcej informacji. Dla tego demo, FBL będą pochodzić z Bouncy Sink, więc nie ma potrzeby rejestracji.
Testowanie nasłuchiwacza SMTP
Ważne jest przetestowanie, czy nasłuchiwacz SMTP wymaga autoryzacji dla wszystkich ogólnych adresatów, odrzucając wszelkie wiadomości, które nie są skierowane konkretnie do domen FBL i remote-bounce.
Odpowiedź, jak oczekiwano, pokazuje, że przesyłanie dalej jest zabronione:
550 5.7.1 przesyłanie dalej zabronione dla odbiorcy w "RCPT TO:<test@strange.pmta.signalsdemo.trymsys.net>
(Koniec opisu konfiguracji demontażu).
Konfiguracja i nazewnictwo VirtualMTA
PowerMTA VirtualMTAs (i pule VirtualMTA) to potężne funkcje do zarządzania strumieniami wiadomości, a funkcje raportowania PowerMTA / SparkPost Signals działają najlepiej, gdy są one aktywne.
Ustawienie virtual-mta-pool jest raportowane w SparkPost jako „IP Pool” i jest dostępne jako element raportowania SparkPost Signals (menu rozwijane poniżej wykresów).

Raport Podsumowujący również pokazuje IP Pool jako element raportowania „Grupuj według”.

Jak wspomniano wcześniej w tym artykule, ustawienie przynajmniej jednego adresu smtp-source-host umożliwia SparkPost poprawne zidentyfikowanie wysyłającego adresu IP, dzięki czemu pojawia się on na zdarzeniach Injection i Delivery oraz w Raporcie Podsumowującym:

To wszystko, czego potrzeba, aby uzyskać podstawową integrację pomiędzy PowerMTA a SparkPost Signals. Znajdziesz pełny przykład pliku konfiguracyjnego tutaj.
Zanim pójdziesz, oto dodatkowa funkcja, o której wspomniałem.
Funkcja bonusowa: X-Job name checking/filtering
Aby upewnić się, że każdy ciąg znaków jest bezpieczny do użycia jako nazwa PowerMTA X-Job, oto prosta funkcja Python mapująca wszelkie niebezpieczne znaki na podkreślenie “_”
To używa Python wyrażeń regularnych w specyficzny sposób. Określa zbiór niedozwolonych znaków używając operatora “set complement” ^ zamiast wymieniać wszystkie dozwolone znaki. Oznacza to, że wychwytujemy (i zabezpieczamy) znaki poza zwykłym zestawem 7-bitowym. Możemy to pokazać używając tego fragmentu testowego:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
Da to
Możesz zobaczyć, że <SPACE>, cudzysłowy podwójne “, i apostrof `, jak również wszystkie znaki poza ~ są mapowane na podkreślenie.



