[{"data":1,"prerenderedAt":452},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fguides\u002Fcatch-all\u002F":72,"\u002Fdocs\u002Fguides\u002Fcatch-all\u002F-surround":447},[4,8,22,26,43],{"title":5,"path":6,"stem":7},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started",{"title":9,"path":10,"stem":11,"children":12,"page":21},"Setup","\u002Fdocs\u002Fsetup","1.docs\u002F2.setup",[13,17],{"title":14,"path":15,"stem":16},"Domain","\u002Fdocs\u002Fsetup\u002Fdomain","1.docs\u002F2.setup\u002F2.domain",{"title":18,"path":19,"stem":20},"Email","\u002Fdocs\u002Fsetup\u002Faccount","1.docs\u002F2.setup\u002F3.account",false,{"title":23,"path":24,"stem":25},"Email Testing API","\u002Fdocs\u002Fapi","1.docs\u002F3.api",{"title":27,"path":28,"stem":29,"children":30,"page":21},"Features","\u002Fdocs\u002Ffeatures","1.docs\u002F4.features",[31,35,39],{"title":32,"path":33,"stem":34},"Account","\u002Fdocs\u002Ffeatures\u002Faccount","1.docs\u002F4.features\u002F1.account",{"title":36,"path":37,"stem":38},"Mailbox","\u002Fdocs\u002Ffeatures\u002Fmailbox","1.docs\u002F4.features\u002F2.mailbox",{"title":40,"path":41,"stem":42},"Messages","\u002Fdocs\u002Ffeatures\u002Fmessage","1.docs\u002F4.features\u002F3.message",{"title":44,"path":45,"stem":46,"children":47,"page":21},"Guides","\u002Fdocs\u002Fguides","1.docs\u002F5.guides",[48,52,56,60,64,68],{"title":49,"path":50,"stem":51},"CI","\u002Fdocs\u002Fguides\u002Fci","1.docs\u002F5.guides\u002F1.ci",{"title":53,"path":54,"stem":55},"Catch-All","\u002Fdocs\u002Fguides\u002Fcatch-all","1.docs\u002F5.guides\u002F2.catch-all",{"title":57,"path":58,"stem":59},"SPF, DKIM, DMARC","\u002Fdocs\u002Fguides\u002Fspf-dkim-dmarc","1.docs\u002F5.guides\u002F3.spf-dkim-dmarc",{"title":61,"path":62,"stem":63},"E2E Flows","\u002Fdocs\u002Fguides\u002Fe2e","1.docs\u002F5.guides\u002F4.e2e",{"title":65,"path":66,"stem":67},"Email Clients","\u002Fdocs\u002Fguides\u002Femail-clients","1.docs\u002F5.guides\u002F5.email-clients",{"title":69,"path":70,"stem":71},"AI Agents","\u002Fdocs\u002Fguides\u002Fagents","1.docs\u002F5.guides\u002F6.agents",{"id":73,"title":74,"body":75,"description":441,"extension":442,"meta":443,"navigation":444,"path":54,"seo":445,"stem":55,"__hash__":446},"docs\u002F1.docs\u002F5.guides\u002F2.catch-all.md","Catch-All Inboxes for QA",{"type":76,"value":77,"toc":437},"minimark",[78,93,104,109,112,170,190,194,197,286,292,413,423,433],[79,80,81,82,87,88,92],"p",{},"Signup flows need a new email address every run. Instead of creating an account per test user, ",[83,84,86],"a",{"href":85},"\u002Fdocs\u002Ffeatures\u002Faccount#catch-all-addresses","create one catch-all account",": username ",[89,90,91],"code",{},"*",", your domain, one password.",[79,94,95,96,99,100,103],{},"Now any address on the domain is deliverable. Exact matches still win - mail for ",[89,97,98],{},"support@qa.example.com"," goes to the ",[89,101,102],{},"support"," account if it exists, everything else lands in the catch-all.",[105,106,108],"h2",{"id":107},"generating-addresses","Generating Addresses",[79,110,111],{},"Derive the local part from the test, so every run is isolated and traceable:",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const address = `qa-${crypto.randomUUID()}@qa.example.com`\n","js","",[89,120,121],{"__ignoreMap":118},[122,123,126,130,134,138,141,145,148,151,154,158,161,164,167],"span",{"class":124,"line":125},"line",1,[122,127,129],{"class":128},"spNyl","const",[122,131,133],{"class":132},"sTEyZ"," address ",[122,135,137],{"class":136},"sMK4o","=",[122,139,140],{"class":136}," `",[122,142,144],{"class":143},"sfazB","qa-",[122,146,147],{"class":136},"${",[122,149,150],{"class":132},"crypto",[122,152,153],{"class":136},".",[122,155,157],{"class":156},"s2Zo4","randomUUID",[122,159,160],{"class":132},"()",[122,162,163],{"class":136},"}",[122,165,166],{"class":143},"@qa.example.com",[122,168,169],{"class":136},"`\n",[79,171,172,173,177,178,181,182,185,186,189],{},"Or keep one real account and use ",[83,174,176],{"href":175},"\u002Fdocs\u002Ffeatures\u002Faccount#plus-sign-aliasing","plus aliases"," - ",[89,179,180],{},"qa+run42@qa.example.com"," delivers to ",[89,183,184],{},"qa@qa.example.com",", and the full alias stays in the ",[89,187,188],{},"To"," header.",[105,191,193],{"id":192},"finding-the-message","Finding the Message",[79,195,196],{},"Everything arrives in the catch-all's INBOX, so filter by recipient. Get the account and mailbox ids once:",[113,198,202],{"className":199,"code":200,"language":201,"meta":118,"style":118},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -G \"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\" \\\n  --data-urlencode \"address=*@qa.example.com\" \\\n  -H \"X-API-KEY: smtplabs_your_api_key_here\"\n\ncurl \"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{accountId}\u002Fmailboxes\" \\\n  -H \"X-API-KEY: smtplabs_your_api_key_here\"\n","bash",[89,203,204,225,240,254,261,275],{"__ignoreMap":118},[122,205,206,210,213,216,219,222],{"class":124,"line":125},[122,207,209],{"class":208},"sBMFI","curl",[122,211,212],{"class":143}," -G",[122,214,215],{"class":136}," \"",[122,217,218],{"class":143},"https:\u002F\u002Fapi.smtp.dev\u002Faccounts",[122,220,221],{"class":136},"\"",[122,223,224],{"class":132}," \\\n",[122,226,228,231,233,236,238],{"class":124,"line":227},2,[122,229,230],{"class":143},"  --data-urlencode",[122,232,215],{"class":136},[122,234,235],{"class":143},"address=*@qa.example.com",[122,237,221],{"class":136},[122,239,224],{"class":132},[122,241,243,246,248,251],{"class":124,"line":242},3,[122,244,245],{"class":143},"  -H",[122,247,215],{"class":136},[122,249,250],{"class":143},"X-API-KEY: smtplabs_your_api_key_here",[122,252,253],{"class":136},"\"\n",[122,255,257],{"class":124,"line":256},4,[122,258,260],{"emptyLinePlaceholder":259},true,"\n",[122,262,264,266,268,271,273],{"class":124,"line":263},5,[122,265,209],{"class":208},[122,267,215],{"class":136},[122,269,270],{"class":143},"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{accountId}\u002Fmailboxes",[122,272,221],{"class":136},[122,274,224],{"class":132},[122,276,278,280,282,284],{"class":124,"line":277},6,[122,279,245],{"class":143},[122,281,215],{"class":136},[122,283,250],{"class":143},[122,285,253],{"class":136},[79,287,288,289,291],{},"Then match on the ",[89,290,188],{}," header:",[113,293,295],{"className":115,"code":294,"language":117,"meta":118,"style":118},"const { member } = await api(`\u002Faccounts\u002F${accountId}\u002Fmailboxes\u002F${inboxId}\u002Fmessages`)\nconst message = member.find(m => m.to.some(t => t.address === address))\n",[89,296,297,353],{"__ignoreMap":118},[122,298,299,301,304,307,309,312,316,319,322,325,328,330,333,335,338,340,343,345,348,350],{"class":124,"line":125},[122,300,129],{"class":128},[122,302,303],{"class":136}," {",[122,305,306],{"class":132}," member ",[122,308,163],{"class":136},[122,310,311],{"class":136}," =",[122,313,315],{"class":314},"s7zQu"," await",[122,317,318],{"class":156}," api",[122,320,321],{"class":132},"(",[122,323,324],{"class":136},"`",[122,326,327],{"class":143},"\u002Faccounts\u002F",[122,329,147],{"class":136},[122,331,332],{"class":132},"accountId",[122,334,163],{"class":136},[122,336,337],{"class":143},"\u002Fmailboxes\u002F",[122,339,147],{"class":136},[122,341,342],{"class":132},"inboxId",[122,344,163],{"class":136},[122,346,347],{"class":143},"\u002Fmessages",[122,349,324],{"class":136},[122,351,352],{"class":132},")\n",[122,354,355,357,360,362,365,367,370,372,376,379,382,384,387,389,392,394,397,399,402,404,407,410],{"class":124,"line":227},[122,356,129],{"class":128},[122,358,359],{"class":132}," message ",[122,361,137],{"class":136},[122,363,364],{"class":132}," member",[122,366,153],{"class":136},[122,368,369],{"class":156},"find",[122,371,321],{"class":132},[122,373,375],{"class":374},"sHdIc","m",[122,377,378],{"class":128}," =>",[122,380,381],{"class":132}," m",[122,383,153],{"class":136},[122,385,386],{"class":132},"to",[122,388,153],{"class":136},[122,390,391],{"class":156},"some",[122,393,321],{"class":132},[122,395,396],{"class":374},"t",[122,398,378],{"class":128},[122,400,401],{"class":132}," t",[122,403,153],{"class":136},[122,405,406],{"class":132},"address ",[122,408,409],{"class":136},"===",[122,411,412],{"class":132}," address))\n",[79,414,415,416,419,420,153],{},"The polling helper from the ",[83,417,418],{"href":50},"CI guide"," works here too - pass a different ",[89,421,422],{},"match",[424,425,426],"note",{},[79,427,428,432],{},[83,429,431],{"href":430},"\u002Fdocs\u002Fapi#list-messages","List Messages"," returns 30 messages per page, newest first. A busy catch-all fills pages fast - match on something unique and poll right after the action that triggers the email.",[434,435,436],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":118,"searchDepth":227,"depth":227,"links":438},[439,440],{"id":107,"depth":227,"text":108},{"id":192,"depth":227,"text":193},"A * account catches mail for every address on your domain that has no account of its own. A fresh address per test, no setup per address.","md",{},{"title":53},{"title":74,"description":441},"Okhf6vkHAYLtvMMBVXvOskl5amwtO3j35HaYiZKtJ64",[448,450],{"title":49,"path":50,"stem":51,"description":449,"children":-1},"Send from your test suite through send.smtp.dev, poll the REST API for the message, and assert on subject and body. Works on any CI.",{"title":57,"path":58,"stem":59,"description":451,"children":-1},"Send from staging to a sandbox address and read the SPF, DKIM, and DMARC results on the received message before you change production DNS.",1784164786226]