[{"data":1,"prerenderedAt":1118},["ShallowReactive",2],{"index":3,"index-snippets":149,"pro-hero-title":1099},{"id":4,"title":5,"cta":6,"description":15,"extension":16,"features":17,"hero":57,"meta":67,"quickstart":69,"sections":78,"stem":116,"testimonials":117,"useCases":118,"__hash__":148},"index\u002F0.index.yml","Email Testing for Developers",{"title":7,"description":8,"links":9},"Start testing","Sign up, add a domain, receive your first test email.",[10],{"label":11,"icon":12,"to":13,"size":14},"Get Started","heroicons:arrow-right","\u002Fsignup","xl","Email testing for developers. SMTP in, IMAP\u002FAPI out. Inspect headers, MIME, raw source. No servers to run.","yml",{"title":18,"description":19,"items":20},"Features","",[21,25,29,33,37,41,45,49,53],{"title":22,"description":23,"icon":24},"Custom Domains","Bring your own domains and subdomains. One MX record each.","heroicons:globe-alt",{"title":26,"description":27,"icon":28},"Disposable Accounts","Create an address per test run over the API. Delete it after.","heroicons:inbox-stack",{"title":30,"description":31,"icon":32},"Unlimited Messages","On every plan - no daily caps, no metering.","heroicons:envelope",{"title":34,"description":35,"icon":36},"Sandboxed","Receives real email from any service. Sends only within the sandbox.","heroicons:shield-check",{"title":38,"description":39,"icon":40},"SPF, DKIM, DMARC","Checked on every inbound message. Results in the UI and the API.","heroicons:check-badge",{"title":42,"description":43,"icon":44},"Retention Timers","Messages kept for your plan's window, up to 90 days. Per-message expiry for shorter.","heroicons:clock",{"title":46,"description":47,"icon":48},"REST API","Domains, accounts, mailboxes, messages, tokens. OpenAPI spec included.","heroicons:command-line",{"title":50,"description":51,"icon":52},"Real-time Updates","New messages pushed via SSE. No polling.","heroicons:signal",{"title":54,"description":55,"icon":56},"Catch-All & Aliasing","Wildcard accounts and plus-sign addressing. Capture everything or route by tag.","heroicons:at-symbol",{"title":58,"description":59,"links":60},"Email Testing for [Developers]{class=\"text-(--ui-primary)\"}","Test emails like you debug code. SMTP in, IMAP\u002FAPI out. Inspect headers, MIME and raw source. Nothing leaves the sandbox.",[61,62],{"label":11,"icon":12,"to":13,"size":14},{"label":63,"to":64,"color":65,"variant":66,"size":14},"Documentation","\u002Fdocs\u002Fgetting-started","neutral","subtle",{"navigation":68},false,{"headline":70,"title":71,"description":72,"links":73},"Quickstart","Send, read, assert","Your app sends over SMTP. Your test reads the result over the API. The whole loop fits on one screen.",[74],{"label":75,"to":76,"color":65,"variant":66,"trailing":77,"icon":12},"Read the CI guide","\u002Fdocs\u002Fguides\u002Fci",true,[79,97],{"title":80,"description":81,"id":82,"orientation":83,"img":84,"alt":85,"features":86},"SMTP, IMAP, POP3","Your existing mail clients work out of the box. No vendor SDK, no lock-in.","features","horizontal","\u002Fprotocols.jpeg","SMTP, IMAP and POP3 protocol support",[87,91,93],{"title":88,"description":89,"icon":90},"Quick setup","Point an MX record and the domain receives real email from any service. No setup wizard, no 50-page guide.","heroicons:bolt",{"title":46,"description":92,"icon":48},"Accounts, messages, domains, tokens. API-first.",{"title":94,"description":95,"icon":96},"Message inspection","Headers, MIME tree, raw RFC 5322. See exactly what arrived.","heroicons:document-magnifying-glass",{"title":98,"description":99,"id":100,"orientation":83,"reverse":77,"img":101,"alt":102,"features":103},"After delivery","Check what arrived in the UI or wire it into CI.","delivery","\u002Fpreview.jpeg","Email message preview with headers, HTML and raw source",[104,108,112],{"title":105,"description":106,"icon":107},"Delivery checks","HTML preview, text, headers, raw source. Plus SPF\u002FDKIM\u002FDMARC results via API.","heroicons:magnifying-glass",{"title":109,"description":110,"icon":111},"CI-ready","Standard SMTP - any CI that sends email works. GitHub Actions, Jenkins, GitLab CI, whatever you use.","heroicons:code-bracket",{"title":113,"description":114,"icon":115},"Deliverability audit","Sender config, HTML structure, links, and the content patterns spam filters flag. Grouped by severity.","heroicons:clipboard-document-check","0.index",null,{"title":119,"description":120,"items":121},"What you can test","Each card links to a guide.",[122,126,131,134,138,143],{"title":123,"description":124,"icon":125,"to":76},"CI assertions","Send from the test suite, poll the API, assert on subject and body.","heroicons:play-circle",{"title":127,"description":128,"icon":129,"to":130},"E2E flows","The Playwright test clicks the real reset link from the real email.","heroicons:cursor-arrow-rays","\u002Fdocs\u002Fguides\u002Fe2e",{"title":38,"description":132,"icon":40,"to":133},"Authentication verdicts from staging before you touch production DNS.","\u002Fdocs\u002Fguides\u002Fspf-dkim-dmarc",{"title":135,"description":136,"icon":56,"to":137},"QA signups","A catch-all account hands every test run a fresh address on your domain.","\u002Fdocs\u002Fguides\u002Fcatch-all",{"title":139,"description":140,"icon":141,"to":142},"Client previews","The same message in Thunderbird and Apple Mail, over plain IMAP.","heroicons:envelope-open","\u002Fdocs\u002Fguides\u002Femail-clients",{"title":144,"description":145,"icon":146,"to":147},"AI agents","Agents read OTP codes and confirmation links over the API. In dev, not in your inbox.","heroicons:cpu-chip","\u002Fdocs\u002Fguides\u002Fagents","DaGxq8lMErKmZoUnDnjSKAwJJfZk2ce6HZYNGSGjk4g",[150,311,757],{"id":151,"title":152,"body":153,"description":19,"extension":303,"icon":304,"label":305,"meta":306,"navigation":77,"path":307,"seo":308,"stem":309,"__hash__":310},"snippets\u002Fsnippets\u002F1.curl.md","Curl",{"type":154,"value":155,"toc":301},"minimark",[156,297],[157,158,162],"pre",{"className":159,"code":160,"language":161,"meta":19,"style":19},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# create an inbox\ncurl -X POST https:\u002F\u002Fapi.smtp.dev\u002Faccounts \\\n  -H \"X-API-KEY: $SMTP_DEV_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"address\": \"qa@example.com\", \"password\": \"use-a-secret\"}'\n\n# your app sends to it, then read what arrived\ncurl \"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F$ACCOUNT\u002Fmailboxes\u002F$INBOX\u002Fmessages\" \\\n  -H \"X-API-KEY: $SMTP_DEV_API_KEY\"\n","bash",[163,164,165,174,195,216,230,245,251,257,283],"code",{"__ignoreMap":19},[166,167,170],"span",{"class":168,"line":169},"line",1,[166,171,173],{"class":172},"sHwdD","# create an inbox\n",[166,175,177,181,185,188,191],{"class":168,"line":176},2,[166,178,180],{"class":179},"sBMFI","curl",[166,182,184],{"class":183},"sfazB"," -X",[166,186,187],{"class":183}," POST",[166,189,190],{"class":183}," https:\u002F\u002Fapi.smtp.dev\u002Faccounts",[166,192,194],{"class":193},"sTEyZ"," \\\n",[166,196,198,201,205,208,211,214],{"class":168,"line":197},3,[166,199,200],{"class":183},"  -H",[166,202,204],{"class":203},"sMK4o"," \"",[166,206,207],{"class":183},"X-API-KEY: ",[166,209,210],{"class":193},"$SMTP_DEV_API_KEY",[166,212,213],{"class":203},"\"",[166,215,194],{"class":193},[166,217,219,221,223,226,228],{"class":168,"line":218},4,[166,220,200],{"class":183},[166,222,204],{"class":203},[166,224,225],{"class":183},"Content-Type: application\u002Fjson",[166,227,213],{"class":203},[166,229,194],{"class":193},[166,231,233,236,239,242],{"class":168,"line":232},5,[166,234,235],{"class":183},"  -d",[166,237,238],{"class":203}," '",[166,240,241],{"class":183},"{\"address\": \"qa@example.com\", \"password\": \"use-a-secret\"}",[166,243,244],{"class":203},"'\n",[166,246,248],{"class":168,"line":247},6,[166,249,250],{"emptyLinePlaceholder":77},"\n",[166,252,254],{"class":168,"line":253},7,[166,255,256],{"class":172},"# your app sends to it, then read what arrived\n",[166,258,260,262,264,267,270,273,276,279,281],{"class":168,"line":259},8,[166,261,180],{"class":179},[166,263,204],{"class":203},[166,265,266],{"class":183},"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F",[166,268,269],{"class":193},"$ACCOUNT",[166,271,272],{"class":183},"\u002Fmailboxes\u002F",[166,274,275],{"class":193},"$INBOX",[166,277,278],{"class":183},"\u002Fmessages",[166,280,213],{"class":203},[166,282,194],{"class":193},[166,284,286,288,290,292,294],{"class":168,"line":285},9,[166,287,200],{"class":183},[166,289,204],{"class":203},[166,291,207],{"class":183},[166,293,210],{"class":193},[166,295,296],{"class":203},"\"\n",[298,299,300],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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);}",{"title":19,"searchDepth":176,"depth":176,"links":302},[],"md","simple-icons:curl","cURL",{},"\u002Fsnippets\u002Fcurl",{"description":19},"snippets\u002F1.curl","0Xmh2yp6-7JjxLkswky7j84DxsnecdzYb0hA4Gqy2NI",{"id":312,"title":313,"body":314,"description":19,"extension":303,"icon":750,"label":751,"meta":752,"navigation":77,"path":753,"seo":754,"stem":755,"__hash__":756},"snippets\u002Fsnippets\u002F2.node.md","Node",{"type":154,"value":315,"toc":748},[316,745],[157,317,321],{"className":318,"code":319,"language":320,"meta":19,"style":19},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const transport = nodemailer.createTransport({\n  host: 'send.smtp.dev',\n  port: 587,\n  requireTLS: true,\n  auth: { user: 'ci@example.com', pass: process.env.SMTP_DEV_PASSWORD },\n})\n\nawait transport.sendMail({\n  from: 'ci@example.com',\n  to: 'qa@example.com',\n  subject: `Welcome ${Date.now()}`,\n  text: 'Confirm your address: https:\u002F\u002Fexample.com\u002Fconfirm\u002Fabc123',\n})\n\n\u002F\u002F read it back over the API, newest first\nconst { member } = await fetch(\n  `https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F${account}\u002Fmailboxes\u002F${inbox}\u002Fmessages`,\n  { headers: { 'X-API-KEY': process.env.SMTP_DEV_API_KEY } },\n).then(res => res.json())\n\nassert.match(member[0].text, \u002F\\\u002Fconfirm\\\u002F\u002F)\n","js",[163,322,323,351,371,384,397,443,451,455,473,488,505,538,555,562,567,573,597,628,666,697,702],{"__ignoreMap":19},[166,324,325,329,332,335,338,341,345,348],{"class":168,"line":169},[166,326,328],{"class":327},"spNyl","const",[166,330,331],{"class":193}," transport ",[166,333,334],{"class":203},"=",[166,336,337],{"class":193}," nodemailer",[166,339,340],{"class":203},".",[166,342,344],{"class":343},"s2Zo4","createTransport",[166,346,347],{"class":193},"(",[166,349,350],{"class":203},"{\n",[166,352,353,357,360,362,365,368],{"class":168,"line":176},[166,354,356],{"class":355},"swJcz","  host",[166,358,359],{"class":203},":",[166,361,238],{"class":203},[166,363,364],{"class":183},"send.smtp.dev",[166,366,367],{"class":203},"'",[166,369,370],{"class":203},",\n",[166,372,373,376,378,382],{"class":168,"line":197},[166,374,375],{"class":355},"  port",[166,377,359],{"class":203},[166,379,381],{"class":380},"sbssI"," 587",[166,383,370],{"class":203},[166,385,386,389,391,395],{"class":168,"line":218},[166,387,388],{"class":355},"  requireTLS",[166,390,359],{"class":203},[166,392,394],{"class":393},"sfNiH"," true",[166,396,370],{"class":203},[166,398,399,402,404,407,410,412,414,417,419,422,425,427,430,432,435,437,440],{"class":168,"line":232},[166,400,401],{"class":355},"  auth",[166,403,359],{"class":203},[166,405,406],{"class":203}," {",[166,408,409],{"class":355}," user",[166,411,359],{"class":203},[166,413,238],{"class":203},[166,415,416],{"class":183},"ci@example.com",[166,418,367],{"class":203},[166,420,421],{"class":203},",",[166,423,424],{"class":355}," pass",[166,426,359],{"class":203},[166,428,429],{"class":193}," process",[166,431,340],{"class":203},[166,433,434],{"class":193},"env",[166,436,340],{"class":203},[166,438,439],{"class":193},"SMTP_DEV_PASSWORD ",[166,441,442],{"class":203},"},\n",[166,444,445,448],{"class":168,"line":247},[166,446,447],{"class":203},"}",[166,449,450],{"class":193},")\n",[166,452,453],{"class":168,"line":253},[166,454,250],{"emptyLinePlaceholder":77},[166,456,457,461,464,466,469,471],{"class":168,"line":259},[166,458,460],{"class":459},"s7zQu","await",[166,462,463],{"class":193}," transport",[166,465,340],{"class":203},[166,467,468],{"class":343},"sendMail",[166,470,347],{"class":193},[166,472,350],{"class":203},[166,474,475,478,480,482,484,486],{"class":168,"line":285},[166,476,477],{"class":355},"  from",[166,479,359],{"class":203},[166,481,238],{"class":203},[166,483,416],{"class":183},[166,485,367],{"class":203},[166,487,370],{"class":203},[166,489,491,494,496,498,501,503],{"class":168,"line":490},10,[166,492,493],{"class":355},"  to",[166,495,359],{"class":203},[166,497,238],{"class":203},[166,499,500],{"class":183},"qa@example.com",[166,502,367],{"class":203},[166,504,370],{"class":203},[166,506,508,511,513,516,519,522,525,527,530,533,536],{"class":168,"line":507},11,[166,509,510],{"class":355},"  subject",[166,512,359],{"class":203},[166,514,515],{"class":203}," `",[166,517,518],{"class":183},"Welcome ",[166,520,521],{"class":203},"${",[166,523,524],{"class":193},"Date",[166,526,340],{"class":203},[166,528,529],{"class":343},"now",[166,531,532],{"class":193},"()",[166,534,535],{"class":203},"}`",[166,537,370],{"class":203},[166,539,541,544,546,548,551,553],{"class":168,"line":540},12,[166,542,543],{"class":355},"  text",[166,545,359],{"class":203},[166,547,238],{"class":203},[166,549,550],{"class":183},"Confirm your address: https:\u002F\u002Fexample.com\u002Fconfirm\u002Fabc123",[166,552,367],{"class":203},[166,554,370],{"class":203},[166,556,558,560],{"class":168,"line":557},13,[166,559,447],{"class":203},[166,561,450],{"class":193},[166,563,565],{"class":168,"line":564},14,[166,566,250],{"emptyLinePlaceholder":77},[166,568,570],{"class":168,"line":569},15,[166,571,572],{"class":172},"\u002F\u002F read it back over the API, newest first\n",[166,574,576,578,580,583,585,588,591,594],{"class":168,"line":575},16,[166,577,328],{"class":327},[166,579,406],{"class":203},[166,581,582],{"class":193}," member ",[166,584,447],{"class":203},[166,586,587],{"class":203}," =",[166,589,590],{"class":459}," await",[166,592,593],{"class":343}," fetch",[166,595,596],{"class":193},"(\n",[166,598,600,603,605,607,610,612,614,616,619,621,623,626],{"class":168,"line":599},17,[166,601,602],{"class":203},"  `",[166,604,266],{"class":183},[166,606,521],{"class":203},[166,608,609],{"class":193},"account",[166,611,447],{"class":203},[166,613,272],{"class":183},[166,615,521],{"class":203},[166,617,618],{"class":193},"inbox",[166,620,447],{"class":203},[166,622,278],{"class":183},[166,624,625],{"class":203},"`",[166,627,370],{"class":203},[166,629,631,634,637,639,641,643,646,648,650,652,654,656,658,661,663],{"class":168,"line":630},18,[166,632,633],{"class":203},"  {",[166,635,636],{"class":355}," headers",[166,638,359],{"class":203},[166,640,406],{"class":203},[166,642,238],{"class":203},[166,644,645],{"class":355},"X-API-KEY",[166,647,367],{"class":203},[166,649,359],{"class":203},[166,651,429],{"class":193},[166,653,340],{"class":203},[166,655,434],{"class":193},[166,657,340],{"class":203},[166,659,660],{"class":193},"SMTP_DEV_API_KEY ",[166,662,447],{"class":203},[166,664,665],{"class":203}," },\n",[166,667,669,672,674,677,679,683,686,689,691,694],{"class":168,"line":668},19,[166,670,671],{"class":193},")",[166,673,340],{"class":203},[166,675,676],{"class":343},"then",[166,678,347],{"class":193},[166,680,682],{"class":681},"sHdIc","res",[166,684,685],{"class":327}," =>",[166,687,688],{"class":193}," res",[166,690,340],{"class":203},[166,692,693],{"class":343},"json",[166,695,696],{"class":193},"())\n",[166,698,700],{"class":168,"line":699},20,[166,701,250],{"emptyLinePlaceholder":77},[166,703,705,708,710,713,716,719,722,724,727,729,732,735,738,740,743],{"class":168,"line":704},21,[166,706,707],{"class":193},"assert",[166,709,340],{"class":203},[166,711,712],{"class":343},"match",[166,714,715],{"class":193},"(member[",[166,717,718],{"class":380},"0",[166,720,721],{"class":193},"]",[166,723,340],{"class":203},[166,725,726],{"class":193},"text",[166,728,421],{"class":203},[166,730,731],{"class":203}," \u002F",[166,733,734],{"class":193},"\\\u002F",[166,736,737],{"class":183},"confirm",[166,739,734],{"class":193},[166,741,742],{"class":203},"\u002F",[166,744,450],{"class":193},[298,746,747],{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--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}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);}",{"title":19,"searchDepth":176,"depth":176,"links":749},[],"simple-icons:nodedotjs","Node.js",{},"\u002Fsnippets\u002Fnode",{"description":19},"snippets\u002F2.node","uJ3HNy_6l_2NDs3PIao-Glk0xnBRu6WXJc37JorZN9w",{"id":758,"title":759,"body":760,"description":19,"extension":303,"icon":1093,"label":759,"meta":1094,"navigation":77,"path":1095,"seo":1096,"stem":1097,"__hash__":1098},"snippets\u002Fsnippets\u002F3.python.md","Python",{"type":154,"value":761,"toc":1091},[762,1088],[157,763,767],{"className":764,"code":765,"language":766,"meta":19,"style":19},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","msg = EmailMessage()\nmsg[\"From\"], msg[\"To\"] = \"ci@example.com\", \"qa@example.com\"\nmsg[\"Subject\"] = \"Reset your password\"\nmsg.set_content(\"https:\u002F\u002Fexample.com\u002Freset\u002Fabc123\")\n\nwith smtplib.SMTP(\"send.smtp.dev\", 587) as smtp:\n    smtp.starttls()\n    smtp.login(\"ci@example.com\", os.environ[\"SMTP_DEV_PASSWORD\"])\n    smtp.send_message(msg)\n\n# read it back over the API, newest first\nmessages = requests.get(\n    f\"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{account}\u002Fmailboxes\u002F{inbox}\u002Fmessages\",\n    headers={\"X-API-KEY\": os.environ[\"SMTP_DEV_API_KEY\"]},\n).json()[\"member\"]\n","python",[163,768,769,782,830,854,874,878,914,926,965,980,984,989,1006,1034,1068],{"__ignoreMap":19},[166,770,771,774,776,779],{"class":168,"line":169},[166,772,773],{"class":193},"msg ",[166,775,334],{"class":203},[166,777,778],{"class":343}," EmailMessage",[166,780,781],{"class":203},"()\n",[166,783,784,787,790,792,795,797,800,803,805,807,810,812,814,816,818,820,822,824,826,828],{"class":168,"line":176},[166,785,786],{"class":193},"msg",[166,788,789],{"class":203},"[",[166,791,213],{"class":203},[166,793,794],{"class":183},"From",[166,796,213],{"class":203},[166,798,799],{"class":203},"],",[166,801,802],{"class":193}," msg",[166,804,789],{"class":203},[166,806,213],{"class":203},[166,808,809],{"class":183},"To",[166,811,213],{"class":203},[166,813,721],{"class":203},[166,815,587],{"class":203},[166,817,204],{"class":203},[166,819,416],{"class":183},[166,821,213],{"class":203},[166,823,421],{"class":203},[166,825,204],{"class":203},[166,827,500],{"class":183},[166,829,296],{"class":203},[166,831,832,834,836,838,841,843,845,847,849,852],{"class":168,"line":197},[166,833,786],{"class":193},[166,835,789],{"class":203},[166,837,213],{"class":203},[166,839,840],{"class":183},"Subject",[166,842,213],{"class":203},[166,844,721],{"class":203},[166,846,587],{"class":203},[166,848,204],{"class":203},[166,850,851],{"class":183},"Reset your password",[166,853,296],{"class":203},[166,855,856,858,860,863,865,867,870,872],{"class":168,"line":218},[166,857,786],{"class":193},[166,859,340],{"class":203},[166,861,862],{"class":343},"set_content",[166,864,347],{"class":203},[166,866,213],{"class":203},[166,868,869],{"class":183},"https:\u002F\u002Fexample.com\u002Freset\u002Fabc123",[166,871,213],{"class":203},[166,873,450],{"class":203},[166,875,876],{"class":168,"line":232},[166,877,250],{"emptyLinePlaceholder":77},[166,879,880,883,886,888,891,893,895,897,899,901,903,905,908,911],{"class":168,"line":247},[166,881,882],{"class":459},"with",[166,884,885],{"class":193}," smtplib",[166,887,340],{"class":203},[166,889,890],{"class":343},"SMTP",[166,892,347],{"class":203},[166,894,213],{"class":203},[166,896,364],{"class":183},[166,898,213],{"class":203},[166,900,421],{"class":203},[166,902,381],{"class":380},[166,904,671],{"class":203},[166,906,907],{"class":459}," as",[166,909,910],{"class":193}," smtp",[166,912,913],{"class":203},":\n",[166,915,916,919,921,924],{"class":168,"line":253},[166,917,918],{"class":193},"    smtp",[166,920,340],{"class":203},[166,922,923],{"class":343},"starttls",[166,925,781],{"class":203},[166,927,928,930,932,935,937,939,941,943,945,948,950,953,955,957,960,962],{"class":168,"line":259},[166,929,918],{"class":193},[166,931,340],{"class":203},[166,933,934],{"class":343},"login",[166,936,347],{"class":203},[166,938,213],{"class":203},[166,940,416],{"class":183},[166,942,213],{"class":203},[166,944,421],{"class":203},[166,946,947],{"class":343}," os",[166,949,340],{"class":203},[166,951,952],{"class":355},"environ",[166,954,789],{"class":203},[166,956,213],{"class":203},[166,958,959],{"class":183},"SMTP_DEV_PASSWORD",[166,961,213],{"class":203},[166,963,964],{"class":203},"])\n",[166,966,967,969,971,974,976,978],{"class":168,"line":285},[166,968,918],{"class":193},[166,970,340],{"class":203},[166,972,973],{"class":343},"send_message",[166,975,347],{"class":203},[166,977,786],{"class":343},[166,979,450],{"class":203},[166,981,982],{"class":168,"line":490},[166,983,250],{"emptyLinePlaceholder":77},[166,985,986],{"class":168,"line":507},[166,987,988],{"class":172},"# read it back over the API, newest first\n",[166,990,991,994,996,999,1001,1004],{"class":168,"line":540},[166,992,993],{"class":193},"messages ",[166,995,334],{"class":203},[166,997,998],{"class":193}," requests",[166,1000,340],{"class":203},[166,1002,1003],{"class":343},"get",[166,1005,596],{"class":203},[166,1007,1008,1011,1014,1017,1019,1021,1023,1025,1027,1029,1032],{"class":168,"line":557},[166,1009,1010],{"class":327},"    f",[166,1012,1013],{"class":183},"\"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F",[166,1015,1016],{"class":380},"{",[166,1018,609],{"class":343},[166,1020,447],{"class":380},[166,1022,272],{"class":183},[166,1024,1016],{"class":380},[166,1026,618],{"class":343},[166,1028,447],{"class":380},[166,1030,1031],{"class":183},"\u002Fmessages\"",[166,1033,370],{"class":203},[166,1035,1036,1039,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1063,1065],{"class":168,"line":564},[166,1037,1038],{"class":681},"    headers",[166,1040,1041],{"class":203},"={",[166,1043,213],{"class":203},[166,1045,645],{"class":183},[166,1047,213],{"class":203},[166,1049,359],{"class":203},[166,1051,947],{"class":343},[166,1053,340],{"class":203},[166,1055,952],{"class":355},[166,1057,789],{"class":203},[166,1059,213],{"class":203},[166,1061,1062],{"class":183},"SMTP_DEV_API_KEY",[166,1064,213],{"class":203},[166,1066,1067],{"class":203},"]},\n",[166,1069,1070,1073,1075,1078,1080,1083,1085],{"class":168,"line":569},[166,1071,1072],{"class":203},").",[166,1074,693],{"class":343},[166,1076,1077],{"class":203},"()[",[166,1079,213],{"class":203},[166,1081,1082],{"class":183},"member",[166,1084,213],{"class":203},[166,1086,1087],{"class":203},"]\n",[298,1089,1090],{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}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);}",{"title":19,"searchDepth":176,"depth":176,"links":1092},[],"simple-icons:python",{},"\u002Fsnippets\u002Fpython",{"description":19},"snippets\u002F3.python","-W_VN0jD1FFnChccp15MVAMZsmwx_9WL9-3m9gDOKn0",{"data":1100,"body":1101},{},{"type":1102,"children":1103},"root",[1104],{"type":1105,"tag":1106,"props":1107,"children":1108},"element","p",{},[1109,1111],{"type":726,"value":1110},"Email Testing for ",{"type":1105,"tag":166,"props":1112,"children":1115},{"className":1113},[1114],"text-(--ui-primary)",[1116],{"type":726,"value":1117},"Developers",1786919880763]