Wdrażanie sygnałów dla rozwiązań lokalnych: integracja PowerMTA

Ptak

30 sie 2019

Email

1 min read

Wdrażanie sygnałów dla rozwiązań lokalnych: integracja PowerMTA

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 ... successfully i 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) lub pmta.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-space automatycznie 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 PowerMTA X-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.

# # SparkPost Signals #
<signals>
api-key ##my ingest API key here##
upload-url https://api.sparkpost.com/api/v1/ingest/events
log-verbose true
min-free-space 1G
engagement-tracking sparkpost   # this turns on the open and click tracking in PowerMTA
customer-id 123                 # Your SparkPost account number here
</signals>

enable-signals true

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:

2019-07-26 11:50:57 Signals: Discovered sp1-0000000000003FBD.json
2019-07-26 11:50:57 Signals: Transferred sp1-0000000000003FBD.json successfully.
2019-07-26 11:50:57 Signals: Discovered 1 file, transferred 1 file successfully

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 .

track.mycompany.com CNAME pmta.spgo.io      # if you have a SparkPost US account
track.mycompany.com CNAME pmta.eu.spgo.io   # if you have a SparkPost EU account

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ł”).

Show original option highlighted


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.

HTML code highlighted


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

Możesz wybrać, które Sygnały mają być aktywne:

  • Globalnie (tego użyliśmy w powyższym przykładzie)

  • For some Virtual MTAs and not others

  • For some Virtual MTA pools and not others

  • Dla konkretnych adresów "Sender" lub "From" przekazywanych przez PowerMTA, w połączeniu z wyborem Virtual MTA / Virtual MTA pool

Ta konfiguracja jest bardzo potężna i jest zilustrowana za pomocą serii przykładów użycia (v5.0) w Przewodniku użytkownika.

Możesz wybrać, które Sygnały mają być aktywne:

  • Globalnie (tego użyliśmy w powyższym przykładzie)

  • For some Virtual MTAs and not others

  • For some Virtual MTA pools and not others

  • Dla konkretnych adresów "Sender" lub "From" przekazywanych przez PowerMTA, w połączeniu z wyborem Virtual MTA / Virtual MTA pool

Ta konfiguracja jest bardzo potężna i jest zilustrowana za pomocą serii przykładów użycia (v5.0) w Przewodniku użytkownika.

Możesz wybrać, które Sygnały mają być aktywne:

  • Globalnie (tego użyliśmy w powyższym przykładzie)

  • For some Virtual MTAs and not others

  • For some Virtual MTA pools and not others

  • Dla konkretnych adresów "Sender" lub "From" przekazywanych przez PowerMTA, w połączeniu z wyborem Virtual MTA / Virtual MTA pool

Ta konfiguracja jest bardzo potężna i jest zilustrowana za pomocą serii przykładów użycia (v5.0) w Przewodniku użytkownika.

Testowanie, czy Twoje wydarzenia docierają do Signals

Oto widok SparkPost Signals, połączony z PowerMTA. Możesz zauważyć, że wynik zdrowia się zmienia.

Health score dashboard


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.

Signals integration screen

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

(domain portion of “rcpt” field in Accounting file).Recipient Domain
The domain portion of the “Sender” or “From” header in the message relayed by PowerMTA.
  
(domain portion of “orig” in Accounting file).Sending Domain
VirtualMTA (name)—VirtualMTA Pool (name)
  
(“vmtaPool” in accounting file)IP Pool (name)
smtp-source-host a.b.c.d
  
(“dlvSourceIp” in accounting file)Sending IP a.b.c.d
Job (name)
  
(“jobId” in accounting file)Campaign ID (name)—Template (name)
“Subaccount” is not a native PowerMTA concept

Jednak PowerMTA może oznaczyć virtualMTAs, pule virtual MTA lub domeny Sender-or-From z ID subkonta dla celów raportowania SparkPost.

Subaccount ID (number)
FBL (event)
Spam Complaint (event)
Remote Bounce (event)
Out-of-Band bounce (event)

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.

# IP address(es) and port(s) on which to listen for incoming SMTP connections
smtp-listener 0.0.0.0:587
smtp-listener 0.0.0.0:25

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.

# One source rule for all injection, internal or external. Enforce auth, except for bounces and FBLs #
<source 0/0>
log-connections false
log-commands false    # WARNING: verbose! just for dev
log-data false        # WARNING: even more verbose!
smtp-service true     # allow SMTP service
smtp-max-auth-failure-rate 1/min
allow-unencrypted-plain-auth false
allow-starttls true
rewrite-list mfrom
</source>

<source {auth}>
always-allow-relaying yes   # only if the auth succeeds
default-virtual-mta default
process-x-job true
</source>

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:).

# # Rewrite the MAIL FROM address to match the bounce domain #
<rewrite-list mfrom>
mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net
</rewrite-list>

Potem ustawiamy naszą konfigurację TLS oraz nazwę użytkownika / hasło SMTP, zgodnie z obecnymi zaleceniami.

# # Secure the inbound service with username, password and TLS. SMT 2020-06-15 #
smtp-server-tls-certificate /etc/pmta/pmtasignalsdemo.pem
smtp-server-tls-allow-tlsv1 false
smtp-server-tls-allow-tlsv1.1 false
smtp-server-tls-allow-tlsv1.2 true
smtp-server-tls-allow-tlsv1.3 true

# # SMTP users (authenticated via SMTP AUTH) #
<smtp-user SMTP_Injection>
password ##PUT YOUR PASSWORD HERE##
authentication-method password
</smtp-user>

Możemy sprawdzić, że (niezabezpieczone, przestarzałe) TLS v1.0 nie jest akceptowane za pomocą mojego ulubionego narzędzia testowego SMTP, swaks.

swaks --server pmta.signalsdemo.trymsys.net --port 587 \
  --to test@trymsys.net \
  --from any@sparkpost.com \
  --tls \
  --tls-protocol tlsv1

Widzimy:

*** TLS startup failed (connect(): error:00000000:lib(0):func(0):reason(0))
*** STARTTLS attempted but failed

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

# # DKIM #
domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem

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.

# # Enable Bounce and FBL processing on specific domains #
relay-domain pmta.signalsdemo.trymsys.net
relay-domain bounces.pmta.signalsdemo.trymsys.net
relay-domain fbl.pmta.signalsdemo.trymsys.net

<bounce-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain pmta.signalsdemo.trymsys.net
domain bounces.pmta.signalsdemo.trymsys.net
</address-list>
</bounce-processor>

<feedback-loop-processor>
deliver-unmatched-email no
deliver-matched-email no
<address-list>
domain fbl.pmta.signalsdemo.trymsys.net
</address-list>
</feedback-loop-processor>

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.

swaks --server pmta.signalsdemo.trymsys.net \
  --port 25 \
  --to test@strange.pmta.signalsdemo.trymsys.net \
  --from any@sparkpost.com

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.

# # Route all outgoing traffic through this virtual mta / pool. #
# Declare the delivery IP address here, so that SparkPost signals ingest injection (aka "reception") events
# will carry the correct sending_IP attribute #
<virtual-mta mta1>
    smtp-source-host 172.31.25.101 pmta.signalsdemo.trymsys.net
</virtual-mta>

<virtual-mta-pool default>
    virtual-mta mta1
    <domain *>
        max-smtp-out    20      # max. connections *per domain*
        bounce-after    4d12h   # 4 days, 12 hours
        retry-after     10m     # 10 minutes
        dkim-sign       yes
    </domain>
</virtual-mta-pool>

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

Health score dashboard


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

Summary report dashboard


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:

Summary report with the group by filter set to "Sending IP"

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 “_”

import re

def pmtaSafeJobID(s):
    """
    :param s: str
    :return: str
    Map an arbitrary campaign ID string into allowed chars for PMTA X-Job header.
    See https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid
    Specifically disallow <sp> " ` but allow through most other chars.
    """
    # Note have to escape ' - [ ] and double-escape \ - see https://docs.python.org/3/library/re.html
    disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@$begin:math:display$\\\\\\\\$end:math:display$^_{|}~]'
    return re.sub(disallowedChars, '_', s)

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

!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~_________________________________________________________

Możesz zobaczyć, że <SPACE>, cudzysłowy podwójne “, i apostrof `, jak również wszystkie znaki poza ~ są mapowane na podkreślenie.

Inne wiadomości

Czytaj więcej z tej kategorii

A person is standing at a desk while typing on a laptop.

Kompletna, AI-native platforma, która skaluje się wraz z Twoim business.

A person is standing at a desk while typing on a laptop.

Kompletna, AI-native platforma, która skaluje się wraz z Twoim business.