[{"data":1,"prerenderedAt":2266},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fguides\u002Fsend-test-email\u002F":109,"\u002Fdocs\u002Fguides\u002Fsend-test-email\u002F-surround":2261},[4,8,22,26,43,92],{"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,72,76,80,84,88],{"title":49,"path":50,"stem":51},"SMTP Test","\u002Fdocs\u002Fguides\u002Fsend-test-email","1.docs\u002F5.guides\u002F01.send-test-email",{"title":53,"path":54,"stem":55},"API Quickstart","\u002Fdocs\u002Fguides\u002Femail-testing-api","1.docs\u002F5.guides\u002F02.email-testing-api",{"title":57,"path":58,"stem":59},"CI","\u002Fdocs\u002Fguides\u002Fci","1.docs\u002F5.guides\u002F03.ci",{"title":61,"path":62,"stem":63},"Catch-All","\u002Fdocs\u002Fguides\u002Fcatch-all","1.docs\u002F5.guides\u002F04.catch-all",{"title":65,"path":66,"stem":67},"SPF, DKIM, DMARC","\u002Fdocs\u002Fguides\u002Fspf-dkim-dmarc","1.docs\u002F5.guides\u002F05.spf-dkim-dmarc",{"title":69,"path":70,"stem":71},"Playwright","\u002Fdocs\u002Fguides\u002Fe2e","1.docs\u002F5.guides\u002F06.e2e",{"title":73,"path":74,"stem":75},"Cypress","\u002Fdocs\u002Fguides\u002Fcypress","1.docs\u002F5.guides\u002F07.cypress",{"title":77,"path":78,"stem":79},"Email Clients","\u002Fdocs\u002Fguides\u002Femail-clients","1.docs\u002F5.guides\u002F08.email-clients",{"title":81,"path":82,"stem":83},"AI Agents","\u002Fdocs\u002Fguides\u002Fagents","1.docs\u002F5.guides\u002F09.agents",{"title":85,"path":86,"stem":87},"Local Development","\u002Fdocs\u002Fguides\u002Flocal-development","1.docs\u002F5.guides\u002F10.local-development",{"title":89,"path":90,"stem":91},"Size Limits","\u002Fdocs\u002Fguides\u002Femail-size-limits","1.docs\u002F5.guides\u002F11.email-size-limits",{"title":93,"path":94,"stem":95,"children":96,"page":21},"Alternatives","\u002Fdocs\u002Falternatives","1.docs\u002F6.alternatives",[97,101,105],{"title":98,"path":99,"stem":100},"Mailtrap","\u002Fdocs\u002Falternatives\u002Fmailtrap","1.docs\u002F6.alternatives\u002F1.mailtrap",{"title":102,"path":103,"stem":104},"Mailosaur","\u002Fdocs\u002Falternatives\u002Fmailosaur","1.docs\u002F6.alternatives\u002F2.mailosaur",{"title":106,"path":107,"stem":108},"Mailinator","\u002Fdocs\u002Falternatives\u002Fmailinator","1.docs\u002F6.alternatives\u002F3.mailinator",{"id":110,"title":111,"body":112,"description":2255,"extension":2256,"meta":2257,"navigation":2258,"path":50,"seo":2259,"stem":51,"__hash__":2260},"docs\u002F1.docs\u002F5.guides\u002F01.send-test-email.md","SMTP Test: Send a Test Email and Inspect It",{"type":113,"value":114,"toc":2242},"minimark",[115,124,129,190,212,218,222,226,237,339,342,349,357,360,420,427,431,434,465,482,485,523,526,532,546,642,646,649,1480,1483,1856,1870,1880,1884,1899,1910,1972,1983,1986,2095,2099,2157,2161,2221,2225,2238],[116,117,118,119,123],"p",{},"Send a message through the sandbox's SMTP server, then open what arrived: headers, MIME parts, raw source. ",[120,121,122],"code",{},"send.smtp.dev"," only delivers to accounts in your sandbox, so a test email can't reach a real recipient.",[125,126,128],"h2",{"id":127},"settings","Settings",[130,131,132,145],"table",{},[133,134,135],"thead",{},[136,137,138,142],"tr",{},[139,140,141],"th",{},"Setting",[139,143,144],{},"Value",[146,147,148,158,166,174,182],"tbody",{},[136,149,150,154],{},[151,152,153],"td",{},"Host",[151,155,156],{},[120,157,122],{},[136,159,160,163],{},[151,161,162],{},"Port",[151,164,165],{},"587, STARTTLS",[136,167,168,171],{},[151,169,170],{},"Username",[151,172,173],{},"The account's full address",[136,175,176,179],{},[151,177,178],{},"Password",[151,180,181],{},"The account's password",[136,183,184,187],{},[151,185,186],{},"Size",[151,188,189],{},"Up to 20 MB per message",[116,191,192,193,199,200,203,204,207,208,211],{},"Create two accounts on the ",[194,195,198],"a",{"href":196,"target":197},"\u002Faccounts\u002F","_blank","Accounts"," page: one to send from, one to receive. The examples use ",[120,201,202],{},"sender@test.example.com"," and ",[120,205,206],{},"qa@test.example.com",", and read the sender's password from ",[120,209,210],{},"SMTP_PASSWORD",".",[213,214,215],"note",{},[116,216,217],{},"The recipient has to be an account in your sandbox. Any other address is refused.",[125,219,221],{"id":220},"from-the-command-line","From the Command Line",[223,224,225],"h3",{"id":225},"swaks",[116,227,228,229,232,233,236],{},"swaks is the usual SMTP test tool: ",[120,230,231],{},"brew install swaks"," or ",[120,234,235],{},"apt install swaks",". It prints the whole SMTP conversation, so a refused login or recipient shows the server's exact reply.",[238,239,244],"pre",{"className":240,"code":241,"language":242,"meta":243,"style":243},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","swaks --server send.smtp.dev --port 587 --tls \\\n  --auth-user sender@test.example.com --auth-password \"$SMTP_PASSWORD\" \\\n  --from sender@test.example.com --to qa@test.example.com \\\n  --header \"Subject: SMTP test\" --body \"Sent with swaks\"\n","bash","",[120,245,246,275,299,315],{"__ignoreMap":243},[247,248,251,254,258,261,264,268,271],"span",{"class":249,"line":250},"line",1,[247,252,225],{"class":253},"sBMFI",[247,255,257],{"class":256},"sfazB"," --server",[247,259,260],{"class":256}," send.smtp.dev",[247,262,263],{"class":256}," --port",[247,265,267],{"class":266},"sbssI"," 587",[247,269,270],{"class":256}," --tls",[247,272,274],{"class":273},"sTEyZ"," \\\n",[247,276,278,281,284,287,291,294,297],{"class":249,"line":277},2,[247,279,280],{"class":256},"  --auth-user",[247,282,283],{"class":256}," sender@test.example.com",[247,285,286],{"class":256}," --auth-password",[247,288,290],{"class":289},"sMK4o"," \"",[247,292,293],{"class":273},"$SMTP_PASSWORD",[247,295,296],{"class":289},"\"",[247,298,274],{"class":273},[247,300,302,305,307,310,313],{"class":249,"line":301},3,[247,303,304],{"class":256},"  --from",[247,306,283],{"class":256},[247,308,309],{"class":256}," --to",[247,311,312],{"class":256}," qa@test.example.com",[247,314,274],{"class":273},[247,316,318,321,323,326,328,331,333,336],{"class":249,"line":317},4,[247,319,320],{"class":256},"  --header",[247,322,290],{"class":289},[247,324,325],{"class":256},"Subject: SMTP test",[247,327,296],{"class":289},[247,329,330],{"class":256}," --body",[247,332,290],{"class":289},[247,334,335],{"class":256},"Sent with swaks",[247,337,338],{"class":289},"\"\n",[223,340,341],{"id":341},"curl",[116,343,344,345,348],{},"curl speaks SMTP, so there's nothing to install. Write the message to ",[120,346,347],{},"message.txt",":",[238,350,355],{"className":351,"code":353,"language":354,"meta":243},[352],"language-text","From: sender@test.example.com\nTo: qa@test.example.com\nSubject: SMTP test\n\nSent with curl.\n","text",[120,356,353],{"__ignoreMap":243},[116,358,359],{},"Then send it:",[238,361,363],{"className":240,"code":362,"language":242,"meta":243,"style":243},"curl smtp:\u002F\u002Fsend.smtp.dev:587 --ssl-reqd \\\n  --user \"sender@test.example.com:$SMTP_PASSWORD\" \\\n  --mail-from sender@test.example.com \\\n  --mail-rcpt qa@test.example.com \\\n  --upload-file message.txt\n",[120,364,365,377,393,402,411],{"__ignoreMap":243},[247,366,367,369,372,375],{"class":249,"line":250},[247,368,341],{"class":253},[247,370,371],{"class":256}," smtp:\u002F\u002Fsend.smtp.dev:587",[247,373,374],{"class":256}," --ssl-reqd",[247,376,274],{"class":273},[247,378,379,382,384,387,389,391],{"class":249,"line":277},[247,380,381],{"class":256},"  --user",[247,383,290],{"class":289},[247,385,386],{"class":256},"sender@test.example.com:",[247,388,293],{"class":273},[247,390,296],{"class":289},[247,392,274],{"class":273},[247,394,395,398,400],{"class":249,"line":301},[247,396,397],{"class":256},"  --mail-from",[247,399,283],{"class":256},[247,401,274],{"class":273},[247,403,404,407,409],{"class":249,"line":317},[247,405,406],{"class":256},"  --mail-rcpt",[247,408,312],{"class":256},[247,410,274],{"class":273},[247,412,414,417],{"class":249,"line":413},5,[247,415,416],{"class":256},"  --upload-file",[247,418,419],{"class":256}," message.txt\n",[116,421,422,423,426],{},"Add ",[120,424,425],{},"-v"," to see each command and reply.",[223,428,430],{"id":429},"by-hand-with-openssl","By Hand with openssl",[116,432,433],{},"Typing the SMTP commands yourself shows exactly where a conversation fails. Port 587 starts TLS before login, which telnet can't do, so connect with openssl:",[238,435,437],{"className":240,"code":436,"language":242,"meta":243,"style":243},"openssl s_client -starttls smtp -connect send.smtp.dev:587 -crlf -quiet\n",[120,438,439],{"__ignoreMap":243},[247,440,441,444,447,450,453,456,459,462],{"class":249,"line":250},[247,442,443],{"class":253},"openssl",[247,445,446],{"class":256}," s_client",[247,448,449],{"class":256}," -starttls",[247,451,452],{"class":256}," smtp",[247,454,455],{"class":256}," -connect",[247,457,458],{"class":256}," send.smtp.dev:587",[247,460,461],{"class":256}," -crlf",[247,463,464],{"class":256}," -quiet\n",[116,466,467,470,471,474,475,478,479,211],{},[120,468,469],{},"-crlf"," sends the line endings SMTP expects. ",[120,472,473],{},"-quiet"," also stops openssl from reading a line that starts with ",[120,476,477],{},"R"," as a renegotiation command, which would otherwise swallow ",[120,480,481],{},"RCPT TO",[116,483,484],{},"Build the login token in another terminal:",[238,486,488],{"className":240,"code":487,"language":242,"meta":243,"style":243},"printf '\\0%s\\0%s' 'sender@test.example.com' \"$SMTP_PASSWORD\" | base64\n",[120,489,490],{"__ignoreMap":243},[247,491,492,496,499,502,505,507,509,511,513,515,517,520],{"class":249,"line":250},[247,493,495],{"class":494},"s2Zo4","printf",[247,497,498],{"class":289}," '",[247,500,501],{"class":256},"\\0%s\\0%s",[247,503,504],{"class":289},"'",[247,506,498],{"class":289},[247,508,202],{"class":256},[247,510,504],{"class":289},[247,512,290],{"class":289},[247,514,293],{"class":273},[247,516,296],{"class":289},[247,518,519],{"class":289}," |",[247,521,522],{"class":253}," base64\n",[116,524,525],{},"Then type one line at a time and wait for each reply:",[238,527,530],{"className":528,"code":529,"language":354,"meta":243},[352],"EHLO localhost\nAUTH PLAIN \u003Ctoken>\nMAIL FROM:\u003Csender@test.example.com>\nRCPT TO:\u003Cqa@test.example.com>\nDATA\nFrom: sender@test.example.com\nTo: qa@test.example.com\nSubject: SMTP test\n\nTyped by hand.\n.\nQUIT\n",[120,531,529],{"__ignoreMap":243},[116,533,534,535,538,539,542,543,545],{},"The ",[120,536,537],{},"EHLO"," reply lists what the server supports, including ",[120,540,541],{},"SIZE",", its message size limit in bytes. The line with a single ",[120,544,211],{}," ends the message.",[130,547,548,558],{},[133,549,550],{},[136,551,552,555],{},[139,553,554],{},"Reply",[139,556,557],{},"Meaning",[146,559,560,570,580,590,602,612,622,632],{},[136,561,562,567],{},[151,563,564],{},[120,565,566],{},"220",[151,568,569],{},"Ready",[136,571,572,577],{},[151,573,574],{},[120,575,576],{},"250",[151,578,579],{},"Accepted",[136,581,582,587],{},[151,583,584],{},[120,585,586],{},"235",[151,588,589],{},"Logged in",[136,591,592,597],{},[151,593,594],{},[120,595,596],{},"354",[151,598,599,600],{},"Send the message, end it with a line holding only ",[120,601,211],{},[136,603,604,609],{},[151,605,606],{},[120,607,608],{},"530",[151,610,611],{},"Log in first",[136,613,614,619],{},[151,615,616],{},[120,617,618],{},"535",[151,620,621],{},"Login failed",[136,623,624,629],{},[151,625,626],{},[120,627,628],{},"550",[151,630,631],{},"Refused, usually the recipient",[136,633,634,639],{},[151,635,636],{},[120,637,638],{},"552",[151,640,641],{},"Over the size limit",[125,643,645],{"id":644},"from-your-app","From Your App",[116,647,648],{},"Point the app's mailer at the sandbox. Sending from code:",[650,651,652,914,1169],"code-group",{},[238,653,658],{"className":654,"code":655,"filename":656,"language":657,"meta":243,"style":243},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import nodemailer from 'nodemailer'\n\nconst transport = nodemailer.createTransport({\n  host: 'send.smtp.dev',\n  port: 587,\n  requireTLS: true,\n  auth: {\n    user: 'sender@test.example.com',\n    pass: process.env.SMTP_PASSWORD,\n  },\n})\n\nawait transport.sendMail({\n  from: 'sender@test.example.com',\n  to: 'qa@test.example.com',\n  subject: 'SMTP test',\n  text: 'Sent with Nodemailer',\n})\n","Node","js",[120,659,660,680,686,712,729,740,754,765,781,803,809,818,823,841,857,873,890,907],{"__ignoreMap":243},[247,661,662,666,669,672,674,677],{"class":249,"line":250},[247,663,665],{"class":664},"s7zQu","import",[247,667,668],{"class":273}," nodemailer ",[247,670,671],{"class":664},"from",[247,673,498],{"class":289},[247,675,676],{"class":256},"nodemailer",[247,678,679],{"class":289},"'\n",[247,681,682],{"class":249,"line":277},[247,683,685],{"emptyLinePlaceholder":684},true,"\n",[247,687,688,692,695,698,701,703,706,709],{"class":249,"line":301},[247,689,691],{"class":690},"spNyl","const",[247,693,694],{"class":273}," transport ",[247,696,697],{"class":289},"=",[247,699,700],{"class":273}," nodemailer",[247,702,211],{"class":289},[247,704,705],{"class":494},"createTransport",[247,707,708],{"class":273},"(",[247,710,711],{"class":289},"{\n",[247,713,714,718,720,722,724,726],{"class":249,"line":317},[247,715,717],{"class":716},"swJcz","  host",[247,719,348],{"class":289},[247,721,498],{"class":289},[247,723,122],{"class":256},[247,725,504],{"class":289},[247,727,728],{"class":289},",\n",[247,730,731,734,736,738],{"class":249,"line":413},[247,732,733],{"class":716},"  port",[247,735,348],{"class":289},[247,737,267],{"class":266},[247,739,728],{"class":289},[247,741,743,746,748,752],{"class":249,"line":742},6,[247,744,745],{"class":716},"  requireTLS",[247,747,348],{"class":289},[247,749,751],{"class":750},"sfNiH"," true",[247,753,728],{"class":289},[247,755,757,760,762],{"class":249,"line":756},7,[247,758,759],{"class":716},"  auth",[247,761,348],{"class":289},[247,763,764],{"class":289}," {\n",[247,766,768,771,773,775,777,779],{"class":249,"line":767},8,[247,769,770],{"class":716},"    user",[247,772,348],{"class":289},[247,774,498],{"class":289},[247,776,202],{"class":256},[247,778,504],{"class":289},[247,780,728],{"class":289},[247,782,784,787,789,792,794,797,799,801],{"class":249,"line":783},9,[247,785,786],{"class":716},"    pass",[247,788,348],{"class":289},[247,790,791],{"class":273}," process",[247,793,211],{"class":289},[247,795,796],{"class":273},"env",[247,798,211],{"class":289},[247,800,210],{"class":273},[247,802,728],{"class":289},[247,804,806],{"class":249,"line":805},10,[247,807,808],{"class":289},"  },\n",[247,810,812,815],{"class":249,"line":811},11,[247,813,814],{"class":289},"}",[247,816,817],{"class":273},")\n",[247,819,821],{"class":249,"line":820},12,[247,822,685],{"emptyLinePlaceholder":684},[247,824,826,829,832,834,837,839],{"class":249,"line":825},13,[247,827,828],{"class":664},"await",[247,830,831],{"class":273}," transport",[247,833,211],{"class":289},[247,835,836],{"class":494},"sendMail",[247,838,708],{"class":273},[247,840,711],{"class":289},[247,842,844,847,849,851,853,855],{"class":249,"line":843},14,[247,845,846],{"class":716},"  from",[247,848,348],{"class":289},[247,850,498],{"class":289},[247,852,202],{"class":256},[247,854,504],{"class":289},[247,856,728],{"class":289},[247,858,860,863,865,867,869,871],{"class":249,"line":859},15,[247,861,862],{"class":716},"  to",[247,864,348],{"class":289},[247,866,498],{"class":289},[247,868,206],{"class":256},[247,870,504],{"class":289},[247,872,728],{"class":289},[247,874,876,879,881,883,886,888],{"class":249,"line":875},16,[247,877,878],{"class":716},"  subject",[247,880,348],{"class":289},[247,882,498],{"class":289},[247,884,885],{"class":256},"SMTP test",[247,887,504],{"class":289},[247,889,728],{"class":289},[247,891,893,896,898,900,903,905],{"class":249,"line":892},17,[247,894,895],{"class":716},"  text",[247,897,348],{"class":289},[247,899,498],{"class":289},[247,901,902],{"class":256},"Sent with Nodemailer",[247,904,504],{"class":289},[247,906,728],{"class":289},[247,908,910,912],{"class":249,"line":909},18,[247,911,814],{"class":289},[247,913,817],{"class":273},[238,915,920],{"className":916,"code":917,"filename":918,"language":919,"meta":243,"style":243},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import os\nimport smtplib\nfrom email.message import EmailMessage\n\nmsg = EmailMessage()\nmsg[\"From\"] = \"sender@test.example.com\"\nmsg[\"To\"] = \"qa@test.example.com\"\nmsg[\"Subject\"] = \"SMTP test\"\nmsg.set_content(\"Sent with smtplib\")\n\nwith smtplib.SMTP(\"send.smtp.dev\", 587) as smtp:\n    smtp.starttls()\n    smtp.login(\"sender@test.example.com\", os.environ[\"SMTP_PASSWORD\"])\n    smtp.send_message(msg)\n","Python","python",[120,921,922,929,936,953,957,970,997,1020,1043,1063,1067,1104,1116,1154],{"__ignoreMap":243},[247,923,924,926],{"class":249,"line":250},[247,925,665],{"class":664},[247,927,928],{"class":273}," os\n",[247,930,931,933],{"class":249,"line":277},[247,932,665],{"class":664},[247,934,935],{"class":273}," smtplib\n",[247,937,938,940,943,945,948,950],{"class":249,"line":301},[247,939,671],{"class":664},[247,941,942],{"class":273}," email",[247,944,211],{"class":289},[247,946,947],{"class":273},"message ",[247,949,665],{"class":664},[247,951,952],{"class":273}," EmailMessage\n",[247,954,955],{"class":249,"line":317},[247,956,685],{"emptyLinePlaceholder":684},[247,958,959,962,964,967],{"class":249,"line":413},[247,960,961],{"class":273},"msg ",[247,963,697],{"class":289},[247,965,966],{"class":494}," EmailMessage",[247,968,969],{"class":289},"()\n",[247,971,972,975,978,980,983,985,988,991,993,995],{"class":249,"line":742},[247,973,974],{"class":273},"msg",[247,976,977],{"class":289},"[",[247,979,296],{"class":289},[247,981,982],{"class":256},"From",[247,984,296],{"class":289},[247,986,987],{"class":289},"]",[247,989,990],{"class":289}," =",[247,992,290],{"class":289},[247,994,202],{"class":256},[247,996,338],{"class":289},[247,998,999,1001,1003,1005,1008,1010,1012,1014,1016,1018],{"class":249,"line":756},[247,1000,974],{"class":273},[247,1002,977],{"class":289},[247,1004,296],{"class":289},[247,1006,1007],{"class":256},"To",[247,1009,296],{"class":289},[247,1011,987],{"class":289},[247,1013,990],{"class":289},[247,1015,290],{"class":289},[247,1017,206],{"class":256},[247,1019,338],{"class":289},[247,1021,1022,1024,1026,1028,1031,1033,1035,1037,1039,1041],{"class":249,"line":767},[247,1023,974],{"class":273},[247,1025,977],{"class":289},[247,1027,296],{"class":289},[247,1029,1030],{"class":256},"Subject",[247,1032,296],{"class":289},[247,1034,987],{"class":289},[247,1036,990],{"class":289},[247,1038,290],{"class":289},[247,1040,885],{"class":256},[247,1042,338],{"class":289},[247,1044,1045,1047,1049,1052,1054,1056,1059,1061],{"class":249,"line":783},[247,1046,974],{"class":273},[247,1048,211],{"class":289},[247,1050,1051],{"class":494},"set_content",[247,1053,708],{"class":289},[247,1055,296],{"class":289},[247,1057,1058],{"class":256},"Sent with smtplib",[247,1060,296],{"class":289},[247,1062,817],{"class":289},[247,1064,1065],{"class":249,"line":805},[247,1066,685],{"emptyLinePlaceholder":684},[247,1068,1069,1072,1075,1077,1080,1082,1084,1086,1088,1091,1093,1096,1099,1101],{"class":249,"line":811},[247,1070,1071],{"class":664},"with",[247,1073,1074],{"class":273}," smtplib",[247,1076,211],{"class":289},[247,1078,1079],{"class":494},"SMTP",[247,1081,708],{"class":289},[247,1083,296],{"class":289},[247,1085,122],{"class":256},[247,1087,296],{"class":289},[247,1089,1090],{"class":289},",",[247,1092,267],{"class":266},[247,1094,1095],{"class":289},")",[247,1097,1098],{"class":664}," as",[247,1100,452],{"class":273},[247,1102,1103],{"class":289},":\n",[247,1105,1106,1109,1111,1114],{"class":249,"line":820},[247,1107,1108],{"class":273},"    smtp",[247,1110,211],{"class":289},[247,1112,1113],{"class":494},"starttls",[247,1115,969],{"class":289},[247,1117,1118,1120,1122,1125,1127,1129,1131,1133,1135,1138,1140,1143,1145,1147,1149,1151],{"class":249,"line":825},[247,1119,1108],{"class":273},[247,1121,211],{"class":289},[247,1123,1124],{"class":494},"login",[247,1126,708],{"class":289},[247,1128,296],{"class":289},[247,1130,202],{"class":256},[247,1132,296],{"class":289},[247,1134,1090],{"class":289},[247,1136,1137],{"class":494}," os",[247,1139,211],{"class":289},[247,1141,1142],{"class":716},"environ",[247,1144,977],{"class":289},[247,1146,296],{"class":289},[247,1148,210],{"class":256},[247,1150,296],{"class":289},[247,1152,1153],{"class":289},"])\n",[247,1155,1156,1158,1160,1163,1165,1167],{"class":249,"line":843},[247,1157,1108],{"class":273},[247,1159,211],{"class":289},[247,1161,1162],{"class":494},"send_message",[247,1164,708],{"class":289},[247,1166,974],{"class":494},[247,1168,817],{"class":289},[238,1170,1175],{"className":1171,"code":1172,"filename":1173,"language":1174,"meta":243,"style":243},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","package main\n\nimport (\n    \"net\u002Fsmtp\"\n    \"os\"\n)\n\nfunc main() {\n    from := \"sender@test.example.com\"\n    msg := []byte(\"From: sender@test.example.com\\r\\n\" +\n        \"To: qa@test.example.com\\r\\n\" +\n        \"Subject: SMTP test\\r\\n\" +\n        \"\\r\\n\" +\n        \"Sent with net\u002Fsmtp\\r\\n\")\n\n    auth := smtp.PlainAuth(\"\", from, os.Getenv(\"SMTP_PASSWORD\"), \"send.smtp.dev\")\n    err := smtp.SendMail(\"send.smtp.dev:587\", auth, from, []string{\"qa@test.example.com\"}, msg)\n    if err != nil {\n        panic(err)\n    }\n}\n","Golang","go",[120,1176,1177,1185,1189,1196,1206,1215,1219,1223,1236,1250,1278,1292,1304,1314,1327,1331,1383,1439,1455,1468,1474],{"__ignoreMap":243},[247,1178,1179,1182],{"class":249,"line":250},[247,1180,1181],{"class":289},"package",[247,1183,1184],{"class":253}," main\n",[247,1186,1187],{"class":249,"line":277},[247,1188,685],{"emptyLinePlaceholder":684},[247,1190,1191,1193],{"class":249,"line":301},[247,1192,665],{"class":664},[247,1194,1195],{"class":289}," (\n",[247,1197,1198,1201,1204],{"class":249,"line":317},[247,1199,1200],{"class":289},"    \"",[247,1202,1203],{"class":253},"net\u002Fsmtp",[247,1205,338],{"class":289},[247,1207,1208,1210,1213],{"class":249,"line":413},[247,1209,1200],{"class":289},[247,1211,1212],{"class":253},"os",[247,1214,338],{"class":289},[247,1216,1217],{"class":249,"line":742},[247,1218,817],{"class":289},[247,1220,1221],{"class":249,"line":756},[247,1222,685],{"emptyLinePlaceholder":684},[247,1224,1225,1228,1231,1234],{"class":249,"line":767},[247,1226,1227],{"class":289},"func",[247,1229,1230],{"class":494}," main",[247,1232,1233],{"class":289},"()",[247,1235,764],{"class":289},[247,1237,1238,1241,1244,1246,1248],{"class":249,"line":783},[247,1239,1240],{"class":273},"    from ",[247,1242,1243],{"class":289},":=",[247,1245,290],{"class":289},[247,1247,202],{"class":256},[247,1249,338],{"class":289},[247,1251,1252,1255,1257,1260,1263,1265,1267,1270,1273,1275],{"class":249,"line":805},[247,1253,1254],{"class":273},"    msg ",[247,1256,1243],{"class":289},[247,1258,1259],{"class":289}," []",[247,1261,1262],{"class":690},"byte",[247,1264,708],{"class":289},[247,1266,296],{"class":289},[247,1268,1269],{"class":256},"From: sender@test.example.com",[247,1271,1272],{"class":273},"\\r\\n",[247,1274,296],{"class":289},[247,1276,1277],{"class":289}," +\n",[247,1279,1280,1283,1286,1288,1290],{"class":249,"line":811},[247,1281,1282],{"class":289},"        \"",[247,1284,1285],{"class":256},"To: qa@test.example.com",[247,1287,1272],{"class":273},[247,1289,296],{"class":289},[247,1291,1277],{"class":289},[247,1293,1294,1296,1298,1300,1302],{"class":249,"line":820},[247,1295,1282],{"class":289},[247,1297,325],{"class":256},[247,1299,1272],{"class":273},[247,1301,296],{"class":289},[247,1303,1277],{"class":289},[247,1305,1306,1308,1310,1312],{"class":249,"line":825},[247,1307,1282],{"class":289},[247,1309,1272],{"class":273},[247,1311,296],{"class":289},[247,1313,1277],{"class":289},[247,1315,1316,1318,1321,1323,1325],{"class":249,"line":843},[247,1317,1282],{"class":289},[247,1319,1320],{"class":256},"Sent with net\u002Fsmtp",[247,1322,1272],{"class":273},[247,1324,296],{"class":289},[247,1326,817],{"class":289},[247,1328,1329],{"class":249,"line":859},[247,1330,685],{"emptyLinePlaceholder":684},[247,1332,1333,1336,1338,1340,1342,1345,1347,1350,1352,1355,1357,1359,1361,1364,1366,1368,1370,1372,1375,1377,1379,1381],{"class":249,"line":875},[247,1334,1335],{"class":273},"    auth ",[247,1337,1243],{"class":289},[247,1339,452],{"class":273},[247,1341,211],{"class":289},[247,1343,1344],{"class":494},"PlainAuth",[247,1346,708],{"class":289},[247,1348,1349],{"class":289},"\"\"",[247,1351,1090],{"class":289},[247,1353,1354],{"class":273}," from",[247,1356,1090],{"class":289},[247,1358,1137],{"class":273},[247,1360,211],{"class":289},[247,1362,1363],{"class":494},"Getenv",[247,1365,708],{"class":289},[247,1367,296],{"class":289},[247,1369,210],{"class":256},[247,1371,296],{"class":289},[247,1373,1374],{"class":289},"),",[247,1376,290],{"class":289},[247,1378,122],{"class":256},[247,1380,296],{"class":289},[247,1382,817],{"class":289},[247,1384,1385,1388,1390,1392,1394,1397,1399,1401,1404,1406,1408,1411,1413,1415,1417,1419,1422,1425,1427,1429,1431,1434,1437],{"class":249,"line":892},[247,1386,1387],{"class":273},"    err ",[247,1389,1243],{"class":289},[247,1391,452],{"class":273},[247,1393,211],{"class":289},[247,1395,1396],{"class":494},"SendMail",[247,1398,708],{"class":289},[247,1400,296],{"class":289},[247,1402,1403],{"class":256},"send.smtp.dev:587",[247,1405,296],{"class":289},[247,1407,1090],{"class":289},[247,1409,1410],{"class":273}," auth",[247,1412,1090],{"class":289},[247,1414,1354],{"class":273},[247,1416,1090],{"class":289},[247,1418,1259],{"class":289},[247,1420,1421],{"class":690},"string",[247,1423,1424],{"class":289},"{",[247,1426,296],{"class":289},[247,1428,206],{"class":256},[247,1430,296],{"class":289},[247,1432,1433],{"class":289},"},",[247,1435,1436],{"class":273}," msg",[247,1438,817],{"class":289},[247,1440,1441,1444,1447,1450,1453],{"class":249,"line":909},[247,1442,1443],{"class":664},"    if",[247,1445,1446],{"class":273}," err ",[247,1448,1449],{"class":289},"!=",[247,1451,1452],{"class":289}," nil",[247,1454,764],{"class":289},[247,1456,1458,1461,1463,1466],{"class":249,"line":1457},19,[247,1459,1460],{"class":494},"        panic",[247,1462,708],{"class":289},[247,1464,1465],{"class":273},"err",[247,1467,817],{"class":289},[247,1469,1471],{"class":249,"line":1470},20,[247,1472,1473],{"class":289},"    }\n",[247,1475,1477],{"class":249,"line":1476},21,[247,1478,1479],{"class":289},"}\n",[116,1481,1482],{},"Or in your framework's mail settings:",[650,1484,1485,1552,1665,1783],{},[238,1486,1491],{"className":1487,"code":1488,"filename":1489,"language":1490,"meta":243,"style":243},"language-dotenv shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","MAIL_MAILER=smtp\nMAIL_HOST=send.smtp.dev\nMAIL_PORT=587\nMAIL_USERNAME=sender@test.example.com\nMAIL_PASSWORD=your-account-password\nMAIL_FROM_ADDRESS=sender@test.example.com\n","Laravel","dotenv",[120,1492,1493,1503,1513,1523,1533,1543],{"__ignoreMap":243},[247,1494,1495,1498,1500],{"class":249,"line":250},[247,1496,1497],{"class":273},"MAIL_MAILER",[247,1499,697],{"class":289},[247,1501,1502],{"class":273},"smtp\n",[247,1504,1505,1508,1510],{"class":249,"line":277},[247,1506,1507],{"class":273},"MAIL_HOST",[247,1509,697],{"class":289},[247,1511,1512],{"class":273},"send.smtp.dev\n",[247,1514,1515,1518,1520],{"class":249,"line":301},[247,1516,1517],{"class":273},"MAIL_PORT",[247,1519,697],{"class":289},[247,1521,1522],{"class":266},"587\n",[247,1524,1525,1528,1530],{"class":249,"line":317},[247,1526,1527],{"class":273},"MAIL_USERNAME",[247,1529,697],{"class":289},[247,1531,1532],{"class":273},"sender@test.example.com\n",[247,1534,1535,1538,1540],{"class":249,"line":413},[247,1536,1537],{"class":273},"MAIL_PASSWORD",[247,1539,697],{"class":289},[247,1541,1542],{"class":273},"your-account-password\n",[247,1544,1545,1548,1550],{"class":249,"line":742},[247,1546,1547],{"class":273},"MAIL_FROM_ADDRESS",[247,1549,697],{"class":289},[247,1551,1532],{"class":273},[238,1553,1556],{"className":916,"code":1554,"filename":1555,"language":919,"meta":243,"style":243},"import os\n\nEMAIL_BACKEND = \"django.core.mail.backends.smtp.EmailBackend\"\nEMAIL_HOST = \"send.smtp.dev\"\nEMAIL_PORT = 587\nEMAIL_USE_TLS = True\nEMAIL_HOST_USER = \"sender@test.example.com\"\nEMAIL_HOST_PASSWORD = os.environ[\"SMTP_PASSWORD\"]\nDEFAULT_FROM_EMAIL = \"sender@test.example.com\"\n","Django",[120,1557,1558,1564,1568,1582,1595,1605,1615,1628,1652],{"__ignoreMap":243},[247,1559,1560,1562],{"class":249,"line":250},[247,1561,665],{"class":664},[247,1563,928],{"class":273},[247,1565,1566],{"class":249,"line":277},[247,1567,685],{"emptyLinePlaceholder":684},[247,1569,1570,1573,1575,1577,1580],{"class":249,"line":301},[247,1571,1572],{"class":273},"EMAIL_BACKEND ",[247,1574,697],{"class":289},[247,1576,290],{"class":289},[247,1578,1579],{"class":256},"django.core.mail.backends.smtp.EmailBackend",[247,1581,338],{"class":289},[247,1583,1584,1587,1589,1591,1593],{"class":249,"line":317},[247,1585,1586],{"class":273},"EMAIL_HOST ",[247,1588,697],{"class":289},[247,1590,290],{"class":289},[247,1592,122],{"class":256},[247,1594,338],{"class":289},[247,1596,1597,1600,1602],{"class":249,"line":413},[247,1598,1599],{"class":273},"EMAIL_PORT ",[247,1601,697],{"class":289},[247,1603,1604],{"class":266}," 587\n",[247,1606,1607,1610,1612],{"class":249,"line":742},[247,1608,1609],{"class":273},"EMAIL_USE_TLS ",[247,1611,697],{"class":289},[247,1613,1614],{"class":289}," True\n",[247,1616,1617,1620,1622,1624,1626],{"class":249,"line":756},[247,1618,1619],{"class":273},"EMAIL_HOST_USER ",[247,1621,697],{"class":289},[247,1623,290],{"class":289},[247,1625,202],{"class":256},[247,1627,338],{"class":289},[247,1629,1630,1633,1635,1637,1639,1641,1643,1645,1647,1649],{"class":249,"line":767},[247,1631,1632],{"class":273},"EMAIL_HOST_PASSWORD ",[247,1634,697],{"class":289},[247,1636,1137],{"class":273},[247,1638,211],{"class":289},[247,1640,1142],{"class":716},[247,1642,977],{"class":289},[247,1644,296],{"class":289},[247,1646,210],{"class":256},[247,1648,296],{"class":289},[247,1650,1651],{"class":289},"]\n",[247,1653,1654,1657,1659,1661,1663],{"class":249,"line":783},[247,1655,1656],{"class":273},"DEFAULT_FROM_EMAIL ",[247,1658,697],{"class":289},[247,1660,290],{"class":289},[247,1662,202],{"class":256},[247,1664,338],{"class":289},[238,1666,1671],{"className":1667,"code":1668,"filename":1669,"language":1670,"meta":243,"style":243},"language-ruby shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","config.action_mailer.delivery_method = :smtp\nconfig.action_mailer.smtp_settings = {\n  address: \"send.smtp.dev\",\n  port: 587,\n  user_name: \"sender@test.example.com\",\n  password: ENV[\"SMTP_PASSWORD\"],\n  authentication: :plain,\n  enable_starttls: true\n}\n","Rails","ruby",[120,1672,1673,1693,1710,1723,1732,1745,1763,1771,1779],{"__ignoreMap":243},[247,1674,1675,1678,1680,1683,1685,1688,1690],{"class":249,"line":250},[247,1676,1677],{"class":273},"config",[247,1679,211],{"class":289},[247,1681,1682],{"class":494},"action_mailer",[247,1684,211],{"class":289},[247,1686,1687],{"class":494},"delivery_method",[247,1689,990],{"class":289},[247,1691,1692],{"class":289}," :smtp\n",[247,1694,1695,1697,1699,1701,1703,1706,1708],{"class":249,"line":277},[247,1696,1677],{"class":273},[247,1698,211],{"class":289},[247,1700,1682],{"class":494},[247,1702,211],{"class":289},[247,1704,1705],{"class":494},"smtp_settings",[247,1707,990],{"class":289},[247,1709,764],{"class":289},[247,1711,1712,1715,1717,1719,1721],{"class":249,"line":301},[247,1713,1714],{"class":289},"  address:",[247,1716,290],{"class":289},[247,1718,122],{"class":256},[247,1720,296],{"class":289},[247,1722,728],{"class":289},[247,1724,1725,1728,1730],{"class":249,"line":317},[247,1726,1727],{"class":289},"  port:",[247,1729,267],{"class":266},[247,1731,728],{"class":289},[247,1733,1734,1737,1739,1741,1743],{"class":249,"line":413},[247,1735,1736],{"class":289},"  user_name:",[247,1738,290],{"class":289},[247,1740,202],{"class":256},[247,1742,296],{"class":289},[247,1744,728],{"class":289},[247,1746,1747,1750,1753,1755,1757,1759,1761],{"class":249,"line":742},[247,1748,1749],{"class":289},"  password:",[247,1751,1752],{"class":273}," ENV[",[247,1754,296],{"class":289},[247,1756,210],{"class":256},[247,1758,296],{"class":289},[247,1760,987],{"class":273},[247,1762,728],{"class":289},[247,1764,1765,1768],{"class":249,"line":756},[247,1766,1767],{"class":289},"  authentication:",[247,1769,1770],{"class":289}," :plain,\n",[247,1772,1773,1776],{"class":249,"line":767},[247,1774,1775],{"class":289},"  enable_starttls:",[247,1777,1778],{"class":750}," true\n",[247,1780,1781],{"class":249,"line":783},[247,1782,1479],{"class":289},[238,1784,1789],{"className":1785,"code":1786,"filename":1787,"language":1788,"meta":243,"style":243},"language-properties shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","spring.mail.host=send.smtp.dev\nspring.mail.port=587\nspring.mail.username=sender@test.example.com\nspring.mail.password=${SMTP_PASSWORD}\nspring.mail.properties.mail.smtp.auth=true\nspring.mail.properties.mail.smtp.starttls.enable=true\nspring.mail.properties.mail.smtp.starttls.required=true\n","Spring Boot","properties",[120,1790,1791,1800,1809,1818,1828,1838,1847],{"__ignoreMap":243},[247,1792,1793,1796,1798],{"class":249,"line":250},[247,1794,1795],{"class":716},"spring.mail.host",[247,1797,697],{"class":289},[247,1799,1512],{"class":273},[247,1801,1802,1805,1807],{"class":249,"line":277},[247,1803,1804],{"class":716},"spring.mail.port",[247,1806,697],{"class":289},[247,1808,1522],{"class":273},[247,1810,1811,1814,1816],{"class":249,"line":301},[247,1812,1813],{"class":716},"spring.mail.username",[247,1815,697],{"class":289},[247,1817,1532],{"class":273},[247,1819,1820,1823,1825],{"class":249,"line":317},[247,1821,1822],{"class":716},"spring.mail.password",[247,1824,697],{"class":289},[247,1826,1827],{"class":273},"${SMTP_PASSWORD}\n",[247,1829,1830,1833,1835],{"class":249,"line":413},[247,1831,1832],{"class":716},"spring.mail.properties.mail.smtp.auth",[247,1834,697],{"class":289},[247,1836,1837],{"class":273},"true\n",[247,1839,1840,1843,1845],{"class":249,"line":742},[247,1841,1842],{"class":716},"spring.mail.properties.mail.smtp.starttls.enable",[247,1844,697],{"class":289},[247,1846,1837],{"class":273},[247,1848,1849,1852,1854],{"class":249,"line":756},[247,1850,1851],{"class":716},"spring.mail.properties.mail.smtp.starttls.required",[247,1853,697],{"class":289},[247,1855,1837],{"class":273},[116,1857,1858,1859,1862,1863,1866,1867,211],{},"Some frameworks can send a test email for you. Django has ",[120,1860,1861],{},"python manage.py sendtestemail qa@test.example.com",". In Laravel, run ",[120,1864,1865],{},"php artisan tinker",", then ",[120,1868,1869],{},"Mail::raw('Sent with Laravel', fn ($message) => $message->to('qa@test.example.com')->subject('SMTP test'));",[1871,1872,1873],"warning",{},[116,1874,1875,1876,1879],{},"Test runners often replace the mailer. Django's test runner switches to an in-memory backend, and Rails sets ",[120,1877,1878],{},"delivery_method = :test"," in the test environment. Mail sent from those tests never reaches SMTP, so set the SMTP settings on the server your end-to-end tests run against.",[125,1881,1883],{"id":1882},"read-it-back","Read It Back",[116,1885,1886,1887,1891,1892,1898],{},"Open the recipient account in ",[194,1888,1890],{"href":1889},"\u002Fmail\u002Faccounts\u002F","Mail",", or log in to ",[194,1893,1897],{"href":1894,"target":197,"rel":1895},"https:\u002F\u002Fwebmail.smtp.dev",[1896],"nofollow","webmail.smtp.dev"," with the account's address and password.",[116,1900,1901,1902,1906,1907,348],{},"To script it, use the ",[194,1903,1905],{"href":1904},"\u002Fdocs\u002Fapi\u002F","REST API",". List the inbox, newest first, then fetch a message by ",[120,1908,1909],{},"id",[238,1911,1913],{"className":240,"code":1912,"language":242,"meta":243,"style":243},"curl \"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{accountId}\u002Fmailboxes\u002F{mailboxId}\u002Fmessages\" \\\n  -H \"X-API-KEY: $SMTP_DEV_API_KEY\"\n\ncurl \"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{accountId}\u002Fmailboxes\u002F{mailboxId}\u002Fmessages\u002F{id}\u002Fsource\" \\\n  -H \"X-API-KEY: $SMTP_DEV_API_KEY\"\n",[120,1914,1915,1928,1943,1947,1960],{"__ignoreMap":243},[247,1916,1917,1919,1921,1924,1926],{"class":249,"line":250},[247,1918,341],{"class":253},[247,1920,290],{"class":289},[247,1922,1923],{"class":256},"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{accountId}\u002Fmailboxes\u002F{mailboxId}\u002Fmessages",[247,1925,296],{"class":289},[247,1927,274],{"class":273},[247,1929,1930,1933,1935,1938,1941],{"class":249,"line":277},[247,1931,1932],{"class":256},"  -H",[247,1934,290],{"class":289},[247,1936,1937],{"class":256},"X-API-KEY: ",[247,1939,1940],{"class":273},"$SMTP_DEV_API_KEY",[247,1942,338],{"class":289},[247,1944,1945],{"class":249,"line":301},[247,1946,685],{"emptyLinePlaceholder":684},[247,1948,1949,1951,1953,1956,1958],{"class":249,"line":317},[247,1950,341],{"class":253},[247,1952,290],{"class":289},[247,1954,1955],{"class":256},"https:\u002F\u002Fapi.smtp.dev\u002Faccounts\u002F{accountId}\u002Fmailboxes\u002F{mailboxId}\u002Fmessages\u002F{id}\u002Fsource",[247,1957,296],{"class":289},[247,1959,274],{"class":273},[247,1961,1962,1964,1966,1968,1970],{"class":249,"line":413},[247,1963,1932],{"class":256},[247,1965,290],{"class":289},[247,1967,1937],{"class":256},[247,1969,1940],{"class":273},[247,1971,338],{"class":289},[116,1973,534,1974,1977,1978,1982],{},[120,1975,1976],{},"\u002Fsource"," endpoint returns the message exactly as it arrived. The ",[194,1979,1981],{"href":1980},"\u002Fdocs\u002Fguides\u002Femail-testing-api\u002F","API quickstart"," covers finding the account and mailbox ids.",[116,1984,1985],{},"curl reads mail over IMAP and POP3 too, with the recipient's own credentials:",[238,1987,1989],{"className":240,"code":1988,"language":242,"meta":243,"style":243},"# UIDs of the messages in the inbox\ncurl \"imaps:\u002F\u002Fimap.smtp.dev\u002FINBOX\" --request \"UID SEARCH ALL\" \\\n  --user \"qa@test.example.com:$QA_PASSWORD\"\n\n# one message, raw\ncurl \"imaps:\u002F\u002Fimap.smtp.dev\u002FINBOX;UID=1\" --user \"qa@test.example.com:$QA_PASSWORD\"\n\n# the first message over POP3\ncurl \"pop3s:\u002F\u002Fpop.smtp.dev\u002F1\" --user \"qa@test.example.com:$QA_PASSWORD\"\n",[120,1990,1991,1997,2020,2034,2038,2043,2065,2069,2074],{"__ignoreMap":243},[247,1992,1993],{"class":249,"line":250},[247,1994,1996],{"class":1995},"sHwdD","# UIDs of the messages in the inbox\n",[247,1998,1999,2001,2003,2006,2008,2011,2013,2016,2018],{"class":249,"line":277},[247,2000,341],{"class":253},[247,2002,290],{"class":289},[247,2004,2005],{"class":256},"imaps:\u002F\u002Fimap.smtp.dev\u002FINBOX",[247,2007,296],{"class":289},[247,2009,2010],{"class":256}," --request",[247,2012,290],{"class":289},[247,2014,2015],{"class":256},"UID SEARCH ALL",[247,2017,296],{"class":289},[247,2019,274],{"class":273},[247,2021,2022,2024,2026,2029,2032],{"class":249,"line":301},[247,2023,381],{"class":256},[247,2025,290],{"class":289},[247,2027,2028],{"class":256},"qa@test.example.com:",[247,2030,2031],{"class":273},"$QA_PASSWORD",[247,2033,338],{"class":289},[247,2035,2036],{"class":249,"line":317},[247,2037,685],{"emptyLinePlaceholder":684},[247,2039,2040],{"class":249,"line":413},[247,2041,2042],{"class":1995},"# one message, raw\n",[247,2044,2045,2047,2049,2052,2054,2057,2059,2061,2063],{"class":249,"line":742},[247,2046,341],{"class":253},[247,2048,290],{"class":289},[247,2050,2051],{"class":256},"imaps:\u002F\u002Fimap.smtp.dev\u002FINBOX;UID=1",[247,2053,296],{"class":289},[247,2055,2056],{"class":256}," --user",[247,2058,290],{"class":289},[247,2060,2028],{"class":256},[247,2062,2031],{"class":273},[247,2064,338],{"class":289},[247,2066,2067],{"class":249,"line":756},[247,2068,685],{"emptyLinePlaceholder":684},[247,2070,2071],{"class":249,"line":767},[247,2072,2073],{"class":1995},"# the first message over POP3\n",[247,2075,2076,2078,2080,2083,2085,2087,2089,2091,2093],{"class":249,"line":783},[247,2077,341],{"class":253},[247,2079,290],{"class":289},[247,2081,2082],{"class":256},"pop3s:\u002F\u002Fpop.smtp.dev\u002F1",[247,2084,296],{"class":289},[247,2086,2056],{"class":256},[247,2088,290],{"class":289},[247,2090,2028],{"class":256},[247,2092,2031],{"class":273},[247,2094,338],{"class":289},[125,2096,2098],{"id":2097},"what-to-check","What to Check",[2100,2101,2102,2124,2130,2140,2151],"ul",{},[2103,2104,2105,2109,2110,2112,2113,2112,2116,2119,2120,2123],"li",{},[2106,2107,2108],"strong",{},"Headers."," ",[120,2111,982],{},", ",[120,2114,2115],{},"Reply-To",[120,2117,2118],{},"Date",", and ",[120,2121,2122],{},"Message-ID"," are present and say what you intended.",[2103,2125,2126,2129],{},[2106,2127,2128],{},"Both parts."," A multipart message has a plain text and an HTML part. Read both. The plain text part is often the one nobody looked at.",[2103,2131,2132,2135,2136,2139],{},[2106,2133,2134],{},"Links."," They point at the right environment, with absolute URLs. A ",[120,2137,2138],{},"localhost"," link in a staging email is a common bug.",[2103,2141,2142,2145,2146,2150],{},[2106,2143,2144],{},"Attachments."," Filename, content type, and size match what the app attached. ",[194,2147,2149],{"href":2148},"\u002Fdocs\u002Fguides\u002Femail-size-limits\u002F","Size limits"," covers how encoding grows them.",[2103,2152,2153,2156],{},[2106,2154,2155],{},"Encoding."," Non-ASCII names and subjects arrive intact.",[125,2158,2160],{"id":2159},"when-it-fails","When It Fails",[130,2162,2163,2173],{},[133,2164,2165],{},[136,2166,2167,2170],{},[139,2168,2169],{},"Symptom",[139,2171,2172],{},"Cause",[146,2174,2175,2188,2196,2205,2213],{},[136,2176,2177,2185],{},[151,2178,2179,2181,2182],{},[120,2180,618],{}," after ",[120,2183,2184],{},"AUTH",[151,2186,2187],{},"Wrong password, or the username isn't the full address",[136,2189,2190,2193],{},[151,2191,2192],{},"Recipient refused",[151,2194,2195],{},"The address isn't an account in your sandbox",[136,2197,2198,2202],{},[151,2199,2200],{},[120,2201,638],{},[151,2203,2204],{},"The encoded message is over 20 MB",[136,2206,2207,2210],{},[151,2208,2209],{},"Connection times out",[151,2211,2212],{},"The network blocks outbound SMTP. Some networks block port 587, most cloud providers block 25",[136,2214,2215,2218],{},[151,2216,2217],{},"TLS error right after connecting",[151,2219,2220],{},"The client expects implicit TLS (port 465 settings). Use STARTTLS on 587",[125,2222,2224],{"id":2223},"testing-your-own-server","Testing Your Own Server",[116,2226,2227,2228,2232,2233,2237],{},"swaks, curl, and openssl work against any SMTP server: change the host, port, and credentials. The sandbox is useful as the far end. Send through your own server or provider to an address on a ",[194,2229,2231],{"href":2230},"\u002Fdocs\u002Fsetup\u002Fdomain\u002F","domain whose MX points at mx.smtp.dev",", and the message arrives with ",[194,2234,2236],{"href":2235},"\u002Fdocs\u002Fguides\u002Fspf-dkim-dmarc\u002F","SPF, DKIM, and DMARC results"," next to the raw source.",[2239,2240,2241],"style",{},"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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":243,"searchDepth":277,"depth":277,"links":2243},[2244,2245,2250,2251,2252,2253,2254],{"id":127,"depth":277,"text":128},{"id":220,"depth":277,"text":221,"children":2246},[2247,2248,2249],{"id":225,"depth":301,"text":225},{"id":341,"depth":301,"text":341},{"id":429,"depth":301,"text":430},{"id":644,"depth":277,"text":645},{"id":1882,"depth":277,"text":1883},{"id":2097,"depth":277,"text":2098},{"id":2159,"depth":277,"text":2160},{"id":2223,"depth":277,"text":2224},"Send a test email through send.smtp.dev with swaks, curl, openssl, or your app's mailer, then read it back over IMAP, POP3, or the REST API.","md",{},{"title":49},{"title":111,"description":2255},"nPs-GyOT6sXrT_ehtNmjTJhiychhQGoQSvCLQP0Jw48",[2262,2264],{"title":40,"path":41,"stem":42,"description":2263,"children":-1},"HTML, plain text, and raw source views. SPF\u002FDKIM\u002FDMARC results on received messages, deliverability audits, and a composer for test emails.",{"title":53,"path":54,"stem":55,"description":2265,"children":-1},"Create a test inbox over REST, send it a message, and read the subject, body, and SPF, DKIM, and DMARC results as JSON. No SDK.",1794185300803]