Bir posta sağlayıcısı QA için neden yanlış bir şekildir
Bir test paketine e-posta adresi vermenin her yolu denenmiştir ve her biri farklı bir yerden sızdırır:
| Yaklaşım | Bedeli | Nerede bozulur |
|---|---|---|
Tek bir paylaşılan gelen kutusu (qa@company.com) | Kurulacak hiçbir şey yok. | Her test, diğer her testin postasını okur. Yeni bir çalıştırmanın ilk yoklaması, önceki çalıştırmanın kodunu bulur. Paralel çalıştırmalar imkansızdır. |
Artı işaretli adresleme (qa+run42@company.com) | Sağlayıcı destekliyorsa, kurulacak hiçbir şey yok. | Yine de tek bir posta kutusudur: tek bir kota, tüm ekip tarafından paylaşılan tek bir IMAP girişi ve etiketi kaldıran ya da +'yı reddeden bir kayıt formu. |
| Sağlayıcıdan test uzmanı başına bir posta kutusu | Her biri için bir koltuk ve bir tane oluşturmak için bir talep. | Kimse test çalıştırması başına bir posta kutusu sağlamaz. Test uzmanları kendilerinkini yeniden kullanır ve paylaşılan gelen kutusu sorunu bir seferde bir kişi olarak geri döner. |
| Buraya yönlendirilmiş bir catch-all alan adı | Bir kez, tek bir DNS kaydı. | Posta kutusu, adresi bilen herkese açıktır ve posta 5 gün yaşar. İkisi de on bir saniye önemli olan bir kod için sorun değildir; ikisi de gerçek müşteri postası için sorun teşkil eder. |
Dördüncü satır bu rehberdir. Bu, genel tek kullanımlık alan adlarının çalıştığı aynı mekanizmadır — bir posta kutusu listesi yerine bir alan adı üzerindeki her adresi kabul eden bir sunucu — sizden başka kimsenin kullanmadığı bir isme uygulanmış.
Tek DNS kaydı
DNS sağlayıcınızda, sahibi olduğunuz bir alan adının kökünde tek bir MX kaydı ekleyin. Burada başka bir kayıt yok, bir şeyi kanıtlayacak bir TXT yok, bu sitede bir hesap yok:
Alan adı için MX kaydı10 smtp.grabmail.io
- MX'i yayımlayın. Öncelik 10,
smtp.grabmail.io'i gösteriyor. Alan adındaki başka her MX'i silin — posta yalnızca tek bir yere teslim edilebilir ve geride kalan bir kayıt bir kısmını başka bir yere gönderir. - DNS'i bekleyin. Genellikle dakikalar sürer; bazen daha önce orada olan kaydın TTL'si kadar.
dig MX qa-example.com, ne zaman geçerli olduğunu gösterir. - Üzerindeki herhangi bir adrese bir mesaj gönderin. Alan adını bağlayan şey ilk teslimattır: sunucu o anda MX'e bakar, kendini görür ve kabul eder. O andan itibaren alan adı üzerindeki her adres bir posta kutusudur.
Posta kutusunu kimin yaptığını söyleyen bir adlandırma şeması
Her adres geçerliyken, yerel kısım bilgi taşımakta özgürdür — ve sabahın ikisinde, başarısız bir çalıştırma ve açık bir posta kutusuyla, bunu isteyeceksiniz. Tirelerle birleştirilmiş üç parça, şu sırayla:
| Parça | Örnek | Size kazandırdığı |
|---|---|---|
| Onu ne yaptı | signup, reset, e2e, alice | Tek bakış, posta kutusunun hangi akışa ya da hangi kişiye ait olduğunu söyler. |
| Hangi çalıştırma | 1234567890 (CI çalıştırma kimliği), bir dal adı, bir tarih | Bir pipeline çalıştırmasından gelen her posta kutusu, arayabileceğiniz bir token'ı paylaşır. |
| Rastgelelik | 3f9a1c2e | Sekiz karakteri. Bu, iki testin, iki shard'ın ya da iki yeniden denemenin bir posta kutusunu asla paylaşmamasını sağlayan kısımdır. |
| Asla: gerçek olan hiçbir şey | bir müşteri adı, gerçek bir kullanıcı kimliği, bir müşteriyi adlandıran bir talep numarası | Posta kutusu, adresi bilen herkese açıktır. Adreste bilinmeye değer hiçbir şey olmamalıdır. |
// one helper, every runner: who made it, which run, and eight random characters
export const testAddress = (who: string, run = process.env.GITHUB_RUN_ID ?? 'local') =>
`${who}-${run}-${crypto.randomUUID().slice(0, 8)}@qa-example.com`;
testAddress('signup'); // signup-1234567890-3f9a1c2e@qa-example.comHerhangi bir adresi okumak, aynı üç çağrı
Kendi alan adınız için API hakkında hiçbir şey değişmez. Aynı listeleme çağrısı, aynı mesaj çağrısı, aynı silme — genel katmanda anahtar yok, ve adresteki alan adı farklılaşan tek şeydir:
$ curl -sG https://grabmail.io/api/v1/mailbox --data-urlencode "address=signup-1234567890-3f9a1c2e@qa-example.com"Bu da bu sitedeki her yardımcının, tek bir sabit düzenlendikten sonra değişmeden çalıştığı anlamına gelir: Playwright fixture'ı, Cypress task'ı, Python ve Node modülleri. Genel alan adlarının sizi düşündürmediği, bilinmeye değer üç şey vardır:
- Bir
404, MX'in henüz orada olmadığı anlamına gelir - Listeleme, burada barındırılmayan bir alan adı için
404yanıtı verir. Kendi alan adınızda bu, bir API sorunu değil, bir DNS sorunudur — kayıt henüz yayılmamıştır ya da başka bir yeri gösteriyordur. Öncedig MX. - Takma ad kendi alan adınızda da çalışır
- Herhangi bir alan adındaki her posta kutusunun, ona teslimat yapan ama onu okuyamayan, ayrı bir alan adında ikinci bir adresi vardır. Gelen kutusunu açamamasını tercih ettiğinizde bunu bir siteye verin; kendi adresinizi yoklayın.
- Yoğun bir adres sayfalanır
- Geri dönen postaları ya da bir günlük bildirimi toplayan bir catch-all adresi, 200'lük birden fazla sayfayı tutabilir.
next'inullolana kadarbeforeolarak geri geçirin.
Bir test alan adını kullanılabilir tutmak
Kendi alan adınız hiçbir tek kullanımlık posta kara listesinde değildir; birini kullanmanın en baştaki nedeni de genellikle budur: test edilen uygulama, tam olarak olması gerektiği gibi, grabmail.io'i ve diğer her genel alan adını reddeder. Dört alışkanlık bunu böyle tutar:
- Özel bir alan adı kullanın —
qa-example.com, production'ın bir alt alan adı değil ve müşterilerin yazdığı alan adı değil. Hizmet yalnızca kaydedilebilir alan adlarını kabul eder (example.com, aslamail.example.comdeğil) ve bir test alan adının başka bir işi olmamalıdır. - Onu yayımlamayın. Listeler, genel geçici e-posta sitelerinde ve paylaşılan adres dökümlerinde görünenlerden oluşturulur. Yalnızca kendi test paketinizde görünen bir alan adının bunlara girmesinin bir yolu yoktur.
- SPF ve DMARC ile kilitleyin. SPF'si olmayan yalnızca alıcı bir alan adı, herkesin adına posta sahteciliği yapabileceği bir alan adıdır; iki kayıt bunu kapatır ve hiçbir bedeli yoktur.
- Ona gerçek posta yönlendirmeyin. Bir staging sisteminin müşteri bildirimlerini bir catch-all adresine gönderdiği anda, genel bir posta kutusu müşteri verisi tutar. Test alan adları, test postası taşır.
Uygulama tüm catch-all alan adlarını reddediyorsa — bazı dolandırıcılık kontrolleri, alan adı üzerinde rastgele bir adresin kabul edilip edilmediğini yoklayarak bunu yapar — fiyatlandırma sayfasında anlatılan, listelerin dışında tutulan, sıradan görünümlü .com alan adlarından oluşan ücretli bir havuz vardır. Kayıt formları neden tek kullanımlık e-postayı engeller rehberi, her tür kontrolün ne gördüğünü anlatır.
Bir ekip için: bir alan adı, birçok test uzmanı, birçok pipeline
Tek bir catch-all alan adı herkese hizmet eder, çünkü farklı olması gereken tek şey yerel kısımdır ve bu ücretsizdir. Bir ekibin ihtiyaç duyduğu şey, yukarıdaki adlandırma üzerinde anlaşma ve üç küçük kuraldır:
- Pipeline başına ve kişi başına bir önek
e2e-,nightly-,alice-. Bir job günlüğünde öneki aramak, onun yaptığı her posta kutusunu bulur; bir meslektaşınızınkini aramak, onların baktığı hatayı bulur.- Asla hiçbir şey paylaşılmaz
- Alan adında bir "ekip gelen kutusu" yoktur ve sabit bir adres dağıtan bir fixture yoktur. İki kişinin aynı posta kutusuna ihtiyacı varsa, biri diğerine adresi gönderir.
- Hız sınırları istemci başınadır
- Adres başına saniyede bir okuma, istemci başına dakikada 1200 istek — bir CI runner'ı bir istemcidir, bir dizüstü bilgisayar başka bir istemcidir. Aynı anda paket çalıştıran on kişilik bir ekip, bir değil on istemcidir.
Geçerli olan sınırlar
Kendi alan adınız, genel olanlarla aynı hizmeti, aynı üst sınırlarla alır. Hiçbiri ayarlanabilir değildir ve hiçbiri bir test paketi için sorun değildir:
| Sınır | Değer | QA için anlamı |
|---|---|---|
| Saklama süresi | Mesaj başına 5 gün | Her çalıştırma kendi postasını oluşturur; hiçbir şey önceki bir haftadan hiçbir zaman alınmaz. Tam kurallar. |
| Ekler | Mesaj başına 5 MB | Bir fatura PDF'i ya da bir CSV dışa aktarımı için yeterli; daha büyük bir mesaj SMTP anında reddedilir, bu yüzden gönderene bildirilir. |
| Okumalar | Adres başına saniyede 1, istemci başına dakikada 1200 | Tek bir runner'dan, saniyede bir kez yoklanan yirmi posta kutusu. Ötesinde, Retry-After ile 429. |
| Gizlilik | Yok — bir adresi bilen herkes onu okuyabilir | Rastgele yerel kısımlar, yayımlanmamış bir alan adı ve gerçek müşteri postası yok. |
| Gönderim | Yok | Alan adı yalnızca alır. Uygulamanız, production'daki gibi kendi sağlayıcısı üzerinden gönderir. |
Bitti demeden önce
- Tek bir MX kaydı olan özel, kaydedilebilir bir alan adı:
10 smtp.grabmail.io, ve başka MX yok. - Üzerindeki herhangi bir adrese gönderilen ve API üzerinden geri okunan bir mesaj.
- Kimsenin alan adı olarak gönderim yapamaması için yayımlanmış SPF ve DMARC.
- Her paket tarafından kullanılan bir adlandırma yardımcısı — kim, hangi çalıştırma, sekiz rastgele karakter.
- Kodda, ekran görüntülerinde ya da taleplerde asla değil, ortam yapılandırmasında tutulan alan adı.
- Gerçek müşteri postası gönderen hiçbir şeyin ona yönlendirilmemesi.
Buradan sonra paketler zaten yazılmış olanlardır: fixture'ında alan adı olan Playwright, test çalıştırıcısından bağımsız disiplin ve bir değişkende alan adı olan GitHub Actions workflow'u.
Sorular
test.company.com gibi bir alt alan adı kullanabilir miyim?
Hayır — hizmet yalnızca kaydedilebilir alan adlarını kabul eder (company.com, ya da company.co.uk), çünkü bir alan adını kim kontrol ederse altındaki her ismi de kontrol eder ve iki taraf tek bir ad alanının çakışan yarılarını elinde bulunduramamalıdır. Test için ucuz, özel bir alan adı kaydedin; zaten daha iyi uygulama budur.
MX kaydının çalışması ne kadar sürer?
DNS onu sunar sunmaz, ki bu genellikle dakikalar sürer. Önceki bir MX varsa, onun TTL'si geçerlidir. Alan adı, bundan sonra ulaşan ilk mesajla bağlanır — başka hiçbir şeyin olması gerekmez ve dig MX size kaydın ne zaman canlı olduğunu söyler.
Herhangi bir bedeli var mı?
Hayır. Bir alan adını bağlamak, üzerindeki her adres ve API, hesap olmadan ücretsizdir. Bu sitedeki tek ücretli şey, kendi alan adını kullanamayanlar için tek kullanımlık posta kara listelerinin dışında tutulan bir alan adı havuzudur.
Alan adımdaki postayı başka biri okuyabilir mi?
Tam olarak genel alan adlarında olduğu gibi, bir adresi bilen herkes okuyabilir. Kendi alan adınızın değiştirdiği şey tahmin edilebilirliktir: adresleri, başka kimsenin kullanmadığı bir isim üzerindedir. Rastgele yerel kısımlar ve yayımlanmamış bir alan adı, tahmin etmeyi pratik olmaktan çıkarır; posta kutusunu özel yapmazlar ve burada hiçbir şey yapmaz.
Alan adını bağlamadan önce ona gönderilen postaya ne olur?
MX buraya işaret etmeden hiçbir şey buraya ulaşmaz. Eski kayıt canlıyken gönderilen posta, eski sunucuya gitti ya da geri döndü; DNS değiştikten sonra gönderilen posta ulaşır ve alan adını bağlar.
Alan adının bağlantısını nasıl keserim?
MX kaydını kaldırın. Yeni posta anında ulaşmayı durdurur; posta kutularında zaten olan her şeyin süresi kendiliğinden 5 gün içinde dolar. Bundan sonra alan adına dair hiçbir şey saklanmaz.
Uygulama test alan adımı da reddediyor. Şimdi ne olacak?
Bazı dolandırıcılık kontrolleri, bir listeyi kontrol etmek yerine, rastgele bir adresi kabul eden herhangi bir alan adını — bir catch-all yoklaması — reddeder. Bunlar için, sıradan bir posta kutusu sağlayıcısı gibi davranan bir alan adı gerekir, ki ücretli havuzun sağladığı da budur; kayıt formları neden tek kullanımlık e-postayı engeller rehberi, hangi kontrolle karşı karşıya olduğunuzu anlatır.


