[{"data":1,"prerenderedAt":536},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Femails\u002Fpre-send-checks":221,"\u002Fdocs\u002Femails\u002Fpre-send-checks-surround":531},[4],{"title":5,"path":6,"stem":7,"children":8,"page":22},"Docs","\u002Fdocs","docs",[9,23,36,65,90,123,136,191,204],{"title":10,"path":11,"stem":12,"children":13,"page":22},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[14,18],{"title":15,"path":16,"stem":17},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F1.quickstart",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002F1.getting-started\u002F2.concepts",false,{"title":24,"path":25,"stem":26,"children":27,"page":22},"Sending domain","\u002Fdocs\u002Fdomains","docs\u002F2.domains",[28,32],{"title":29,"path":30,"stem":31},"Add your domain","\u002Fdocs\u002Fdomains\u002Fadd-your-domain","docs\u002F2.domains\u002F1.add-your-domain",{"title":33,"path":34,"stem":35},"Troubleshooting","\u002Fdocs\u002Fdomains\u002Ftroubleshooting","docs\u002F2.domains\u002F2.troubleshooting",{"title":37,"path":38,"stem":39,"children":40,"page":22},"Audience","\u002Fdocs\u002Faudience","docs\u002F3.audience",[41,45,49,53,57,61],{"title":42,"path":43,"stem":44},"Contacts","\u002Fdocs\u002Faudience\u002Fcontacts","docs\u002F3.audience\u002F1.contacts",{"title":46,"path":47,"stem":48},"Import contacts","\u002Fdocs\u002Faudience\u002Fimport","docs\u002F3.audience\u002F2.import",{"title":50,"path":51,"stem":52},"Lists","\u002Fdocs\u002Faudience\u002Flists","docs\u002F3.audience\u002F3.lists",{"title":54,"path":55,"stem":56},"Segments","\u002Fdocs\u002Faudience\u002Fsegments","docs\u002F3.audience\u002F4.segments",{"title":58,"path":59,"stem":60},"Signup forms","\u002Fdocs\u002Faudience\u002Fsignup-forms","docs\u002F3.audience\u002F5.signup-forms",{"title":62,"path":63,"stem":64},"Unsubscribe and preferences","\u002Fdocs\u002Faudience\u002Funsubscribe-and-preferences","docs\u002F3.audience\u002F6.unsubscribe-and-preferences",{"title":66,"path":67,"stem":68,"children":69,"page":22},"Sending emails","\u002Fdocs\u002Femails","docs\u002F4.emails",[70,74,78,82,86],{"title":71,"path":72,"stem":73},"Writing emails","\u002Fdocs\u002Femails\u002Fwriting-emails","docs\u002F4.emails\u002F1.writing-emails",{"title":75,"path":76,"stem":77},"Campaigns","\u002Fdocs\u002Femails\u002Fcampaigns","docs\u002F4.emails\u002F2.campaigns",{"title":79,"path":80,"stem":81},"Flows","\u002Fdocs\u002Femails\u002Fflows","docs\u002F4.emails\u002F3.flows",{"title":83,"path":84,"stem":85},"Transactional emails","\u002Fdocs\u002Femails\u002Ftransactional","docs\u002F4.emails\u002F4.transactional",{"title":87,"path":88,"stem":89},"Pre-send checks","\u002Fdocs\u002Femails\u002Fpre-send-checks","docs\u002F4.emails\u002F5.pre-send-checks",{"title":91,"path":92,"stem":93,"children":94,"page":22},"Deliverability","\u002Fdocs\u002Fdeliverability","docs\u002F5.deliverability",[95,99,103,107,111,115,119],{"title":96,"path":97,"stem":98},"Overview","\u002Fdocs\u002Fdeliverability\u002Foverview","docs\u002F5.deliverability\u002F1.overview",{"title":100,"path":101,"stem":102},"Warm-up","\u002Fdocs\u002Fdeliverability\u002Fwarm-up","docs\u002F5.deliverability\u002F2.warm-up",{"title":104,"path":105,"stem":106},"Contacts under review","\u002Fdocs\u002Fdeliverability\u002Fimported-contacts","docs\u002F5.deliverability\u002F3.imported-contacts",{"title":108,"path":109,"stem":110},"Reputation","\u002Fdocs\u002Fdeliverability\u002Freputation","docs\u002F5.deliverability\u002F4.reputation",{"title":112,"path":113,"stem":114},"Bounces and suppressions","\u002Fdocs\u002Fdeliverability\u002Fbounces-and-suppressions","docs\u002F5.deliverability\u002F5.bounces-and-suppressions",{"title":116,"path":117,"stem":118},"Deliverability report","\u002Fdocs\u002Fdeliverability\u002Fdeliverability-report","docs\u002F5.deliverability\u002F6.deliverability-report",{"title":120,"path":121,"stem":122},"Account review","\u002Fdocs\u002Fdeliverability\u002Faccount-review","docs\u002F5.deliverability\u002F7.account-review",{"title":124,"path":125,"stem":126,"children":127,"page":22},"AI","\u002Fdocs\u002Fai","docs\u002F6.ai",[128,132],{"title":129,"path":130,"stem":131},"Assistant","\u002Fdocs\u002Fai\u002Fassistant","docs\u002F6.ai\u002F1.assistant",{"title":133,"path":134,"stem":135},"Connect your agent (MCP)","\u002Fdocs\u002Fai\u002Fmcp","docs\u002F6.ai\u002F2.mcp",{"title":137,"path":138,"stem":139,"children":140,"page":22},"API reference","\u002Fdocs\u002Fapi","docs\u002F7.api",[141,145,149,153,156,160,164,168,172,176,180,183,187],{"title":142,"path":143,"stem":144},"Introduction","\u002Fdocs\u002Fapi\u002Fintroduction","docs\u002F7.api\u002F01.introduction",{"title":146,"path":147,"stem":148},"Emails","\u002Fdocs\u002Fapi\u002Femails","docs\u002F7.api\u002F02.emails",{"title":150,"path":151,"stem":152},"Templates","\u002Fdocs\u002Fapi\u002Ftemplates","docs\u002F7.api\u002F03.templates",{"title":42,"path":154,"stem":155},"\u002Fdocs\u002Fapi\u002Fcontacts","docs\u002F7.api\u002F04.contacts",{"title":157,"path":158,"stem":159},"Events","\u002Fdocs\u002Fapi\u002Fevents","docs\u002F7.api\u002F05.events",{"title":161,"path":162,"stem":163},"Lists and segments","\u002Fdocs\u002Fapi\u002Flists-and-segments","docs\u002F7.api\u002F06.lists-and-segments",{"title":165,"path":166,"stem":167},"Campaigns and flows","\u002Fdocs\u002Fapi\u002Fcampaigns-and-flows","docs\u002F7.api\u002F07.campaigns-and-flows",{"title":169,"path":170,"stem":171},"Domains and suppressions","\u002Fdocs\u002Fapi\u002Fdomains-and-suppressions","docs\u002F7.api\u002F08.domains-and-suppressions",{"title":173,"path":174,"stem":175},"Spaces","\u002Fdocs\u002Fapi\u002Fspaces","docs\u002F7.api\u002F09.spaces",{"title":177,"path":178,"stem":179},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002F7.api\u002F10.webhooks",{"title":58,"path":181,"stem":182},"\u002Fdocs\u002Fapi\u002Fsignup-forms","docs\u002F7.api\u002F11.signup-forms",{"title":184,"path":185,"stem":186},"Test spaces","\u002Fdocs\u002Fapi\u002Ftest-spaces","docs\u002F7.api\u002F12.test-spaces",{"title":188,"path":189,"stem":190},"Checks","\u002Fdocs\u002Fapi\u002Fchecks","docs\u002F7.api\u002F13.checks",{"title":192,"path":193,"stem":194,"children":195,"page":22},"Account & billing","\u002Fdocs\u002Faccount","docs\u002F8.account",[196,200],{"title":197,"path":198,"stem":199},"Spaces and members","\u002Fdocs\u002Faccount\u002Fspaces-and-members","docs\u002F8.account\u002F1.spaces-and-members",{"title":201,"path":202,"stem":203},"Billing","\u002Fdocs\u002Faccount\u002Fbilling","docs\u002F8.account\u002F2.billing",{"title":205,"path":206,"stem":207,"children":208,"page":22},"Guides","\u002Fdocs\u002Fguides","docs\u002F9.guides",[209,213,217],{"title":210,"path":211,"stem":212},"Welcome new subscribers","\u002Fdocs\u002Fguides\u002Fwelcome-sequence","docs\u002F9.guides\u002F1.welcome-sequence",{"title":214,"path":215,"stem":216},"Onboarding with events","\u002Fdocs\u002Fguides\u002Fonboarding-with-events","docs\u002F9.guides\u002F2.onboarding-with-events",{"title":218,"path":219,"stem":220},"Migrate from another tool","\u002Fdocs\u002Fguides\u002Fmigrate-from-another-tool","docs\u002F9.guides\u002F3.migrate-from-another-tool",{"id":222,"title":87,"body":223,"description":524,"extension":525,"links":526,"meta":527,"navigation":528,"path":88,"seo":529,"stem":89,"__hash__":530},"docs\u002Fdocs\u002F4.emails\u002F5.pre-send-checks.md",{"type":224,"value":225,"toc":510},"minimark",[226,230,235,271,275,278,282,287,350,353,357,416,420,486,489,493],[227,228,229],"p",{},"Kula checks every campaign, flow email and transactional template for mistakes that hurt delivery or look careless: an empty first name, a broken link, an email Gmail cuts in half. The checks are fixed rules, run by Kula. Nobody reads your emails.",[231,232,234],"h2",{"id":233},"where-you-see-them","Where you see them",[236,237,238,249,260],"ul",{},[239,240,241,244,245,248],"li",{},[242,243,188],"strong",{}," panel next to the editor of a campaign, a flow email or a template. It runs when you save, and ",[242,246,247],{},"Check again"," runs it on demand.",[239,250,251,252,255,256,259],{},"Before a campaign leaves: if something was found, Kula lists it with ",[242,253,254],{},"Fix first"," and ",[242,257,258],{},"Send anyway",".",[239,261,262,265,266,270],{},[242,263,264],{},"Ask the assistant to fix"," hands the findings to the ",[267,268,269],"a",{"href":130},"assistant",", which corrects the draft and tells you what it left.",[231,272,274],{"id":273},"warnings-never-stop-you","Warnings never stop you",[227,276,277],{},"Every finding is a warning: you can always send. One exception: a link that Google flags as dangerous (malware, phishing). A campaign, flow or template with such a link can't be scheduled, activated or published until the link goes. A scheduled campaign is checked again when it leaves.",[231,279,281],{"id":280},"what-is-checked","What is checked",[283,284,286],"h3",{"id":285},"variables","Variables",[288,289,290,303],"table",{},[291,292,293],"thead",{},[294,295,296,300],"tr",{},[297,298,299],"th",{},"Finding",[297,301,302],{},"Why it matters",[304,305,306,323,339],"tbody",{},[294,307,308,312],{},[309,310,311],"td",{},"Missing data",[309,313,314,315,319,320],{},"The email uses ",[316,317,318],"code",{},"{{ contact.first_name }}"," without a default, and at least 1% of the recipients have no first name: they read \"Hi ,\". Add a default: ",[316,321,322],{},"{{ contact.first_name | default: \"there\" }}",[294,324,325,328],{},[309,326,327],{},"Unknown variable",[309,329,330,331,334,335,338],{},"No contact of the space has this attribute, often a typo (",[316,332,333],{},"frist_name","). ",[316,336,337],{},"data.*"," only exists in transactional emails",[294,340,341,344],{},[309,342,343],{},"Invalid variable",[309,345,346,349],{},[316,347,348],{},"{{ ... }}"," that isn't a valid variable is sent as written",[227,351,352],{},"An email without variables, or whose variables all have a default, raises nothing here.",[283,354,356],{"id":355},"content","Content",[288,358,359,367],{},[291,360,361],{},[294,362,363,365],{},[297,364,299],{},[297,366,302],{},[304,368,369,377,385,393,408],{},[294,370,371,374],{},[309,372,373],{},"Too heavy for Gmail",[309,375,376],{},"Over about 100 KB once sent, Gmail cuts the email and hides the rest, unsubscribe link included",[294,378,379,382],{},[309,380,381],{},"Mostly images",[309,383,384],{},"Little text and some images: spam filters distrust it, and readers who block images see nothing",[294,386,387,390],{},[309,388,389],{},"Missing alternative text",[309,391,392],{},"Shown instead of the image when images are blocked",[294,394,395,405],{},[309,396,397,398,401,402],{},"Subject in capitals, ",[316,399,400],{},"!!!"," or ",[316,403,404],{},"$$$",[309,406,407],{},"Spam filters and readers distrust it",[294,409,410,413],{},[309,411,412],{},"Long subject",[309,414,415],{},"Inboxes cut subjects after about 60 characters",[283,417,419],{"id":418},"links","Links",[288,421,422,430],{},[291,423,424],{},[294,425,426,428],{},[297,427,299],{},[297,429,302],{},[304,431,432,440,448,456,464,478],{},[294,433,434,437],{},[309,435,436],{},"Broken link",[309,438,439],{},"The page answers an error (404, 410, 5xx) or the domain doesn't exist",[294,441,442,445],{},[309,443,444],{},"Link shortener",[309,446,447],{},"bit.ly and the like are shared by spammers, so filters distrust them",[294,449,450,453],{},[309,451,452],{},"Misleading link",[309,454,455],{},"The text shows one address and the link goes to another: a phishing pattern",[294,457,458,461],{},[309,459,460],{},"Link to an IP address",[309,462,463],{},"Instead of a domain: a spam pattern",[294,465,466,469],{},[309,467,468],{},"Insecure link",[309,470,471,474,475],{},[316,472,473],{},"http:\u002F\u002F"," instead of ",[316,476,477],{},"https:\u002F\u002F",[294,479,480,483],{},[309,481,482],{},"Dangerous link",[309,484,485],{},"Flagged by Google (Web Risk) as malware or phishing. Blocks sending",[227,487,488],{},"Kula checks up to 30 links per email. A site that refuses robots, or doesn't answer in time, is never reported as broken: the panel says how many links couldn't be checked.",[231,490,492],{"id":491},"related","Related",[494,495,496,504],"card-group",{},[497,498,501],"card",{"icon":499,"title":500,"to":189},"i-mingcute-code-fill","Checks API",[227,502,503],{},"Run the checks from your own editor",[497,505,507],{"icon":506,"title":71,"to":72},"i-mingcute-edit-2-fill",[227,508,509],{},"Editor, design and variables",{"title":511,"searchDepth":512,"depth":513,"links":514},"",1,2,[515,516,517,523],{"id":233,"depth":513,"text":234},{"id":273,"depth":513,"text":274},{"id":280,"depth":513,"text":281,"children":518},[519,521,522],{"id":285,"depth":520,"text":286},3,{"id":355,"depth":520,"text":356},{"id":418,"depth":520,"text":419},{"id":491,"depth":513,"text":492},"What Kula checks in an email before it goes out, and what to do about it","md",null,{},true,{"title":87,"description":524},"gDnMi70FLQwOJ2tqR4rKj8bCcN1yOddQMyi5C1Re4BE",[532,534],{"title":83,"path":84,"stem":85,"description":533,"children":-1},"Send password resets, receipts and notifications from your app",{"title":96,"path":97,"stem":98,"description":535,"children":-1},"What Kula enforces and what is up to you",1792417153084]