{"id":27574,"date":"2026-07-28T16:51:27","date_gmt":"2026-07-28T07:51:27","guid":{"rendered":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/?page_id=27574"},"modified":"2026-07-28T18:49:15","modified_gmt":"2026-07-28T09:49:15","slug":"spfdkimdmarc","status":"publish","type":"page","link":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/","title":{"rendered":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u3000\u8a2d\u5b9a\u30ac\u30a4\u30c9"},"content":{"rendered":"\n<style>\n  #dsg-widget, #dsg-widget *{box-sizing:border-box;}\n  #dsg-widget{\n    --dsg-main:#162a87; --dsg-bg:#f4f6f9; --dsg-card:#ffffff;\n    --dsg-text:#1f2937; --dsg-sub:#6b7280; --dsg-border:#e2e6ec; --dsg-ok:#1e9e5a; --dsg-warn:#b45309; --dsg-warn-bg:#fff7ed; --dsg-warn-border:#fdba74;\n    margin:0;padding:24px 0;font-family:\"Hiragino Kaku Gothic ProN\",\"Yu Gothic\",Meiryo,sans-serif;background:var(--dsg-bg);color:var(--dsg-text);line-height:1.7;\n  }\n  #dsg-widget .dsg-wrap{max-width:760px;margin:0 auto;padding:8px 20px 40px;}\n  #dsg-widget header.dsg-top{text-align:center;margin-bottom:28px;}\n  #dsg-widget header.dsg-top h1{font-size:1.5rem;margin:0 0 6px;color:var(--dsg-main);}\n  #dsg-widget header.dsg-top p{color:var(--dsg-sub);font-size:0.9rem;margin:0;}\n  #dsg-widget .dsg-progress{display:flex;gap:8px;justify-content:center;margin:20px 0 32px;flex-wrap:wrap;}\n  #dsg-widget .dsg-chip{padding:6px 14px;border-radius:999px;border:1px solid var(--dsg-border);background:#fff;font-size:0.85rem;color:var(--dsg-sub);}\n  #dsg-widget .dsg-chip.dsg-done{background:#e7f7ee;border-color:#bfe8cf;color:var(--dsg-ok);font-weight:bold;}\n  #dsg-widget .dsg-card{background:var(--dsg-card);border:1px solid var(--dsg-border);border-radius:14px;padding:28px;box-shadow:0 1px 3px rgba(0,0,0,0.04);}\n  #dsg-widget .dsg-card h2{margin-top:0;font-size:1.2rem;}\n  #dsg-widget .dsg-card h3{font-size:1.02rem;margin:22px 0 8px;}\n  #dsg-widget .dsg-btn-grid{display:grid;gap:12px;margin-top:18px;}\n  #dsg-widget .dsg-btn-grid.dsg-cols-2{grid-template-columns:1fr 1fr;}\n  #dsg-widget button.dsg-opt{display:block;width:100%;text-align:left;padding:16px 18px;border-radius:10px;border:1.5px solid var(--dsg-border);background:#fff;font-size:1rem;cursor:pointer;transition:all .15s;color:var(--dsg-text);}\n  #dsg-widget button.dsg-opt:hover{border-color:var(--dsg-main);background:#f0f7ff;}\n  #dsg-widget button.dsg-opt .dsg-sub{display:block;font-size:0.8rem;color:var(--dsg-sub);margin-top:4px;font-weight:normal;}\n  #dsg-widget button.dsg-opt.dsg-done-mark::after{content:\"\u2714 \u8a2d\u5b9a\u6e08\u307f\";float:right;color:var(--dsg-ok);font-size:0.8rem;}\n  #dsg-widget .dsg-actions{margin-top:26px;display:flex;gap:10px;flex-wrap:wrap;}\n  #dsg-widget .dsg-primary{background:var(--dsg-main);color:#fff;border:none;padding:12px 22px;border-radius:8px;font-size:0.95rem;cursor:pointer;font-weight:bold;}\n  #dsg-widget .dsg-primary:hover{background:#0e2383;}\n  #dsg-widget .dsg-ghost{background:none;border:1.5px solid var(--dsg-border);color:var(--dsg-sub);padding:12px 20px;border-radius:8px;cursor:pointer;font-size:0.9rem;}\n  #dsg-widget .dsg-ghost:hover{border-color:var(--dsg-sub);color:var(--dsg-text);}\n  #dsg-widget .dsg-record-box{background:#0f1e2e;color:#d7e6f5;border-radius:10px;padding:16px 18px;font-family:Consolas,\"SF Mono\",monospace;font-size:0.85rem;overflow-x:auto;white-space:pre-wrap;word-break:break-all;margin:10px 0;}\n  #dsg-widget .dsg-field-row{display:grid;grid-template-columns:120px 1fr;gap:8px;padding:6px 0;border-bottom:1px dashed var(--dsg-border);font-size:0.92rem;}\n  #dsg-widget .dsg-field-row:last-child{border-bottom:none;}\n  #dsg-widget .dsg-field-row .dsg-k{color:var(--dsg-sub);font-weight:bold;}\n  #dsg-widget .dsg-field-row .dsg-v{font-family:Consolas,\"SF Mono\",monospace;word-break:break-all;}\n  #dsg-widget label.dsg-inputlabel{display:block;font-size:0.85rem;color:var(--dsg-sub);margin:14px 0 4px;}\n  #dsg-widget label.dsg-inputlabel-lg{display:block;font-size:1.05rem;font-weight:bold;color:var(--dsg-text);margin:18px 0 6px;}\n  #dsg-widget input[type=text]{width:100%;padding:9px 10px;border:1.5px solid var(--dsg-border);border-radius:8px;font-size:0.9rem;}\n  #dsg-widget .dsg-alert{background:var(--dsg-warn-bg);border:1.5px solid var(--dsg-warn-border);color:var(--dsg-warn);border-radius:10px;padding:14px 16px;font-size:0.88rem;margin-top:18px;}\n  #dsg-widget .dsg-alert b{display:block;margin-bottom:4px;}\n  #dsg-widget .dsg-form-error{background:#fdecec;border:1.5px solid #f3b4b4;color:#b91c1c;border-radius:8px;padding:10px 14px;font-size:0.9rem;margin:12px 0;}\n  #dsg-widget ol.dsg-steps{padding-left:1.2em;margin:12px 0;list-style-type:decimal !important;list-style-position:outside !important;}\n  #dsg-widget ol.dsg-steps li{margin-bottom:8px;display:list-item !important;}\n  #dsg-widget .dsg-note{font-size:0.85rem;color:var(--dsg-sub);margin-top:6px;}\n  #dsg-widget .dsg-badge{display:inline-block;background:#e8f0fe;color:var(--dsg-main);border-radius:6px;padding:2px 8px;font-size:0.75rem;font-weight:bold;margin-right:6px;}\n  #dsg-widget .dsg-celebrate{text-align:center;padding:40px 10px;}\n  #dsg-widget .dsg-celebrate .dsg-big{font-size:2rem;margin-bottom:10px;}\n  #dsg-widget footer.dsg-foot{text-align:center;color:var(--dsg-sub);font-size:0.78rem;margin-top:40px;}\n  #dsg-widget .dsg-copy-row{display:flex;align-items:center;gap:10px;}\n  #dsg-widget .dsg-copy-row .dsg-record-box{flex:1;margin:0;}\n  #dsg-widget .dsg-copy-btn{flex-shrink:0;background:#eef2f7;border:1.5px solid var(--dsg-border);color:var(--dsg-main);border-radius:8px;padding:8px 14px;font-size:0.82rem;cursor:pointer;white-space:nowrap;}\n  #dsg-widget .dsg-copy-btn:hover{background:#e0ebf7;}\n  #dsg-widget .dsg-field-row-copy{display:flex;align-items:center;gap:10px;}\n  #dsg-widget .dsg-field-row-copy .dsg-v{flex:1;min-width:0;font-family:Consolas,\"SF Mono\",monospace;word-break:break-all;}\n  #dsg-widget .dsg-spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,0.4);border-top-color:#fff;border-radius:50%;margin-right:8px;vertical-align:-2px;animation:dsg-spin .7s linear infinite;}\n  @keyframes dsg-spin{to{transform:rotate(360deg);}}\n<\/style>\n\n<div id=\"dsg-widget\">\n<div class=\"dsg-wrap\">\n  <div class=\"dsg-progress\" id=\"dsg-progress\"><\/div>\n  <div class=\"dsg-card\" id=\"dsg-card\"><\/div>\n  <footer class=\"dsg-foot\">\n    \u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e\u72b6\u614b\u3068\u7570\u306a\u308b\u5834\u5408\u306f\u5404\u793e\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\u3082\u5408\u308f\u305b\u3066\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002\n  <\/footer>\n<\/div>\n<\/div>\n\n<script>\n(function(){\nconst RECORDS = {\n  spf: { label: \"SPF\", fullName: \"SPF\uff08\u9001\u4fe1\u5143IP\u30a2\u30c9\u30ec\u30b9\u8a8d\u8a3c\uff09\" },\n  dkim: { label: \"DKIM\", fullName: \"DKIM\uff08\u96fb\u5b50\u7f72\u540d\u8a8d\u8a3c\uff09\" },\n  dmarc: { label: \"DMARC\", fullName: \"DMARC\uff08SPF\/DKIM\u7d50\u679c\u306b\u57fa\u3065\u304f\u30dd\u30ea\u30b7\u30fc\uff09\" }\n};\n\nconst PROVIDERS = {\n  onamae: {\n    name: \"\u304a\u540d\u524d.com\",\n    fields: { host: \"\u30db\u30b9\u30c8\u540d\", type: \"TYPE\", value: \"VALUE\uff08TARGET\uff09\" },\n    steps: [\n      \"\u300c\u304a\u540d\u524d.com Navi\u300d\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u4e0a\u90e8\u30e1\u30cb\u30e5\u30fc\u300c\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\/DNS\u300d\u306b\u30ab\u30fc\u30bd\u30eb\u3092\u5408\u308f\u305b\u3001\u300c\u30c9\u30e1\u30a4\u30f3\u306eDNS\u8a2d\u5b9a\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u3066\u300c\u6b21\u3078\u9032\u3080\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u300cDNS\u95a2\u9023\u6a5f\u80fd\u8a2d\u5b9a\u300d\u306e\u4e00\u89a7\u304b\u3089\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u3092\u5229\u7528\u3059\u308b\u300d\u306e\u300c\u8a2d\u5b9a\u3059\u308b\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u300c\u30ec\u30b3\u30fc\u30c9\u8ffd\u52a0\u300d\u30bf\u30d6\u3067\u3001\u4e0a\u8a18\u306e\u300c\u30db\u30b9\u30c8\u540d\u300d\u300cTYPE\uff08TXT\u3092\u9078\u629e\uff09\u300d\u300cVALUE\u300d\u3092\u5165\u529b\u3057\u3001\u300c\u8ffd\u52a0\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3001\u300c\u78ba\u8a8d\u753b\u9762\u3078\u9032\u3080\u300d\u2192\u300c\u8a2d\u5b9a\u3059\u308b\u300d\u3067\u5b8c\u4e86\uff08\u53cd\u6620\u307e\u3067\u6570\u5341\u5206\u301c72\u6642\u9593\u7a0b\u5ea6\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\uff09\"\n    ],\n    editSteps: [\n      \"\u300c\u304a\u540d\u524d.com Navi\u300d\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u4e0a\u90e8\u30e1\u30cb\u30e5\u30fc\u300c\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\/DNS\u300d\u306b\u30ab\u30fc\u30bd\u30eb\u3092\u5408\u308f\u305b\u3001\u300c\u30c9\u30e1\u30a4\u30f3\u306eDNS\u8a2d\u5b9a\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u3066\u300c\u6b21\u3078\u9032\u3080\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u300cDNS\u95a2\u9023\u6a5f\u80fd\u8a2d\u5b9a\u300d\u306e\u4e00\u89a7\u304b\u3089\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u3092\u5229\u7528\u3059\u308b\u300d\u306e\u300c\u8a2d\u5b9a\u3059\u308b\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u4e00\u89a7\u304b\u3089\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306e\u300c\u7de8\u96c6\u300d\u3092\u9078\u3073\u3001\u4e0a\u8a18\u306e\u300cVALUE\u300d\u306e\u5185\u5bb9\u306b\u66f8\u304d\u63db\u3048\u3066\u300c\u78ba\u8a8d\u753b\u9762\u3078\u9032\u3080\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3001\u300c\u8a2d\u5b9a\u3059\u308b\u300d\u3067\u5b8c\u4e86\uff08\u53cd\u6620\u307e\u3067\u6570\u5341\u5206\u301c72\u6642\u9593\u7a0b\u5ea6\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\uff09\"\n    ],\n    alert: \"\u5171\u7528\u30b5\u30fc\u30d0\u30fcSD\/GS\/EX\u30d7\u30e9\u30f3\u3084\u30d7\u30ec\u30df\u30a2\u30e0\u30b5\u30fc\u30d0\u30fc(Windows)\u30d7\u30e9\u30f3\u3001\u30b7\u30f3\u30b0\u30eb\u30b5\u30fc\u30d3\u30b9\u306e\u307f\u306e\u3054\u5229\u7528\u3001\u4ed6\u793e\u306e\u30bb\u30ab\u30f3\u30c0\u30eaDNS\u3092\u4f75\u7528\u4e2d\u306e\u5834\u5408\u306a\u3069\u3001\u5951\u7d04\u72b6\u6cc1\u306b\u3088\u3063\u3066\u306f\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u3092\u5229\u7528\u3059\u308b\u300d\u30dc\u30bf\u30f3\u81ea\u4f53\u304c\u8868\u793a\u3055\u308c\u306a\u3044\u3001\u307e\u305f\u306f\u8a2d\u5b9a\u3092\u9032\u3081\u3066\u3082\u53cd\u6620\u3055\u308c\u306a\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u8868\u793a\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u8cb4\u793e\u304c\u3054\u5951\u7d04\u4e2d\u306e\u30d7\u30e9\u30f3\u304cDNS\u30ec\u30b3\u30fc\u30c9\u8ffd\u52a0\u306e\u3067\u304d\u306a\u3044\u30d7\u30e9\u30f3\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u304a\u540d\u524d.com\u306e\u30b5\u30dd\u30fc\u30c8\u307e\u3067\u3054\u76f8\u8ac7\u304f\u3060\u3055\u3044\u3002\"\n  },\n  muumuu: {\n    name: \"\u30e0\u30fc\u30e0\u30fc\u30c9\u30e1\u30a4\u30f3\",\n    fields: { host: \"\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\", type: \"\u7a2e\u5225\", value: \"\u5185\u5bb9\" },\n    steps: [\n      \"\u30e0\u30fc\u30e0\u30fc\u30c9\u30e1\u30a4\u30f3\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u5de6\u30e1\u30cb\u30e5\u30fc\u300c\u30c9\u30e1\u30a4\u30f3\u64cd\u4f5c\u300d\u2192\u300c\u30e0\u30fc\u30e0\u30fcDNS\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u5909\u66f4\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\uff08\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u304c\u672a\u8a2d\u5b9a\u306e\u5834\u5408\u306f\u3001\u5148\u306b\u300c\u5229\u7528\u3059\u308b\u300d\u304b\u3089\u30e0\u30fc\u30e0\u30fcDNS\u3078\u306e\u5207\u308a\u66ff\u3048\u304c\u5fc5\u8981\u3067\u3059\uff09\",\n      \"\u30da\u30fc\u30b8\u4e0b\u90e8\u306e\u300c\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u300d\u3092\u958b\u304f\",\n      \"\u300c\u8a2d\u5b9a2\u300d\u306e\u5165\u529b\u6b04\u306b\u3001\u4e0a\u8a18\u306e\u300c\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u300d\u300c\u7a2e\u5225\uff08TXT\u3092\u9078\u629e\uff09\u300d\u300c\u5185\u5bb9\u300d\u3092\u5165\u529b\u3057\u3001\u300c\u8a2d\u5b9a\u3092\u8ffd\u52a0\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\uff08\u53cd\u6620\u307e\u3067\u7d041\u6642\u9593\uff09\"\n    ],\n    editSteps: [\n      \"\u30e0\u30fc\u30e0\u30fc\u30c9\u30e1\u30a4\u30f3\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u5de6\u30e1\u30cb\u30e5\u30fc\u300c\u30c9\u30e1\u30a4\u30f3\u64cd\u4f5c\u300d\u2192\u300c\u30e0\u30fc\u30e0\u30fcDNS\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u5909\u66f4\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u30da\u30fc\u30b8\u4e0b\u90e8\u306e\u300c\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u300d\u3092\u958b\u304f\",\n      \"\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306e\u300c\u5185\u5bb9\u300d\u6b04\u3092\u3001\u4e0a\u8a18\u306e\u5185\u5bb9\u306b\u66f8\u304d\u63db\u3048\u3066\u300c\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\uff08\u53cd\u6620\u307e\u3067\u7d041\u6642\u9593\uff09\"\n    ],\n    alert: \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u304c\u30e0\u30fc\u30e0\u30fcDNS\u5411\u3051\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\uff08\u4ed6\u793e\u306e\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u306e\u307e\u307e\u306b\u306a\u3063\u3066\u3044\u308b\uff09\u5834\u5408\u3001\u300c\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u300d\u3092\u4fdd\u5b58\u3057\u3066\u3082DNS\u306b\u53cd\u6620\u3055\u308c\u307e\u305b\u3093\u3002\u305d\u306e\u5834\u5408\u306f\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u306e\u8a2d\u5b9a\u3092\u3054\u78ba\u8a8d\u3044\u305f\u3060\u304f\u304b\u3001\u30e0\u30fc\u30e0\u30fc\u30c9\u30e1\u30a4\u30f3\u306e\u30b5\u30dd\u30fc\u30c8\u307e\u3067\u3054\u76f8\u8ac7\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\u7b49\u306e\u30b5\u30fc\u30d3\u30b9\u5074\u3067\u65e2\u306bSPF\u30ec\u30b3\u30fc\u30c9\u304c\u81ea\u52d5\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u3001\u305d\u306e\u5834\u5408\u306f\u81ea\u52d5\u8a2d\u5b9a\u5206\u3092\u524a\u9664\u3057\u3066\u304b\u30891\u884c\u306b\u307e\u3068\u3081\u3066\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\"\n  },\n  xserver: {\n    name: \"Xserver\u30c9\u30e1\u30a4\u30f3\",\n    fields: { host: \"\u30db\u30b9\u30c8\u540d\", type: \"\u7a2e\u5225\", value: \"\u5185\u5bb9\" },\n    steps: [\n      \"Xserver\u30a2\u30ab\u30a6\u30f3\u30c8\uff08\u307e\u305f\u306f\u30c9\u30e1\u30a4\u30f3\u5951\u7d04\u7ba1\u7406\u30da\u30fc\u30b8\uff09\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u53f3\u5074\u306e\u300c\u2026\u300d\uff08\u305d\u306e\u4ed6\uff09\u30e1\u30cb\u30e5\u30fc\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u3092\u9078\u629e\u3059\u308b\",\n      \"\u4e00\u89a7\u753b\u9762\u3067\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3059\u308b\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u4e0a\u8a18\u306e\u300c\u30db\u30b9\u30c8\u540d\u300d\u300c\u7a2e\u5225\uff08TXT\u3092\u9078\u629e\uff09\u300d\u300c\u5185\u5bb9\u300d\u3092\u5165\u529b\u3057\u3001\u300c\u78ba\u8a8d\u753b\u9762\u3078\u9032\u3080\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u300c\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3059\u308b\u300d\u3067\u5b8c\u4e86\"\n    ],\n    editSteps: [\n      \"Xserver\u30a2\u30ab\u30a6\u30f3\u30c8\uff08\u307e\u305f\u306f\u30c9\u30e1\u30a4\u30f3\u5951\u7d04\u7ba1\u7406\u30da\u30fc\u30b8\uff09\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u53f3\u5074\u306e\u300c\u2026\u300d\uff08\u305d\u306e\u4ed6\uff09\u30e1\u30cb\u30e5\u30fc\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u3092\u9078\u629e\u3059\u308b\",\n      \"\u4e00\u89a7\u753b\u9762\u3067\u3001\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306e\u300c\u7de8\u96c6\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u300c\u5185\u5bb9\u300d\u6b04\u3092\u4e0a\u8a18\u306e\u5185\u5bb9\u306b\u66f8\u304d\u63db\u3048\u3001\u300c\u78ba\u8a8d\u753b\u9762\u3078\u9032\u3080\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\",\n      \"\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u300c\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u300d\u3067\u5b8c\u4e86\"\n    ],\n    alert: \"\u3053\u306e\u8a2d\u5b9a\u306fXserver\u306e\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u306e\u307f\u53cd\u6620\u3055\u308c\u307e\u3059\u3002\u4ed6\u793e\u306e\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u3092\u5229\u7528\u4e2d\u306e\u5834\u5408\u3001Xserver\u306e\u7ba1\u7406\u753b\u9762\u3067\u8a2d\u5b9a\u3057\u3066\u3082\u53cd\u6620\u3055\u308c\u307e\u305b\u3093\u3002\u305d\u306e\u5834\u5408\u306f\u30c9\u30e1\u30a4\u30f3\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u4f1a\u793e\uff08\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u4f1a\u793e\uff09\u306e\u7ba1\u7406\u753b\u9762\u3067\u540c\u3058\u5185\u5bb9\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\u8ffd\u52a0\u6642\u306bSPF\u30ec\u30b3\u30fc\u30c9\u304c\u81ea\u52d5\u8ffd\u52a0\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u591a\u3044\u305f\u3081\u3001\u65b0\u898f\u8ffd\u52a0\u3067\u306f\u306a\u304f\u65e2\u5b58\u30ec\u30b3\u30fc\u30c9\u306e\u300c\u7de8\u96c6\u300d\u30671\u884c\u306b\u307e\u3068\u3081\u3066\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\"\n  },\n  sakura: {\n    name: \"\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\",\n    fields: { host: \"\u30a8\u30f3\u30c8\u30ea\u30fc\u540d\", type: \"\u30bf\u30a4\u30d7\", value: \"\u30c7\u30fc\u30bf\" },\n    steps: [\n      \"\u3010\u3055\u304f\u3089\u306e\u30c9\u30e1\u30a4\u30f3\u3067\u5951\u7d04\u3057\u3066\u3044\u308b\u5834\u5408\u3011\u4f1a\u54e1\u30e1\u30cb\u30e5\u30fc\u306b\u30ed\u30b0\u30a4\u30f3\u2192\u300c\u5951\u7d04\u4e2d\u306e\u30c9\u30e1\u30a4\u30f3\u4e00\u89a7\u300d\u2192\u300c\u30c9\u30e1\u30a4\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u30be\u30fc\u30f3\u300d\u2192\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u306e\u300c\u7de8\u96c6\u300d\u3092\u958b\u304f\",\n      \"\u3010\u3055\u304f\u3089\u306e\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u3067\u5951\u7d04\u3057\u3066\u3044\u308b\u5834\u5408\u3011\u30b5\u30fc\u30d0\u30fc\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u2192\u300c\u30c9\u30e1\u30a4\u30f3\/SSL\u300d\u2192\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u8a2d\u5b9a\u300d\u2192\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u2192\u300c\u8ffd\u52a0\u3059\u308b\u300d\u3092\u958b\u304f\",\n      \"\u4e0a\u8a18\u306e\u300c\u30a8\u30f3\u30c8\u30ea\u30fc\u540d\uff0f\u30db\u30b9\u30c8\u540d\u300d\u300c\u30bf\u30a4\u30d7\uff0f\u7a2e\u5225\uff08TXT\u3092\u9078\u629e\uff09\u300d\u300c\u30c7\u30fc\u30bf\uff0f\u5185\u5bb9\u300d\u3092\u5165\u529b\u3059\u308b\",\n      \"\u300c\u8ffd\u52a0\u300d\u2192\u300c\u4fdd\u5b58\u300d\uff08\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u306e\u5834\u5408\u306f\u300c\u767b\u9332\u3059\u308b\u300d\u2192\u300c\u8a2d\u5b9a\u3059\u308b\u300d\uff09\u3067\u5b8c\u4e86\"\n    ],\n    editSteps: [\n      \"\u3010\u3055\u304f\u3089\u306e\u30c9\u30e1\u30a4\u30f3\u3067\u5951\u7d04\u3057\u3066\u3044\u308b\u5834\u5408\u3011\u4f1a\u54e1\u30e1\u30cb\u30e5\u30fc\u306b\u30ed\u30b0\u30a4\u30f3\u2192\u300c\u5951\u7d04\u4e2d\u306e\u30c9\u30e1\u30a4\u30f3\u4e00\u89a7\u300d\u2192\u300c\u30c9\u30e1\u30a4\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u30be\u30fc\u30f3\u300d\u2192\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306e\u300c\u7de8\u96c6\u300d\u3092\u958b\u304f\",\n      \"\u3010\u3055\u304f\u3089\u306e\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u3067\u5951\u7d04\u3057\u3066\u3044\u308b\u5834\u5408\u3011\u30b5\u30fc\u30d0\u30fc\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u2192\u300c\u30c9\u30e1\u30a4\u30f3\/SSL\u300d\u2192\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u8a2d\u5b9a\u300d\u2192\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u2192\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306e\u300c\u7de8\u96c6\u300d\u3092\u958b\u304f\",\n      \"\u300c\u30c7\u30fc\u30bf\uff0f\u5185\u5bb9\u300d\u6b04\u3092\u4e0a\u8a18\u306e\u5185\u5bb9\u306b\u66f8\u304d\u63db\u3048\u308b\",\n      \"\u300c\u4fdd\u5b58\u300d\uff08\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u306e\u5834\u5408\u306f\u300c\u8a2d\u5b9a\u3059\u308b\u300d\uff09\u3067\u5b8c\u4e86\"\n    ],\n    alert: \"\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u306e\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u304c\u300c\u3055\u304f\u3089\u300d\uff08ns1.dns.ne.jp \/ ns2.dns.ne.jp\uff09\u306b\u306a\u3063\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u306e\u300c\u30be\u30fc\u30f3\u8a2d\u5b9a\u300d\u304c\u30b0\u30ec\u30fc\u30a2\u30a6\u30c8\u3057\u3066\u7de8\u96c6\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u5834\u5408\u306f\u3001\u30c9\u30e1\u30a4\u30f3\u3092\u53d6\u5f97\u30fb\u7ba1\u7406\u3057\u3066\u3044\u308b\u4f1a\u793e\u306e\u7ba1\u7406\u753b\u9762\u3067\u8a2d\u5b9a\u3059\u308b\u304b\u3001\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u30b5\u30dd\u30fc\u30c8\u307e\u3067\u3054\u76f8\u8ac7\u304f\u3060\u3055\u3044\u3002\"\n  },\n  other: {\n    name: \"\u305d\u306e\u4ed6\u306eDNS\u30b5\u30fc\u30d0\u30fc\uff0f\u308f\u304b\u3089\u306a\u3044\u5834\u5408\",\n    fields: { host: \"\u30db\u30b9\u30c8\u540d\uff0f\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\", type: \"\u7a2e\u5225\uff0f\u30bf\u30a4\u30d7\", value: \"\u5185\u5bb9\uff0f\u5024\uff0f\u30c7\u30fc\u30bf\" },\n    steps: [\n      \"\u30c9\u30e1\u30a4\u30f3\u3092\u53d6\u5f97\u30fb\u5951\u7d04\u3057\u3066\u3044\u308b\u4f1a\u793e\uff08\u30ec\u30b8\u30b9\u30c8\u30e9\uff09\u306e\u7ba1\u7406\u753b\u9762\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u300cDNS\u8a2d\u5b9a\u300d\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u300c\u30be\u30fc\u30f3\u7de8\u96c6\u300d\u300c\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u300d\u3068\u3044\u3063\u305f\u540d\u79f0\u306e\u30e1\u30cb\u30e5\u30fc\u3092\u63a2\u3059\",\n      \"TXT\u30ec\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u753b\u9762\u3067\u3001\u4e0a\u8a18\u306e\u300c\u30db\u30b9\u30c8\u540d\u300d\u300c\u7a2e\u5225\uff08TXT\uff09\u300d\u300c\u5185\u5bb9\uff0f\u5024\u300d\u3092\u5165\u529b\u3057\u3066\u4fdd\u5b58\u3059\u308b\"\n    ],\n    editSteps: [\n      \"\u30c9\u30e1\u30a4\u30f3\u3092\u53d6\u5f97\u30fb\u5951\u7d04\u3057\u3066\u3044\u308b\u4f1a\u793e\uff08\u30ec\u30b8\u30b9\u30c8\u30e9\uff09\u306e\u7ba1\u7406\u753b\u9762\u306b\u30ed\u30b0\u30a4\u30f3\u3059\u308b\",\n      \"\u300cDNS\u8a2d\u5b9a\u300d\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u300c\u30be\u30fc\u30f3\u7de8\u96c6\u300d\u300c\u30cd\u30fc\u30e0\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u300d\u3068\u3044\u3063\u305f\u540d\u79f0\u306e\u30e1\u30cb\u30e5\u30fc\u3092\u63a2\u3059\",\n      \"\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308bTXT\u30ec\u30b3\u30fc\u30c9\u3092\u898b\u3064\u3051\u3001\u300c\u7de8\u96c6\u300d\u304b\u3089\u300c\u5185\u5bb9\uff0f\u5024\u300d\u3092\u4e0a\u8a18\u306e\u5185\u5bb9\u306b\u66f8\u304d\u63db\u3048\u3066\u4fdd\u5b58\u3059\u308b\"\n    ],\n    alert: \"\u7ba1\u7406\u753b\u9762\u306b\u300cDNS\u30ec\u30b3\u30fc\u30c9\u8a2d\u5b9a\u300d\u3084\u300c\u30be\u30fc\u30f3\u7de8\u96c6\u300d\u306b\u76f8\u5f53\u3059\u308b\u8868\u793a\u304c\u898b\u5f53\u305f\u3089\u306a\u3044\u5834\u5408\u306f\u3001\u8cb4\u793e\u304c\u3054\u5951\u7d04\u4e2d\u306eDNS\u30b5\u30fc\u30d0\u30fc\u304c\u3001DNS\u30ec\u30b3\u30fc\u30c9\u8ffd\u52a0\u306e\u3067\u304d\u306a\u3044\u30d7\u30e9\u30f3\u3067\u3042\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002DNS\u30b5\u30fc\u30d0\u30fc\u306e\u7ba1\u7406\u4f1a\u793e\u307e\u3067\u3054\u76f8\u8ac7\u304f\u3060\u3055\u3044\u3002\"\n  }\n};\n\nconst FREE_CARRIER_DOMAINS = [\n  \"gmail.com\",\"googlemail.com\",\"yahoo.co.jp\",\"yahoo.com\",\"ymail.com\",\n  \"hotmail.com\",\"hotmail.co.jp\",\"outlook.com\",\"outlook.jp\",\"live.com\",\"live.jp\",\n  \"icloud.com\",\"me.com\",\"mac.com\",\"aol.com\",\n  \"docomo.ne.jp\",\"ezweb.ne.jp\",\"au.com\",\"softbank.ne.jp\",\"i.softbank.jp\",\n  \"biglobe.ne.jp\",\"nifty.com\",\"so-net.ne.jp\",\"excite.co.jp\",\"goo.jp\",\n  \"ocn.ne.jp\",\"io.ocn.ne.jp\",\"plala.or.jp\",\"asahi-net.or.jp\",\"dion.ne.jp\",\n  \"jcom.home.ne.jp\",\"jcom.zaq.ne.jp\"\n];\n\nconst DNS_NO_ACCESS_INFO = {\n  \"other-company\": {\n    title: \"DNS\u30b5\u30fc\u30d0\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u306e\u306f\u81ea\u793e\u3067\u306f\u306a\u304f\u4ed6\u793e\u3067\u3042\u308b\u5834\u5408\u306f\uff1f\",\n    body: `\u4ee5\u4e0b\u306e\u6d41\u308c\u3067\u9032\u3081\u307e\u3059\u3002<br><br>\n      \u2460\u307e\u305a\u3042\u306a\u305f\u304c\u914d\u914d\u30e1\u30fc\u30eb\u5074\u3067\u53d6\u5f97\u3059\u3079\u304d\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b<br>\n      \u2461\u305d\u306e\u60c5\u5831\u3092\u5143\u306b\u8a2d\u5b9a\u3059\u3079\u304d\u5185\u5bb9\u3092\u8a2d\u5b9a\u30ac\u30a4\u30c9\uff08\u3053\u306e\u30b5\u30a4\u30c8\uff09\u304c\u63d0\u793a\u3059\u308b<br>\n      \u2462\u3042\u306a\u305f\u304cDNS\u30b5\u30fc\u30d0\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u4f01\u696d\u69d8\u3078\u2461\u3067\u63d0\u793a\u3055\u308c\u305f\u8a2d\u5b9a\u3059\u3079\u304d\u5185\u5bb9\u3092\u30e1\u30fc\u30eb\u3067\u305d\u306e\u307e\u307e\u9001\u4ed8\u3059\u308b<br><br>\n      \u307e\u305a\u306f\u2460\u304b\u3089\u4e00\u7dd2\u306b\u9032\u3081\u307e\u3057\u3087\u3046\uff01\u6b21\u3078\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002`\n  },\n  \"no-permission\": {\n    title: \"\u81ea\u793e\u3067DNS\u30b5\u30fc\u30d0\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u304c\u81ea\u8eab\u306b\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u304c\u306a\u3044\u5834\u5408\u306f\uff1f\",\n    body: `\u4ee5\u4e0b\u306e\u6d41\u308c\u3067\u9032\u3081\u307e\u3059\u3002<br><br>\n      \u2460\u307e\u305a\u3042\u306a\u305f\u304c\u914d\u914d\u30e1\u30fc\u30eb\u5074\u3067\u53d6\u5f97\u3059\u3079\u304d\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b<br>\n      \u2461\u305d\u306e\u60c5\u5831\u3092\u5143\u306b\u8a2d\u5b9a\u3059\u3079\u304d\u5185\u5bb9\u3092\u8a2d\u5b9a\u30ac\u30a4\u30c9\uff08\u3053\u306e\u30b5\u30a4\u30c8\uff09\u304c\u63d0\u793a\u3059\u308b<br>\n      \u2462\u3042\u306a\u305f\u304cDNS\u30b5\u30fc\u30d0\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u3054\u62c5\u5f53\u8005\u69d8\u3078\u2461\u3067\u63d0\u793a\u3055\u308c\u305f\u8a2d\u5b9a\u3059\u3079\u304d\u5185\u5bb9\u3092\u30e1\u30fc\u30eb\u307e\u305f\u306f\u30c1\u30e3\u30c3\u30c8\u3067\u305d\u306e\u307e\u307e\u9001\u4ed8\u3059\u308b<br><br>\n      \u307e\u305a\u306f\u2460\u304b\u3089\u4e00\u7dd2\u306b\u9032\u3081\u307e\u3057\u3087\u3046\uff01\u6b21\u3078\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002`\n  },\n  \"unknown\": {\n    title: \"DNS\u30b5\u30fc\u30d0\u3068\u306f\uff1f\",\n    body: `\u8cb4\u793e\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u767a\u884c\u3057\u305f\u30b5\u30fc\u30d0\u304cDNS\u30b5\u30fc\u30d0\u3067\u3059\u3002<br>DNS\u30b5\u30fc\u30d0\u3068\u3044\u3046\u30b7\u30b9\u30c6\u30e0\u306b\u899a\u3048\u304c\u306a\u3044\u5834\u5408\u3001\u8cb4\u793e\u306e\u60c5\u5831\u30b7\u30b9\u30c6\u30e0\u90e8\u9580\u306e\u3054\u62c5\u5f53\u8005\u69d8\u3078\u3001\u914d\u914d\u30e1\u30fc\u30eb\u3067\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u8a2d\u5b9a\uff08SPF\u3001DKIM\u3001DMARC\uff09\u306e\u8a2d\u5b9a\u3092\u884c\u3044\u305f\u3044\u65e8\u3001\u4ee5\u4e0b\u306eURL\u3092\u6dfb\u3048\u3066\u304a\u4f1d\u3048\u304f\u3060\u3055\u3044\u3002<br><br>\n      \u25bc\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u8a2d\u5b9a\u3000\u30de\u30cb\u30e5\u30a2\u30eb<br><a href=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/pdf\/spfdkimdmarc.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/pdf\/spfdkimdmarc.pdf<\/a><br><br>\n      \u25bc\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u8a2d\u5b9a\u3000\u8a2d\u5b9a\u30ac\u30a4\u30c9<br><a href=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/?page_id=27574&#038;preview=true\" target=\"_blank\" rel=\"noopener\">https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/?page_id=27574&preview=true<\/a>`\n  },\n  \"forgot\": {\n    title: \"DNS\u30b5\u30fc\u30d0\u3078\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eURL\u3084ID\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5931\u5ff5\u3057\u305f\u5834\u5408\u306f\uff1f\",\n    body: `\u682a\u5f0f\u4f1a\u793e\u30e9\u30af\u30b9\u3067\u306f\u628a\u63e1\u3057\u3066\u304a\u308a\u307e\u305b\u3093\u306e\u3067\u3001DNS\u30b5\u30fc\u30d0\u306e\u7ba1\u7406\u4f1a\u793e\u69d8\u306e\u30b5\u30dd\u30fc\u30c8\u7a93\u53e3\u307e\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u3092\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002`\n  },\n  \"other\": {\n    title: \"\",\n    body: `\u914d\u914d\u30e1\u30fc\u30eb\u306e\u30b5\u30dd\u30fc\u30c8\u7a93\u53e3\u307e\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002<br><br>\u25a0\u304a\u554f\u3044\u5408\u308f\u305b\uff1a<a href=\"https:\/\/business.form-mailer.jp\/fms\/25dd3003226516\" target=\"_blank\" rel=\"noopener\">https:\/\/business.form-mailer.jp\/fms\/25dd3003226516<\/a><br>TEL\uff1a050-5490-8066\u3000\u5e73\u65e5:9:30\uff5e17:00`\n  }\n};\n\nconst state = {\n  done: new Set(), record: null, provider: null,\n  spfIp: \"\", spfHasExisting: null, spfExistingRecord: \"\",\n  dmarcRua: \"\", dmarcRuf: \"\", dmarcHasExisting: null,\n  dkimSelector: \"\", dkimPubKey: \"\", yourDomain: \"\", formError: \"\",\n  fromAddress: \"\", dnsAccessChoice: null, dnsNoAccessReason: null,\n  spfUnknownVisible: null, spfUnknownFoundHaihai: null, spfEntryUnknown: false,\n  spfAuto: null, spfAutoLoading: false, spfAutoError: null, spfAutoFlow: null,\n  dmarcAutoLoading: false, dmarcAutoError: null\n};\n\nfunction esc(s){ return (s||\"\").replace(\/[&<>\"]\/g, c => ({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\"}[c])); }\n\n\/\/ ===== \u81ea\u30b5\u30a4\u30c8API\u306b\u3088\u308bDNS\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\uff08v3\uff09 =====\n\/\/ \u516c\u958bDoH\u30d7\u30ed\u30d0\u30a4\u30c0\uff08Google\/Cloudflare\u7b49\uff09\u3078\u306e\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u306e\u76f4\u63a5fetch\u306fCORS\u3067\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308b\u305f\u3081\u3001\n\/\/ \u540c\u4e00\u30aa\u30ea\u30b8\u30f3\u306e\u81ea\u30b5\u30a4\u30c8API\uff08WordPress\u5074\u3067Code Snippets\u306b\u3088\u308a\u8ffd\u52a0\u3057\u305fREST\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\uff09\u7d4c\u7531\u3067DNS\u3092\u554f\u3044\u5408\u308f\u305b\u308b\u3002\nasync function dohTxt(name){\n  const res = await fetch(\"\/wp-json\/dsg\/v1\/txt?domain=\" + encodeURIComponent(name));\n  if(!res.ok) throw new Error(\"DNS\u30af\u30a8\u30ea\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n  const j = await res.json();\n  return j.txt || [];\n}\n\/\/ SPF\u306e\u6728\u3092include\/redirect\u306e\u5148\u307e\u3067\u518d\u5e30\u7684\u306b\u305f\u3069\u308a\u3001spf.haihaimail.jp \u3092\u63a2\u3059\uff08\u30eb\u30fc\u30d7\u30fb10\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u4e0a\u9650\u306b\u5bfe\u5fdc\uff09\nasync function resolveSpf(domain){\n  const visited = new Set();\n  let hasSpf=false, foundHaihai=false, lookups=0, exceeded=false, apex=null, multi=false;\n  async function walk(name, isApex){\n    if(visited.has(name)) return;\n    if(lookups > 10){ exceeded = true; return; }\n    visited.add(name);\n    let txts;\n    try{ txts = await dohTxt(name); }\n    catch(e){ if(isApex) throw e; return; }   \/\/ apex\u306e\u5931\u6557\u306e\u307f\u81f4\u547d\u7684\u3001\u5165\u308c\u5b50\u306e\u5931\u6557\u306f\u7121\u8996\n    const spfs = txts.filter(t => \/^v=spf1\\b\/i.test(t.trim()));\n    if(spfs.length === 0) return;\n    if(isApex){ hasSpf = true; apex = spfs[0]; if(spfs.length > 1) multi = true; }\n    const spf = spfs[0];\n    if(\/spf\\.haihaimail\\.jp\/i.test(spf)) foundHaihai = true;   \/\/ \u2605\u6307\u7d0b\n    for(const t of spf.trim().split(\/\\s+\/)){\n      if(\/^(include:|redirect=|a$|a:|mx$|mx:|ptr|exists:)\/i.test(t)) lookups++;\n      const m = t.match(\/^(?:include:|redirect=)(.+)$\/i);\n      if(m && !foundHaihai) await walk(m[1].toLowerCase(), false);\n    }\n  }\n  await walk(domain.toLowerCase(), true);\n  return { hasSpf, foundHaihai, exceeded, lookups, apex, multi };\n}\nasync function resolveDmarc(domain){\n  const txts = await dohTxt(\"_dmarc.\" + domain.toLowerCase());\n  const rec = txts.find(t => \/^v=DMARC1\\b\/i.test(t.trim()));\n  return { hasDmarc: !!rec, record: rec || null };\n}\n\nfunction copyFromButtonEl(btn){\n  const text = btn.getAttribute(\"data-copy\") || \"\";\n  const finish = () => {\n    const original = btn.textContent;\n    btn.textContent = \"\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f\";\n    setTimeout(()=>{ btn.textContent = original === \"\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f\" ? \"\u30b3\u30d4\u30fc\" : original; }, 1500);\n  };\n  const fallbackCopy = () => {\n    const ta = document.createElement(\"textarea\");\n    ta.value = text;\n    ta.style.position = \"fixed\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.focus(); ta.select();\n    try{ document.execCommand(\"copy\"); finish(); }\n    catch(e){ alert(\"\u30b3\u30d4\u30fc\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u304a\u624b\u6570\u3067\u3059\u304c\u624b\u52d5\u3067\u9078\u629e\u3057\u3066\u30b3\u30d4\u30fc\u3057\u3066\u304f\u3060\u3055\u3044\u3002\"); }\n    document.body.removeChild(ta);\n  };\n  if(navigator.clipboard && navigator.clipboard.writeText){\n    navigator.clipboard.writeText(text).then(finish).catch(fallbackCopy);\n  } else {\n    fallbackCopy();\n  }\n}\n\nfunction buildSpfValue(){\n  const ip = state.spfIp.trim();\n  return ip ? `v=spf1 ip4:${ip} include:spf.haihaimail.jp ~all` : `v=spf1 include:spf.haihaimail.jp ~all`;\n}\nfunction mergeSpfRecord(existing, ip){\n  let base = existing.trim();\n  const ipTrim = (ip||\"\").trim();\n  if(ipTrim && base.indexOf(ipTrim) === -1){\n    const m0 = base.match(\/([~+\\-?]all)\\s*$\/i);\n    if(m0){\n      const idx0 = base.lastIndexOf(m0[0]);\n      base = `${base.slice(0, idx0).trim()} ip4:${ipTrim} ${m0[1]}`;\n    } else {\n      base = `${base} ip4:${ipTrim}`;\n    }\n  }\n  const m = base.match(\/([~+\\-?]all)\\s*$\/i);\n  if(m){\n    const idx = base.lastIndexOf(m[0]);\n    return `${base.slice(0, idx).trim()} include:spf.haihaimail.jp ${m[1]}`;\n  }\n  return `${base} include:spf.haihaimail.jp ~all`;\n}\nfunction buildDmarcValue(){\n  const rua = state.dmarcRua.trim();\n  const ruf = state.dmarcRuf.trim();\n  let v = \"v=DMARC1; p=none;\";\n  if(rua) v += ` rua=mailto:${rua};`;\n  if(ruf) v += ` ruf=mailto:${ruf};`;\n  return v;\n}\n\nfunction subHostFor(key){\n  if(key === \"dkim\") return `${state.dkimSelector.trim() || \"\u30bb\u30ec\u30af\u30bf\u540d\"}._domainkey`;\n  if(key === \"dmarc\") return \"_dmarc\";\n  return \"\";\n}\nfunction fullHostFor(key){\n  const dom = state.yourDomain.trim() || \"\uff08\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\uff09\";\n  const sub = subHostFor(key);\n  return sub ? `${sub}.${dom}.` : `${dom}.`;\n}\n\nfunction renderProgress(){\n  const el = document.getElementById(\"dsg-progress\");\n  el.innerHTML = Object.keys(RECORDS).map(k=>{\n    const r = RECORDS[k];\n    const doneCls = state.done.has(k) ? \" dsg-done\" : \"\";\n    return `<span class=\"dsg-chip${doneCls}\">${state.done.has(k)?\"\u2714 \":\"\"}${r.label}<\/span>`;\n  }).join(\"\");\n}\n\nfunction go(screen){ render(screen); }\nfunction goClear(screen){ state.formError = \"\"; go(screen); }\n\n\/\/ GA4\u8a08\u6e2c\u7528\u30a4\u30d9\u30f3\u30c8\u9001\u4fe1\uff08GTM\u5074\u306e\u30ab\u30b9\u30bf\u30e0\u30a4\u30d9\u30f3\u30c8\u30c8\u30ea\u30ac\u30fc\u3067\u62fe\u3044GA4\u30bf\u30b0\u306b\u8ee2\u9001\u3059\u308b\u60f3\u5b9a\uff09\nfunction dsgTrack(eventName, params){\n  window.dataLayer = window.dataLayer || [];\n  window.dataLayer.push(Object.assign({event: eventName}, params));\n}\n\nfunction render(screen){\n  renderProgress();\n  const card = document.getElementById(\"dsg-card\");\n  if(screen === \"home\") card.innerHTML = homeHtml();\n  else if(screen === \"spfAutoCheck\") card.innerHTML = spfAutoCheckHtml();\n  else if(screen === \"spfNeedsSetup\") card.innerHTML = spfNeedsSetupHtml();\n  else if(screen === \"dmarcNeedsSetup\") card.innerHTML = dmarcNeedsSetupHtml();\n  else if(screen === \"dnsAccessCheck\") card.innerHTML = dnsAccessCheckHtml();\n  else if(screen === \"dnsAccessReason\") card.innerHTML = dnsAccessReasonHtml();\n  else if(screen === \"dnsNoAccessInfo\") card.innerHTML = dnsNoAccessInfoHtml();\n  else if(screen === \"selectRecord\") card.innerHTML = selectRecordHtml();\n  else if(screen === \"recordDetail\") card.innerHTML = recordDetailHtml();\n  else if(screen === \"spfExistingInput\") card.innerHTML = spfExistingInputHtml();\n  else if(screen === \"spfIpQuestion\") card.innerHTML = spfIpQuestionHtml();\n  else if(screen === \"spfUnknownCheck1\") card.innerHTML = spfUnknownCheck1Html();\n  else if(screen === \"spfUnknownNotVisible\") card.innerHTML = spfUnknownNotVisibleHtml();\n  else if(screen === \"spfUnknownWarningCheck\") card.innerHTML = spfUnknownWarningCheckHtml();\n  else if(screen === \"spfUnknownAlreadyOk\") card.innerHTML = spfUnknownAlreadyOkHtml();\n  else if(screen === \"spfUnknownNeedAppend\") card.innerHTML = spfUnknownNeedAppendHtml();\n  else if(screen === \"spfUnknownLookupFull\") card.innerHTML = spfUnknownLookupFullHtml();\n  else if(screen === \"spfUnknownProblem\") card.innerHTML = spfUnknownProblemHtml();\n  else if(screen === \"spfUnknownLookupExceeded\") card.innerHTML = spfUnknownLookupExceededHtml();\n  else if(screen === \"spfUnknownSupport\") card.innerHTML = spfUnknownSupportHtml();\n  else if(screen === \"spfCompleteInterim\") card.innerHTML = spfCompleteInterimHtml();\n  else if(screen === \"dmarcAlreadyConfigured\") card.innerHTML = dmarcAlreadyConfiguredHtml();\n  else if(screen === \"dmarcCheckExternal\") card.innerHTML = dmarcCheckExternalHtml();\n  else if(screen === \"dmarcManualCheck\") card.innerHTML = dmarcManualCheckHtml();\n  else if(screen === \"dkimStep1\") card.innerHTML = dkimStep1Html();\n  else if(screen === \"dkimStep2\") card.innerHTML = dkimStep2Html();\n  else if(screen === \"dkimStep3\") card.innerHTML = dkimStep3Html();\n  else if(screen === \"dkimEmailTemplate\") card.innerHTML = dkimEmailTemplateHtml();\n  else if(screen === \"selectProvider\") card.innerHTML = selectProviderHtml();\n  else if(screen === \"providerSteps\") card.innerHTML = providerStepsHtml();\n  else if(screen === \"afterDone\") card.innerHTML = afterDoneHtml();\n  card.scrollIntoView({behavior:\"smooth\", block:\"start\"});\n  dsgTrack('dsg_screen_view', {\n    event_category: 'dsg_wizard',\n    event_label: screen,\n    screen_name: screen,\n    record_type: state.record || '',\n    all_done: Object.keys(RECORDS).every(k=>state.done.has(k))\n  });\n}\n\nfunction homeHtml(){\n  return `\n    <h2>\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u3087\u3046<\/h2>\n    <p>\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u3092\u9632\u3050\u305f\u3081\u306e\u4ee3\u8868\u7684\u306a\u4ed5\u7d44\u307f\u306b <b>SPF<\/b>\u30fb<b>DKIM<\/b>\u30fb<b>DMARC<\/b> \u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u305e\u308cDNS\u30b5\u30fc\u30d0\u30fc\u306b\u30ec\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002<\/p>\n    <p>\u3053\u306e\u30ac\u30a4\u30c9\u3067\u306f\u3001\u8a2d\u5b9a\u3057\u305f\u3044\u9805\u76ee\u3068\u3054\u5229\u7528\u4e2d\u306eDNS\u30b5\u30fc\u30d0\u30fc\u3092\u30dc\u30bf\u30f3\u3067\u9078\u3093\u3067\u3044\u304f\u3060\u3051\u3067\u3001\u30ec\u30b3\u30fc\u30c9\u306e\u5185\u5bb9\u3068\u8a2d\u5b9a\u624b\u9806\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n    ${state.formError ? `<div class=\"dsg-form-error\">${esc(state.formError).replace(\/\\n\/g, \"<br>\")}<\/div>` : \"\"}\n    <label class=\"dsg-inputlabel-lg\">\u914d\u914d\u30e1\u30fc\u30eb\u3067\u4f7f\u7528\u3059\u308bFrom\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u5fc5\u9808\uff09<\/label>\n    <input type=\"text\" placeholder=\"\u4f8b: sales@example.co.jp\" value=\"${esc(state.fromAddress)}\" oninput=\"DSG.state.fromAddress=this.value;\">\n    <div class=\"dsg-actions\"><button class=\"dsg-primary\" onclick=\"DSG.goNextFromHome()\">\u8a2d\u5b9a\u3092\u59cb\u3081\u308b<\/button><\/div>\n  `;\n}\n\nfunction goNextFromHome(){\n  const addr = state.fromAddress.trim();\n  const emailRe = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n  if(!emailRe.test(addr)){\n    state.formError = \"\u6709\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u5f62\u5f0f\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\";\n    go(\"home\");\n    return;\n  }\n  const domain = addr.split(\"@\")[1].toLowerCase();\n  if(FREE_CARRIER_DOMAINS.indexOf(domain) !== -1){\n    state.formError = \"\u30fb\u30d5\u30ea\u30fc\u30c9\u30e1\u30a4\u30f3\\n\u30fb\u30ad\u30e3\u30ea\u30a2\u30c9\u30e1\u30a4\u30f3\\n\u30fb\u30d7\u30ed\u30d0\u30a4\u30c0\u63d0\u4f9b\u30c9\u30e1\u30a4\u30f3\\n\u306f\u3001\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u8a2d\u5b9a\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u8cb4\u793e\u306e\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u3054\u7528\u610f\u306e\u4e0a\u3054\u5165\u529b\u304f\u3060\u3055\u3044\u3002\";\n    go(\"home\");\n    return;\n  }\n  state.yourDomain = domain;\n  state.formError = \"\";\n  go(\"dnsAccessCheck\");\n}\n\nfunction dnsAccessCheckHtml(){\n  const dom = esc(state.yourDomain);\n  return `\n    <h2>DNS\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u30a2\u30af\u30bb\u30b9\u78ba\u8a8d<\/h2>\n    <p>\u8cb4\u793e\u306e\u30c9\u30e1\u30a4\u30f3\u306f\u300c${dom}\u300d\u3067\u3059\u3002\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u306b\u5bfe\u3057\u3066\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u8a2d\u5b9a\u3092\u884c\u3046\u305f\u3081\u306b\u306f\u300c${dom}\u300d\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u7ba1\u7406\u3057\u3066\u3044\u308bDNS\u30b5\u30fc\u30d0\u306e\u7ba1\u7406\u753b\u9762\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3042\u306a\u305f\u306fDNS\u30b5\u30fc\u30d0\u306e\u7ba1\u7406\u753b\u9762\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u3067\u304d\u307e\u3059\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsAccess('yes')\">DNS\u30b5\u30fc\u30d0\u306e\u7ba1\u7406\u753b\u9762\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsAccess('no')\">\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044<\/button>\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('home')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectDnsAccess(choice){\n  state.dnsAccessChoice = choice;\n  if(choice === \"yes\"){\n    state.dnsNoAccessReason = null;\n    go(\"selectRecord\");\n  } else {\n    go(\"dnsAccessReason\");\n  }\n}\n\nfunction dnsAccessReasonHtml(){\n  return `\n    <h2>\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u7406\u7531\u3092\u6559\u3048\u3066\u304f\u3060\u3055\u3044<\/h2>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsNoAccessReason('other-company')\">DNS\u30b5\u30fc\u30d0\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u306e\u306f\u81ea\u793e\u3067\u306f\u306a\u304f\u4ed6\u793e\u3067\u3042\u308b\u305f\u3081<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsNoAccessReason('no-permission')\">\u81ea\u793e\u3067DNS\u30b5\u30fc\u30d0\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u304c\u81ea\u8eab\u306b\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u304c\u306a\u3044\u305f\u3081<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsNoAccessReason('unknown')\">DNS\u30b5\u30fc\u30d0\u3068\u3044\u3046\u3082\u306e\u304c\u4f55\u304b\u308f\u304b\u3089\u306a\u3044\u305f\u3081<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsNoAccessReason('forgot')\">\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eURL\u3084ID\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5931\u5ff5\u3057\u305f\u305f\u3081<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDnsNoAccessReason('other')\">\u305d\u306e\u4ed6<\/button>\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('dnsAccessCheck')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectDnsNoAccessReason(reason){\n  state.dnsNoAccessReason = reason;\n  go(\"dnsNoAccessInfo\");\n}\n\nfunction dnsNoAccessInfoHtml(){\n  const info = DNS_NO_ACCESS_INFO[state.dnsNoAccessReason] || DNS_NO_ACCESS_INFO.other;\n  const showNext = state.dnsNoAccessReason === \"other-company\" || state.dnsNoAccessReason === \"no-permission\";\n  return `\n    <h2>${info.title ? esc(info.title) : \"\u304a\u554f\u3044\u5408\u308f\u305b\"}<\/h2>\n    <div class=\"dsg-alert\" style=\"background:#eef2f7;border-color:var(--dsg-border);color:var(--dsg-text);\">${info.body}<\/div>\n    <div class=\"dsg-actions\">\n      ${showNext ? `<button class=\"dsg-primary\" onclick=\"DSG.goToDkimFromNoAccessInfo()\">\u6b21\u3078<\/button>` : \"\"}\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('dnsAccessReason')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction goToDkimFromNoAccessInfo(){\n  state.record = \"dkim\";\n  state.formError = \"\";\n  go(\"dkimStep1\");\n}\n\nfunction selectRecordHtml(){\n  const items = Object.keys(RECORDS).map(k=>{\n    const r = RECORDS[k];\n    const cls = state.done.has(k) ? \"dsg-opt dsg-done-mark\" : \"dsg-opt\";\n    return `<button class=\"${cls}\" onclick=\"DSG.selectRecord('${k}')\">${r.fullName}<span class=\"dsg-sub\">${state.done.has(k) ? \"\u8a2d\u5b9a\u6e08\u307f\u3067\u3059\u3002\" : \"\u3053\u308c\u304b\u3089\u8a2d\u5b9a\u3059\u308b\"}<\/span><\/button>`;\n  }).join(\"\");\n  const allDone = Object.keys(RECORDS).every(k=>state.done.has(k));\n  return `\n    <h2>\u4f55\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u304b\uff1f<\/h2>\n    <div class=\"dsg-btn-grid\">${items}\n      <button class=\"dsg-opt\" onclick=\"DSG.goToSpfUnknownFlow()\">\u4f55\u3092\u8a2d\u5b9a\u3059\u3079\u304d\u304b\u308f\u304b\u3089\u306a\u3044<span class=\"dsg-sub\">\u307e\u305a\u306fSPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u72b6\u6cc1\u3092\u4e00\u7dd2\u306b\u78ba\u8a8d\u3057\u307e\u3059<\/span><\/button>\n    <\/div>\n    ${allDone ? `<div class=\"dsg-alert\" style=\"background:#e7f7ee;border-color:#bfe8cf;color:var(--dsg-ok);\"><b>SPF\u30fbDKIM\u30fbDMARC\u3059\u3079\u3066\u8a2d\u5b9a\u6e08\u307f\u3067\u3059\u3002<\/b>\u304a\u75b2\u308c\u69d8\u3067\u3057\u305f\u3002\u53cd\u6620\u307e\u3067\u6642\u9593\u304c\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6642\u9593\u3092\u304a\u3044\u3066\u304b\u3089\u53d7\u4fe1\u30c6\u30b9\u30c8\u7b49\u3067\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002<\/div>` : \"\"}\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('home')\">\u6700\u521d\u306b\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectRecord(key){\n  state.record = key;\n  state.formError = \"\";\n  if(key === \"spf\"){\n    state.spfUnknownVisible = null;\n    state.spfUnknownFoundHaihai = null;\n    state.spfEntryUnknown = false;\n    state.spfAutoError = null;\n    state.spfAutoFlow = null;\n    go(\"spfAutoCheck\");\n  } else if(key === \"dkim\"){\n    go(\"dkimStep1\");\n  } else {\n    state.dmarcAutoError = null;\n    go(\"recordDetail\");\n  }\n}\n\nfunction goNextFromRecordDetail(){\n  if(state.dmarcRua.trim().indexOf(\"@\") !== -1){\n    const ruaDomain = state.dmarcRua.trim().split(\"@\").pop().toLowerCase();\n    if(ruaDomain !== state.yourDomain.trim().toLowerCase()){\n      state.formError = `\u6700\u521d\u306e\u753b\u9762\u3067\u3054\u5165\u529b\u3044\u305f\u3060\u3044\u305f\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u300c${state.fromAddress.trim()}\u300d\u3067\u3059\u3002\\n\u3053\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u30c9\u30e1\u30a4\u30f3\u306f\u300c${state.yourDomain.trim()}\u300d\u3067\u3059\u3002\\n\u30c9\u30e1\u30a4\u30f3\u304c\u540c\u3058\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u306a\u3044\u3068\u767b\u9332\u304c\u3067\u304d\u307e\u305b\u3093\u3002\\n\u3053\u306e\u753b\u9762\u3067\u5165\u529b\u3057\u305f\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002`;\n      go(\"recordDetail\");\n      return;\n    }\n  }\n  state.formError = \"\";\n  state.dmarcAutoError = null;\n  go(\"dmarcCheckExternal\");\n}\n\nfunction recordDetailHtml(){\n  const r = RECORDS[state.record];\n  const body = `\n    <label class=\"dsg-inputlabel-lg\">\u8cea\u554f1\uff1aDMARC\u30ec\u30dd\u30fc\u30c8\uff08\u8a8d\u8a3c\u7d50\u679c\u306e\u96c6\u8a08\uff09\u3092\u53d7\u3051\u53d6\u308a\u305f\u3044\u3001\u81ea\u793e\u306e\u4efb\u610f\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u3042\u308c\u3070\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u7279\u306b\u306a\u3044\u30fb\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u7a7a\u6b04\u306e\u307e\u307e\u6b21\u3078\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\uff09<\/label>\n    <input type=\"text\" placeholder=\"\u4f8b: dmarc-report@example.co.jp\" value=\"${esc(state.dmarcRua)}\" oninput=\"DSG.state.dmarcRua=this.value;\">\n    ${state.formError ? `<div class=\"dsg-form-error\">${esc(state.formError).replace(\/\\n\/g, \"<br>\")}<\/div>` : \"\"}\n    <p class=\"dsg-note\">\u203b ruf\uff08\u8a8d\u8a3c\u5931\u6557\u30ec\u30dd\u30fc\u30c8\uff09\u3092\u6307\u5b9a\u3059\u308b\u5834\u5408\u306f\u3001DMARC\u3092\u8a2d\u5b9a\u3059\u308b\u30c9\u30e1\u30a4\u30f3\u5185\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u307f\u6307\u5b9a\u53ef\u80fd\u3067\u3059\u3002<\/p>\n    <p class=\"dsg-note\">\u203b \u30db\u30b9\u30c8\u540d\u306e\u5165\u529b\u65b9\u6cd5\u306fDNS\u30b5\u30fc\u30d0\u30fc\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u305f\u3081\u3001\u3053\u306e\u5f8c\u306e\u753b\u9762\u3067\u3054\u6848\u5185\u3057\u307e\u3059\u3002<\/p>\n  `;\n  return `\n    <h2>${r.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <p>\u4ee5\u4e0b\u306e\u5185\u5bb9\u306eDNS\u30ec\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n    ${body}\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.goNextFromRecordDetail()\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction dkimStep1Html(){\n  return `\n    <h2>${RECORDS.dkim.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <p>\u914d\u914d\u30e1\u30fc\u30eb\u304b\u3089DKIM\u306e\u8a2d\u5b9a\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u53d6\u5f97\u3057\u307e\u3057\u3087\u3046\uff01<\/p>\n    <h3>\u307e\u305aDKIM\u7f72\u540d\u4ed8\u304d\u30e1\u30fc\u30eb\u9001\u4fe1\u3092\u6709\u52b9\u5316\u3059\u308b\u8a2d\u5b9a\u304b\u3089\u884c\u3044\u307e\u3059<\/h3>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/haihaidkim.pdf.gif\" alt=\"DKIM\u8a2d\u5b9a\u6e96\u5099\u306e\u64cd\u4f5c\u624b\u9806\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <ol class=\"dsg-steps\">\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u7ba1\u7406\u753b\u9762\u306e\u300c\u5404\u7a2e\u8a2d\u5b9a\u300d\uff1e\u300c\u30b7\u30b9\u30c6\u30e0\u8a2d\u5b9a\u300d\uff1e\u300c\u57fa\u672c\u8a2d\u5b9a\u300d\u3092\u958b\u304f<\/li>\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u300cDKIM\u7f72\u540d\u4ed8\u30e1\u30fc\u30eb\u9001\u4fe1\u300d\u3092\u300c\u5229\u7528\u3059\u308b\u300d\u306b\u5909\u66f4\u3057\u3001\u753b\u9762\u4e0b\u306e\u300c\u5909\u66f4\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b<\/li>\n    <\/ol>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.go('dkimStep2')\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction dkimStep2Html(){\n  return `\n    <h2>${RECORDS.dkim.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <p>\u6b21\u306b\u3001DKIM\uff08\u4f5c\u6210\u8005\u7f72\u540d\uff09\u3092\u751f\u6210\u3057\u3001\u30bb\u30ec\u30af\u30bf\u3068\u516c\u958b\u9375\u306e\u60c5\u5831\u3092\u53d6\u5f97\u3057\u307e\u3057\u3087\u3046<\/p>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/haihaidkim2.pdf.gif\" alt=\"DKIM\u7f72\u540d\u4ed8\u30e1\u30fc\u30eb\u9001\u4fe1\u306e\u8a2d\u5b9a\u624b\u9806\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <ol class=\"dsg-steps\" start=\"3\">\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u7ba1\u7406\u753b\u9762\u306e\u300c\u5404\u7a2e\u8a2d\u5b9a\u300d\uff1e\u300cFrom\u306e\u8a2d\u5b9a\u300d\uff1e\u300cDKIM\u306e\u8a2d\u5b9a\u300d\u3068\u3044\u3046\u30bf\u30d6\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u300c\uff0b\u65b0\u898f\u767b\u9332\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b<\/li>\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u30bb\u30ec\u30af\u30bf\u540d\uff0820\u6587\u5b57\u4ee5\u5185\u306e\u534a\u89d2\u82f1\u6570\u5b57\u3068\u30cf\u30a4\u30d5\u30f3\uff09\u3068\u5bfe\u8c61\u30c9\u30e1\u30a4\u30f3\u3092\u5165\u529b\u3057\u3001\u300c\u767b\u9332\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b<br><span class=\"dsg-note\">\u203b \u30bb\u30ec\u30af\u30bf\u306b\u30a2\u30f3\u30c0\u30fc\u30d0\u30fc\uff08_\uff09\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002DKIM\u8a8d\u8a3c\u304c\u30a8\u30e9\u30fc\u306b\u306a\u308a\u307e\u3059\u306e\u3067\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002<\/span><\/li>\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">DKIM\u7f72\u540d\u304c\u4e00\u89a7\u3067\u78ba\u8a8d\u3067\u304d\u308b\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u305f\u3089\u3001\u5148\u307b\u3069\u767b\u9332\u3057\u305fDKIM\u7f72\u540d\u306e\u300c\u95b2\u89a7\u300d\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b<\/li>\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u8868\u793a\u3055\u308c\u305f\u516c\u958b\u9375\u3092\u30b3\u30d4\u30fc\u3059\u308b<\/li>\n    <\/ol>\n    ${state.formError ? `<div class=\"dsg-form-error\">${esc(state.formError).replace(\/\\n\/g, \"<br>\")}<\/div>` : \"\"}\n    <label class=\"dsg-inputlabel-lg\">\u4e0a\u8a18\u3067\u8a2d\u5b9a\u3057\u305f\u30bb\u30ec\u30af\u30bf\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u6b21\u306e\u753b\u9762\u3067\u30db\u30b9\u30c8\u540d\u306e\u78ba\u8a8d\u306b\u4f7f\u7528\u3057\u307e\u3059\u30fb\u5fc5\u9808\uff09<\/label>\n    <input type=\"text\" placeholder=\"\u30bb\u30ec\u30af\u30bf\u540d \u4f8b: haihai2024\" value=\"${esc(state.dkimSelector)}\" oninput=\"DSG.state.dkimSelector=this.value;\">\n    <label class=\"dsg-inputlabel-lg\">\u914d\u914d\u30e1\u30fc\u30eb\u4e0a\u3067\u30b3\u30d4\u30fc\u3057\u305f\u516c\u958b\u9375\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u6b21\u306e\u753b\u9762\u3067\u5165\u529b\u5185\u5bb9\u306e\u78ba\u8a8d\u306b\u4f7f\u7528\u3057\u307e\u3059\u30fb\u5fc5\u9808\uff09<\/label>\n    <input type=\"text\" placeholder=\"\u4f8b: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...\" value=\"${esc(state.dkimPubKey)}\" oninput=\"DSG.state.dkimPubKey=this.value;\">\n    <p class=\"dsg-note\">\u203b DKIM\u306e\u5024\uff08\u516c\u958b\u9375\uff09\u306f\u304a\u5ba2\u69d8\u3054\u3068\u306b\u7570\u306a\u308b\u305f\u3081\u3001\u5fc5\u305a\u914d\u914d\u30e1\u30fc\u30eb\u7ba1\u7406\u753b\u9762\u3067\u751f\u6210\u3055\u308c\u305f\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.goNextFromDkimStep2()\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('dkimStep1')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction goNextFromDkimStep2(){\n  if(!state.dkimSelector.trim() || !state.dkimPubKey.trim()){\n    state.formError = \"\u30bb\u30ec\u30af\u30bf\u540d\u3068\u516c\u958b\u9375\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\";\n    go(\"dkimStep2\");\n    return;\n  }\n  if(state.dkimSelector.indexOf(\"_\") !== -1){\n    state.formError = \"\u203b \u30bb\u30ec\u30af\u30bf\u306b\u30a2\u30f3\u30c0\u30fc\u30d0\u30fc\uff08_\uff09\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\";\n    go(\"dkimStep2\");\n    return;\n  }\n  state.formError = \"\";\n  go(\"dkimStep3\");\n}\n\nfunction dkimStep3Html(){\n  return `\n    <h2>${RECORDS.dkim.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <h3>\u3010\u4f5c\u6210\u3057\u305fDKIM\u7f72\u540d\u306e\u5229\u7528\u8a2d\u5b9a\u3011<\/h3>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/haihaidkim3.pdf.gif\" alt=\"\u4f5c\u6210\u3057\u305fDKIM\u7f72\u540d\u306e\u5229\u7528\u8a2d\u5b9a\u306e\u64cd\u4f5c\u624b\u9806\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <ol class=\"dsg-steps\">\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u7ba1\u7406\u753b\u9762\u306e\u300c\u5404\u7a2e\u8a2d\u5b9a\u300d\uff1e\u300cFrom\u306e\u8a2d\u5b9a\u300d\uff1e\u7f72\u540d\u306e\u8a2d\u5b9a\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b<\/li>\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u300c\u4f5c\u6210\u8005\u7f72\u540d\u300d\u306b\u30c1\u30a7\u30c3\u30af\u3057\u3001\u5148\u7a0b\u4f5c\u6210\u3057\u305f\u4f5c\u6210\u8005\u7f72\u540d\u3092\u30d7\u30eb\u30c0\u30a6\u30f3\u304b\u3089\u9078\u629e\u3059\u308b<\/li>\n      <li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">\u300c\u767b\u9332\u300d\u3092\u30af\u30ea\u30c3\u30af<\/li>\n    <\/ol>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.go('selectProvider')\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('dkimStep2')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction goNextFromSpfExisting(){\n  if(!state.spfExistingRecord.trim()){\n    state.formError = \"\u65e2\u5b58\u306e\u30ec\u30b3\u30fc\u30c9\u5185\u5bb9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\";\n    go(\"spfExistingInput\");\n    return;\n  }\n  state.formError = \"\";\n  go(\"spfIpQuestion\");\n}\n\nfunction spfExistingInputHtml(){\n  return `\n    <h2>${RECORDS.spf.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/pic-1.png\" alt=\"\u65e2\u5b58SPF\u30ec\u30b3\u30fc\u30c9\u306e\u78ba\u8a8d\u4f8b\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <p>\u4e0a\u8a18\u753b\u50cf\u4f8b\u306e\u3088\u3046\u306b\u3001\u65e2\u306b\u5b58\u5728\u3059\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n    ${state.formError ? `<div class=\"dsg-form-error\">${esc(state.formError).replace(\/\\n\/g, \"<br>\")}<\/div>` : \"\"}\n    <label class=\"dsg-inputlabel-lg\">\u65e2\u5b58\u306e\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306e\u5185\u5bb9\uff08\u5fc5\u9808\uff09<\/label>\n    <input type=\"text\" placeholder=\"\u4f8b: v=spf1 include:example.com ~all\" value=\"${esc(state.spfExistingRecord)}\" oninput=\"DSG.state.spfExistingRecord=this.value;\">\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.goNextFromSpfExisting()\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownNeedAppend')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction selectDmarcExisting(choice){\n  state.dmarcHasExisting = choice;\n  state.formError = \"\";\n  if(choice === \"yes\") go(\"dmarcAlreadyConfigured\");\n  else go(\"dmarcNeedsSetup\");\n}\n\nfunction dmarcAlreadyConfiguredHtml(){\n  return `\n    <h2>${RECORDS.dmarc.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <div class=\"dsg-alert\" style=\"background:#e7f7ee;border-color:#bfe8cf;color:var(--dsg-ok);\">\n      <b>\u8ffd\u52a0\u306e\u5bfe\u5fdc\u306f\u4e0d\u8981\u3067\u3059<\/b>\n      \u65e2\u306b\u300cv=DMARC1\u300d\u304b\u3089\u59cb\u307e\u308bDMARC\u30ec\u30b3\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u3053\u308c\u4ee5\u4e0a\u306e\u8a2d\u5b9a\u306f\u5fc5\u8981\u3042\u308a\u307e\u305b\u3093\u3002\n    <\/div>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.markAlreadyDone('dmarc')\">\u6b21\u306e\u8a2d\u5b9a\u3078\u9032\u3080<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('recordDetail')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction markAlreadyDone(record){\n  state.done.add(record);\n  dsgTrack('dsg_record_complete', {\n    event_category: 'dsg_wizard',\n    event_label: record,\n    record_type: record,\n    method: 'already_configured'\n  });\n  goClear(\"selectRecord\");\n}\n\nfunction dmarcCheckExternalHtml(){\n  const dom = esc(state.yourDomain.trim() || \"\uff08\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\uff09\");\n  const err = state.dmarcAutoError ? `<div class=\"dsg-form-error\">${esc(state.dmarcAutoError)}<\/div>` : \"\";\n  const dis = state.dmarcAutoLoading ? \"disabled\" : \"\";\n  const lbl = state.dmarcAutoLoading ? `<span class=\"dsg-spinner\"><\/span>\u78ba\u8a8d\u4e2d\u2026\uff08DNS\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u3044\u307e\u3059\uff09` : \"\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u81ea\u52d5\u3067\u30c1\u30a7\u30c3\u30af\u3059\u308b\";\n  return `\n    <h2>${RECORDS.dmarc.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <p>\u307e\u305a\u306f\u65e2\u306b\u300cv=DMARC1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u304c\u5b58\u5728\u3059\u308b\u304b\u8cb4\u793e\u30c9\u30e1\u30a4\u30f3\u300c<b>${dom}<\/b>\u300d\u3092\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n    ${err}\n    <div class=\"dsg-actions\"><button class=\"dsg-primary\" ${dis} onclick=\"DSG.runDmarcAutoCheck()\">${lbl}<\/button><\/div>\n    <details style=\"margin-top:18px;\"><summary class=\"dsg-note\" style=\"cursor:pointer;color:var(--dsg-main);\">\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u304c\u3046\u307e\u304f\u52d5\u304b\u306a\u3044\u5834\u5408\u306f\u3001\u5916\u90e8\u30c4\u30fc\u30eb\u3067\u624b\u52d5\u78ba\u8a8d\u3059\u308b<\/summary>\n      <div style=\"margin-top:10px;\"><button class=\"dsg-ghost\" onclick=\"DSG.go('dmarcManualCheck')\">\u5916\u90e8\u30c4\u30fc\u30eb\uff08dmarcian\uff09\u3067\u624b\u52d5\u78ba\u8a8d\u3059\u308b\u753b\u9762\u3078<\/button><\/div>\n    <\/details>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('recordDetail')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction dmarcManualCheckHtml(){\n  return `\n    <h2>${RECORDS.dmarc.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <p>\u4ee5\u4e0b\u306e\u5916\u90e8\u30c1\u30a7\u30c3\u30ab\u30fc\u30c4\u30fc\u30eb\u3067\u624b\u52d5\u78ba\u8a8d\u3057\u3001\u4e0b\u306e\u30dc\u30bf\u30f3\u304b\u3089\u7d50\u679c\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002<br><a href=\"https:\/\/dmarcian.com\/ja\/dmarc-inspector\/\" target=\"_blank\" rel=\"noopener\">https:\/\/dmarcian.com\/ja\/dmarc-inspector\/<\/a><\/p>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/dmarccheck.gif\" alt=\"DMARC\u30ec\u30b3\u30fc\u30c9\u306e\u78ba\u8a8d\u624b\u9806\uff08dmarcian DMARC\u30a4\u30f3\u30b9\u30da\u30af\u30bf\u30fc\uff09\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDmarcExisting('yes')\">\u65e2\u306b\u300cv=DMARC1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u304c\u5b58\u5728\u3059\u308b<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectDmarcExisting('no')\">\u5b58\u5728\u3057\u306a\u3044<\/button>\n    <\/div>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('dmarcCheckExternal')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nasync function runDmarcAutoCheck(){\n  state.dmarcAutoLoading = true;\n  state.dmarcAutoError = null;\n  go(\"dmarcCheckExternal\");\n  try{\n    const r = await resolveDmarc(state.yourDomain);\n    state.dmarcAutoLoading = false;\n    selectDmarcExisting(r.hasDmarc ? \"yes\" : \"no\");\n  }catch(e){\n    state.dmarcAutoLoading = false;\n    state.dmarcAutoError = \"\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u304a\u624b\u6570\u3067\u3059\u304c\u4e0b\u306e\u5916\u90e8\u30c1\u30a7\u30c3\u30ab\u30fc\u3067\u624b\u52d5\u78ba\u8a8d\u3057\u3001\u7d50\u679c\u30dc\u30bf\u30f3\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002\";\n    go(\"dmarcCheckExternal\");\n  }\n}\n\nfunction dmarcNeedsSetupHtml(){\n  const dom = esc(state.yourDomain.trim() || \"\uff08\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\uff09\");\n  return `\n    <h2>DMARC\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059<\/h2>\n    <p>\u300c${dom}\u300d\u306e\u30c9\u30e1\u30a4\u30f3\u306fDMARC\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002<br>\u6b21\u306e\u753b\u9762\u3078\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.go('selectProvider')\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('dmarcCheckExternal')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction selectProviderHtml(){\n  const items = Object.keys(PROVIDERS).map(k=>{\n    const p = PROVIDERS[k];\n    return `<button class=\"dsg-opt\" onclick=\"DSG.selectProvider('${k}')\">${p.name}<\/button>`;\n  }).join(\"\");\n  const backTarget = state.record === \"spf\" ? \"spfIpQuestion\" : (state.record === \"dmarc\" ? \"dmarcNeedsSetup\" : \"dkimStep3\");\n  return `\n    <h2>\u3054\u5229\u7528\u4e2d\u306eDNS\u30b5\u30fc\u30d0\u30fc\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044<\/h2>\n    <p>${RECORDS[state.record].fullName} \u306e\u8a2d\u5b9a\u3092\u3069\u306eDNS\u30b5\u30fc\u30d0\u30fc\uff08\u30c9\u30e1\u30a4\u30f3\u7ba1\u7406\u753b\u9762\uff09\u3067\u884c\u3044\u307e\u3059\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">${items}<\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('${backTarget}')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectProvider(key){\n  state.provider = key;\n  const isDnsHandoffReason = state.dnsNoAccessReason === \"other-company\" || state.dnsNoAccessReason === \"no-permission\";\n  if(state.record === \"dkim\" && isDnsHandoffReason) go(\"dkimEmailTemplate\");\n  else go(\"providerSteps\");\n}\n\nfunction templateHostLine(key){\n  const sub = subHostFor(key);\n  if(state.provider === \"other\"){\n    const full = fullHostFor(key);\n    return `${sub}\\n\u3000\uff08DNS\u30b5\u30fc\u30d0\u30fc\u306b\u3088\u3063\u3066\u306f\u300c${full}\u300d\u306e\u3088\u3046\u306b\u30c9\u30e1\u30a4\u30f3\u307e\u3067\u542b\u3081\u3066\u5165\u529b\u3059\u308b\u5834\u5408\u3082\u3042\u308a\u307e\u3059\uff09`;\n  }\n  return sub;\n}\n\nfunction buildDkimEmailBody(){\n  const p = PROVIDERS[state.provider] || PROVIDERS.other;\n  const dkimHost = templateHostLine(\"dkim\");\n  const dmarcHost = templateHostLine(\"dmarc\");\n  const dkimValue = `v=DKIM1;p=${state.dkimPubKey.trim()}`;\n  return `\u300c${state.yourDomain.trim()}\u300d\u306e\u30c9\u30e1\u30a4\u30f3\u306b\u5bfe\u3057\u3066\u3001SPF\u3001DKIM\u3001DMARC\u3092\u305d\u308c\u305e\u308c\u4ee5\u4e0b\u306e\u901a\u308a\u306b\u8a2d\u5b9a\u3057\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u3067\u3057\u3087\u3046\u304b\u3002\n\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u25c6SPF\n\u4e0b\u8a18\u306e\u6587\u5b57\u3092DNS\u30b5\u30fc\u30d0\u306eTXT\u30ec\u30b3\u30fc\u30c9\u3078\u8ffd\u8a18\u3057\u3066\u304f\u3060\u3055\u3044\u3002\ninclude:spf.haihaimail.jp\n\n\u3010\u4f8b\u3011\nTXT \"v=spf1 ip4:\u9001\u4fe1\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0\u306eIP\u30a2\u30c9\u30ec\u30b9 include:spf.haihaimail.jp ~all\"\n\n\u30de\u30cb\u30e5\u30a2\u30eb\uff1ahttps:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/arrivalimprovement\/spfset\/\n\n\u203b\u65e2\u306b\u767b\u9332\u6e08\u307f\u306eSPF\u30ec\u30b3\u30fc\u30c9\u306b\u300cinclude:spf.haihaimail.jp\u300d\u306e\u8a18\u8ff0\u304c\u3042\u308b\u5834\u5408\u306f\n\u3000\u8a2d\u5b9a\u5909\u66f4\u4e0d\u8981\u3067\u3059\u3002\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u25c6DKIM\n\u4e0b\u8a18\u306e\u6587\u5b57\u5217\u3092\u8cb4\u793e\u306eDNS\u30b5\u30fc\u30d0\u306eTXT\u30ec\u30b3\u30fc\u30c9\u3078\u8ffd\u52a0\u767b\u9332\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u30fb${p.fields.host}\uff1a${dkimHost}\n\u30fb${p.fields.value}\uff1a${dkimValue}\n\n\u30de\u30cb\u30e5\u30a2\u30eb\uff1ahttps:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/arrivalimprovement\/dkimset\/\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u25c6DMARC\n\u4e0b\u8a18\u306e\u6587\u5b57\u5217\u3092\u8cb4\u793e\u306eDNS\u30b5\u30fc\u30d0\u306eTXT\u30ec\u30b3\u30fc\u30c9\u3078\u8ffd\u52a0\u767b\u9332\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u203b\u65e2\u306b\u767b\u9332\u6e08\u307f\u306eDMARC\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308b\u5834\u5408\u306f\u8a2d\u5b9a\u5909\u66f4\u4e0d\u8981\u3067\u3059\u3002\n\n\u25bd\u8a18\u8ff0\u3059\u308b\u30ec\u30b3\u30fc\u30c9\n${p.fields.host}\uff1a${dmarcHost}\n${p.fields.value}\uff1av=DMARC1; p=none;\n\n\u30de\u30cb\u30e5\u30a2\u30eb\uff1ahttps:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/arrivalimprovement\/dmarc-set\/\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`;\n}\n\nfunction dkimEmailTemplateHtml(){\n  const body = buildDkimEmailBody();\n  return `\n    <h2>DNS\u8a2d\u5b9a\u3054\u62c5\u5f53\u8005\u69d8\u3078\u306e\u3054\u9023\u7d61\u5185\u5bb9<\/h2>\n    <p>\u4ee5\u4e0b\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001DNS\u30b5\u30fc\u30d0\u306e\u8a2d\u5b9a\u3092\u7ba1\u7406\u3057\u3066\u3044\u308b\u3054\u62c5\u5f53\u8005\u69d8\u3078\u30e1\u30fc\u30eb\u3067\u304a\u9001\u308a\u304f\u3060\u3055\u3044\u3002<\/p>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" data-copy=\"${esc(body)}\" onclick=\"DSG.copyFromButtonEl(this)\">\u30e1\u30fc\u30eb\u5185\u5bb9\u3092\u30b3\u30d4\u30fc<\/button>\n    <\/div>\n    <div class=\"dsg-record-box\">${esc(body)}<\/div>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u6700\u521d\u306b\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction copyBtn(text){\n  return `<button type=\"button\" class=\"dsg-copy-btn\" data-copy=\"${esc(text)}\" onclick=\"DSG.copyFromButtonEl(this)\">\u30b3\u30d4\u30fc<\/button>`;\n}\n\nfunction providerStepsHtml(){\n  const r = RECORDS[state.record];\n  const p = PROVIDERS[state.provider];\n  const isSpfEdit = state.record === \"spf\" && state.spfHasExisting === \"yes\" && state.spfExistingRecord.trim();\n  const stepsArr = (isSpfEdit && p.editSteps) ? p.editSteps : p.steps;\n  const stepsHtml = stepsArr.map(s=>`<li style=\"list-style-type:decimal !important;list-style-position:outside !important;display:list-item !important;\">${s}<\/li>`).join(\"\");\n  let valueText = \"\";\n  let existingNote = \"\";\n  if(state.record === \"spf\"){\n    if(state.spfHasExisting === \"yes\" && state.spfExistingRecord.trim()){\n      valueText = mergeSpfRecord(state.spfExistingRecord, state.spfIp);\n      const ipNote = state.spfIp.trim() ? \"\u8cea\u554f1\u3067\u5165\u529b\u3044\u305f\u3060\u3044\u305f\u9001\u4fe1\u5143IP\u30a2\u30c9\u30ec\u30b9\u3068\u3001\" : \"\";\n      existingNote = `<p class=\"dsg-note\">\u203b \u65e2\u306b\u5b58\u5728\u3059\u308b\u300cv=spf1\u300d\u304b\u3089\u59cb\u307e\u308b\u30ec\u30b3\u30fc\u30c9\u306b\u3001${ipNote}\u300cinclude:spf.haihaimail.jp\u300d\u3092\u8ffd\u8a18\u3057\u305f\u5185\u5bb9\u3067\u3059\u3002\u65b0\u3057\u304f\u5225\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u65e2\u5b58\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u4e0b\u8a18\u306e\u5185\u5bb9\u306b\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\uff08\u540c\u4e00\u30c9\u30e1\u30a4\u30f3\u306bSPF\u30ec\u30b3\u30fc\u30c9\u304c2\u3064\u4ee5\u4e0a\u3042\u308b\u3068\u8a8d\u8a3c\u304c\u7121\u52b9\u306b\u306a\u308a\u307e\u3059\uff09\u3002<\/p>\n<p class=\"dsg-note\">\u203b\u4ed5\u69d8\u4e0a\u3001\u4e00\u90e8\u306e\u753b\u9762\u3067\u30a8\u30f3\u30c8\u30ea\u30fc\u540d\u306b\u81ea\u52d5\u7684\u306b\u300c@\u300d\u304c\u8868\u793a\u3055\u308c\u305f\u308a\u3001\u7a7a\u6b04\u304c\u300c@\u300d\u3068\u540c\u7b49\u306e\u6271\u3044\u306b\u306a\u3063\u305f\u308a\u3057\u307e\u3059\u3002<\/p>`;\n    } else {\n      valueText = buildSpfValue();\n    }\n  } else if(state.record === \"dmarc\"){\n    valueText = buildDmarcValue();\n  } else {\n    valueText = `v=DKIM1;p=${state.dkimPubKey.trim()}`;\n  }\n\n  let hostBlock = \"\";\n  if(state.provider === \"other\"){\n    const sub = subHostFor(state.record);\n    const subDisplay = sub || \"\u7a7a\u6b04\u306e\u307e\u307e\u3001\u307e\u305f\u306f\u300c@\u300d\uff08DNS\u30b5\u30fc\u30d0\u30fc\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\uff09\";\n    const fullDisplay = fullHostFor(state.record);\n    hostBlock = `\n      <p class=\"dsg-note\"><b>${esc(p.fields.host)}\u6b04\u306e\u5165\u529b\u65b9\u6cd5\u306f\u3001DNS\u30b5\u30fc\u30d0\u30fc\u306b\u3088\u3063\u30662\u30d1\u30bf\u30fc\u30f3\u3042\u308a\u307e\u3059\u3002<\/b><\/p>\n      <p class=\"dsg-note\">\u2460 \u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u90e8\u5206\u3060\u3051\u3092\u5165\u529b\u3057\u3001\u30c9\u30e1\u30a4\u30f3\u90e8\u5206\u306f\u81ea\u52d5\u7684\u306b\u88dc\u5b8c\u3055\u308c\u308b\u30bf\u30a4\u30d7\uff08\u4e3b\u6d41\uff09\u3002\u5165\u529b\u6b04\u306e\u53f3\u5074\u306b\u300c@example.com\u300d\u7b49\u306e\u30c9\u30e1\u30a4\u30f3\u304c\u8584\u3044\u6587\u5b57\u3067\u3042\u3089\u304b\u3058\u3081\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3053\u3061\u3089\u3067\u3059\u3002<\/p>\n      <div class=\"dsg-copy-row\"><div class=\"dsg-record-box\">${esc(subDisplay)}<\/div>${sub ? copyBtn(sub) : \"\"}<\/div>\n      <p class=\"dsg-note\">\u2461 \u30c9\u30e1\u30a4\u30f3\u307e\u3067\u542b\u3081\u3066\u30d5\u30eb\u3067\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u30bf\u30a4\u30d7\uff08\u672b\u5c3e\u306b\u300c.\u300d\u3092\u4ed8\u3051\u308b\u5834\u5408\u3082\u3042\u308a\u307e\u3059\uff09\u3002<\/p>\n      <div class=\"dsg-copy-row\"><div class=\"dsg-record-box\" id=\"dsg-hostFullBox\">${esc(fullDisplay)}<\/div><button type=\"button\" class=\"dsg-copy-btn\" id=\"dsg-hostFullCopy\" data-copy=\"${esc(fullDisplay)}\" onclick=\"DSG.copyFromButtonEl(this)\">\u30b3\u30d4\u30fc<\/button><\/div>\n      <p class=\"dsg-note\">\u203b \u8ff7\u3063\u305f\u3068\u304d\u306f\u3001\u65e2\u5b58\u306eTXT\/CNAME\u30ec\u30b3\u30fc\u30c9\u306e\u30db\u30b9\u30c8\u540d\u6b04\u304c\u300cwww\u300d\u306e\u3088\u3046\u306b\u30c9\u30e1\u30a4\u30f3\u3092\u542b\u307e\u306a\u3044\u8868\u8a18\u306b\u306a\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u542b\u307e\u306a\u3044\u8868\u8a18\u3067\u3042\u308c\u3070\u2460\u306e\u30bf\u30a4\u30d7\u3067\u3059\u3002\u2460\u306e\u30bf\u30a4\u30d7\u3067\u2461\u306e\u5185\u5bb9\u3092\u30d5\u30eb\u5165\u529b\u3059\u308b\u3068\u3001\u30c9\u30e1\u30a4\u30f3\u304c\u4e8c\u91cd\u306b\u767b\u9332\u3055\u308c\u6b63\u3057\u304f\u6a5f\u80fd\u3057\u307e\u305b\u3093\u306e\u3067\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002<\/p>\n    `;\n  } else {\n    const sub = subHostFor(state.record);\n    const hostValue = sub ? sub : (state.provider === \"sakura\" ? \"@\" : \"\");\n    const hostDisplay = sub ? sub : (state.provider === \"sakura\" ? \"@\" : \"\u7a7a\u6b04\u306e\u307e\u307e\uff08\u4f55\u3082\u5165\u529b\u3057\u307e\u305b\u3093\uff09\");\n    hostBlock = `\n      <div class=\"dsg-field-row-copy\"><div class=\"dsg-k\" style=\"min-width:120px;color:var(--dsg-sub);font-weight:bold;\">${esc(p.fields.host)}<\/div><div class=\"dsg-v\">${esc(hostDisplay)}<\/div>${hostValue ? copyBtn(hostValue) : \"\"}<\/div>\n      ${sub ? `<p class=\"dsg-note\">\u203b \u3053\u306e\u6b04\u306b\u306f\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u90e8\u5206\u3060\u3051\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\u90e8\u5206\u306f\u81ea\u52d5\u7684\u306b\u88dc\u5b8c\u3055\u308c\u308b\u305f\u3081\u3001\u30c9\u30e1\u30a4\u30f3\u307e\u3067\u5165\u529b\u3059\u308b\u3068\u30c9\u30e1\u30a4\u30f3\u304c\u4e8c\u91cd\u306b\u767b\u9332\u3055\u308c\u6b63\u3057\u304f\u6a5f\u80fd\u3057\u307e\u305b\u3093\u3002<\/p>` : \"\"}\n    `;\n  }\n\n  return `\n    <h2>${p.name} \u3067\u306e\u8a2d\u5b9a\u624b\u9806\uff08${r.label}\uff09<\/h2>\n    ${hostBlock}\n    <div class=\"dsg-field-row\"><div class=\"dsg-k\">${esc(p.fields.type)}<\/div><div class=\"dsg-v\">TXT<\/div><\/div>\n    <div class=\"dsg-field-row-copy\"><div class=\"dsg-k\" style=\"min-width:120px;color:var(--dsg-sub);font-weight:bold;\">${esc(p.fields.value)}<\/div><div class=\"dsg-v\">${esc(valueText)}<\/div>${copyBtn(valueText)}<\/div>\n    ${existingNote}\n    <h3>\u64cd\u4f5c\u624b\u9806<\/h3>\n    <ol class=\"dsg-steps\">${stepsHtml}<\/ol>\n    ${state.provider === \"sakura\" ? `<p class=\"dsg-note\">\u25bc\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3000\u8a2d\u5b9a\u30de\u30cb\u30e5\u30a2\u30eb<br><a href=\"https:\/\/help.sakura.ad.jp\/domain\/2302\/#index_03-03\" target=\"_blank\" rel=\"noopener\">https:\/\/help.sakura.ad.jp\/domain\/2302\/#index_03-03<\/a><\/p>` : \"\"}\n    <div class=\"dsg-alert\"><b>\u26a0 \u8a2d\u5b9a\u3067\u304d\u306a\u3044\u5834\u5408<\/b>${p.alert}<\/div>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.markDone()\">\u8a2d\u5b9a\u3067\u304d\u307e\u3057\u305f<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectProvider')\">DNS\u30b5\u30fc\u30d0\u30fc\u3092\u9078\u3073\u76f4\u3059<\/button>\n    <\/div>\n  `;\n}\n\nfunction markDone(){\n  state.done.add(state.record);\n  dsgTrack('dsg_record_complete', {\n    event_category: 'dsg_wizard',\n    event_label: state.record,\n    record_type: state.record,\n    method: 'manual'\n  });\n  if(state.record === \"spf\" && state.spfEntryUnknown){\n    go(\"spfCompleteInterim\");\n  } else {\n    go(\"afterDone\");\n  }\n}\n\nfunction afterDoneHtml(){\n  const r = RECORDS[state.record];\n  const allDone = Object.keys(RECORDS).every(k=>state.done.has(k));\n  if(allDone){\n    return `\n      <div class=\"dsg-celebrate\">\n        <div class=\"dsg-big\">\ud83c\udf89<\/div>\n        <h2>${r.label}\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\uff01<\/h2>\n        <p>SPF\u30fbDKIM\u30fbDMARC\u3059\u3079\u3066\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u304a\u75b2\u308c\u69d8\u3067\u3057\u305f\u3002<\/p>\n        <p class=\"dsg-note\">DNS\u306e\u53cd\u6620\u306b\u306f\u6570\u5341\u5206\u301c72\u6642\u9593\u7a0b\u5ea6\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u53cd\u6620\u5f8c\u3001\u9001\u4fe1\u30c6\u30b9\u30c8\u3084\u5916\u90e8\u306e\u78ba\u8a8d\u30c4\u30fc\u30eb\u3067\u8a8d\u8a3c\u7d50\u679c\uff08spf=pass\u7b49\uff09\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002<\/p>\n        <div class=\"dsg-actions\" style=\"justify-content:center;\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc\u306b\u623b\u308b<\/button><\/div>\n      <\/div>\n    `;\n  }\n  return `\n    <div class=\"dsg-celebrate\">\n      <div class=\"dsg-big\">\u2705<\/div>\n      <h2>${r.label}\u306e\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3057\u307e\u3057\u305f\uff01<\/h2>\n      <p>\u6b21\u306b\u4f55\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u304b\uff1f<\/p>\n      <div class=\"dsg-actions\" style=\"justify-content:center;\"><button class=\"dsg-primary\" onclick=\"DSG.goClear('selectRecord')\">\u6b21\u306e\u8a2d\u5b9a\u3078\u9032\u3080<\/button><\/div>\n    <\/div>\n  `;\n}\n\nfunction spfIpQuestionHtml(){\n  return `\n    <h2>${RECORDS.spf.fullName} \u306e\u8a2d\u5b9a\u5185\u5bb9<\/h2>\n    <label class=\"dsg-inputlabel-lg\">\u914d\u914d\u30e1\u30fc\u30eb\u4ee5\u5916\u306b\u3001\u81ea\u793e\u306e\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u3082\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u3067\u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u3066\u3044\u307e\u3059\u304b\uff1f\u9001\u4fe1\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u305d\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff08\u9001\u4fe1\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u3084\u308f\u304b\u3089\u306a\u3044\u5834\u5408\u306f\u7a7a\u6b04\u306e\u307e\u307e\u3067\u6b21\u3078\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\uff09<\/label>\n    <input type=\"text\" placeholder=\"\u4f8b: 203.0.113.1\" value=\"${esc(state.spfIp)}\" oninput=\"DSG.state.spfIp=this.value;\">\n    <p class=\"dsg-note\">\u203b \u30db\u30b9\u30c8\u540d\u306e\u5165\u529b\u65b9\u6cd5\u306fDNS\u30b5\u30fc\u30d0\u30fc\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u305f\u3081\u3001\u3053\u306e\u5f8c\u306e\u753b\u9762\u3067\u3054\u6848\u5185\u3057\u307e\u3059\u3002<\/p>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.goNextFromSpfIpQuestion()\">\u6b21\u3078\uff1aDNS\u30b5\u30fc\u30d0\u30fc\u3092\u9078\u3076<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.backFromSpfIpQuestion()\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction goNextFromSpfIpQuestion(){\n  go(\"selectProvider\");\n}\n\nfunction backFromSpfIpQuestion(){\n  if(state.spfAutoFlow) go(\"spfNeedsSetup\");\n  else if(state.spfHasExisting === \"yes\") go(\"spfExistingInput\");\n  else go(\"spfUnknownNotVisible\");\n}\n\nfunction spfNeedsSetupHtml(){\n  const dom = esc(state.yourDomain.trim() || \"\uff08\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\uff09\");\n  return `\n    <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059<\/h2>\n    <p>\u300c${dom}\u300d\u306e\u30c9\u30e1\u30a4\u30f3\u306fSPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002<br>\u6b21\u306e\u753b\u9762\u3078\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" onclick=\"DSG.go('spfIpQuestion')\">\u6b21\u3078<\/button>\n      <button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfAutoCheck')\">\u623b\u308b<\/button>\n    <\/div>\n  `;\n}\n\nfunction goToSpfUnknownFlow(){\n  state.record = \"spf\";\n  state.spfUnknownVisible = null;\n  state.spfUnknownFoundHaihai = null;\n  state.spfEntryUnknown = true;\n  state.spfAutoError = null;\n  state.spfAutoFlow = null;\n  go(\"spfAutoCheck\");\n}\n\nfunction selectSpfUnknownVisible(choice){\n  state.spfUnknownVisible = choice;\n  state.spfUnknownFoundHaihai = null;\n  if(choice === \"no\") go(\"spfUnknownNotVisible\");\n  else go(\"spfUnknownCheck1\");\n}\n\nfunction spfAutoCheckHtml(){\n  const dom = esc(state.yourDomain.trim() || \"\uff08\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\uff09\");\n  const err = state.spfAutoError\n    ? `<div class=\"dsg-form-error\">${esc(state.spfAutoError)}<br>\u304a\u624b\u6570\u3067\u3059\u304c\u4e0b\u306e\u300c\u5916\u90e8\u30c4\u30fc\u30eb\u3067\u624b\u52d5\u78ba\u8a8d\u3059\u308b\u300d\u304b\u3089\u304a\u9032\u307f\u304f\u3060\u3055\u3044\u3002<\/div>` : \"\";\n  const btnLabel = state.spfAutoLoading ? `<span class=\"dsg-spinner\"><\/span>\u78ba\u8a8d\u4e2d\u2026\uff08DNS\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u3044\u307e\u3059\uff09` : \"\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u81ea\u52d5\u3067\u30c1\u30a7\u30c3\u30af\u3059\u308b\";\n  const dis = state.spfAutoLoading ? \"disabled\" : \"\";\n  return `\n    <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u72b6\u6cc1\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046<\/h2>\n    <p>\u8cb4\u793e\u30c9\u30e1\u30a4\u30f3\u300c<b>${dom}<\/b>\u300d\u306bSPF\u30ec\u30b3\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002<br>\u203b\u4ee5\u4e0b\u306e\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u5f8c30\u79d2\u307b\u3069\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002<\/p>\n    ${err}\n    <div class=\"dsg-actions\">\n      <button class=\"dsg-primary\" ${dis} onclick=\"DSG.runSpfAutoCheck()\">${btnLabel}<\/button>\n    <\/div>\n    <p class=\"dsg-note\" style=\"margin-top:18px;\">\u203b \u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u306f\u5f53\u30b5\u30a4\u30c8\u306e\u30b5\u30fc\u30d0\u30fc\u7d4c\u7531\u3067DNS\u3078\u554f\u3044\u5408\u308f\u305b\u307e\u3059\u3002\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u305f\u76f4\u5f8c\u306f\u53cd\u6620\uff08\u6570\u5341\u5206\u301c72\u6642\u9593\uff09\u524d\u306e\u305f\u3081\u300c\u672a\u8a2d\u5b9a\u300d\u3068\u8868\u793a\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u6642\u9593\u3092\u304a\u3044\u3066\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002<\/p>\n    <details style=\"margin-top:10px;\"><summary class=\"dsg-note\" style=\"cursor:pointer;color:var(--dsg-main);\">\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u304c\u3046\u307e\u304f\u52d5\u304b\u306a\u3044\u5834\u5408\u306f\u3001\u5916\u90e8\u30c4\u30fc\u30eb\u3067\u624b\u52d5\u78ba\u8a8d\u3059\u308b<\/summary>\n      <div style=\"margin-top:10px;\"><button class=\"dsg-ghost\" onclick=\"DSG.go('spfUnknownCheck1')\">\u5916\u90e8\u30c4\u30fc\u30eb\uff08dmarcian\uff09\u3067\u624b\u52d5\u78ba\u8a8d\u3059\u308b\u753b\u9762\u3078<\/button><\/div>\n    <\/details>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nasync function runSpfAutoCheck(){\n  state.spfAutoLoading = true;\n  state.spfAutoError = null;\n  go(\"spfAutoCheck\");   \/\/ \u300c\u78ba\u8a8d\u4e2d\u2026\u300d\u3092\u5148\u306b\u63cf\u753b\n  try{\n    const r = await resolveSpf(state.yourDomain);\n    state.spfAuto = r;\n    state.spfAutoLoading = false;\n    if(r.hasSpf && r.foundHaihai){\n      \/\/ \u65e2\u306b spf.haihaimail.jp \u3092\u542b\u3080\uff08\u5165\u308c\u5b50\u542b\u3080\uff09\u2192 \u8a2d\u5b9a\u6e08\u307f\n      state.done.add(\"spf\");\n      go(\"spfUnknownAlreadyOk\");\n    } else if(r.hasSpf && r.exceeded){\n      \/\/ SPF\u306f\u3042\u308b\u304c10\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u8d85\u904e\u3067\u8ffd\u8a18\u4e0d\u53ef\u306e\u6050\u308c\n      go(\"spfUnknownLookupFull\");\n    } else if(r.hasSpf){\n      \/\/ SPF\u306f\u3042\u308b\u304c haihaimail \u672a\u53d6\u308a\u8fbc\u307f \u2192 \u65e2\u5b58\u30ec\u30b3\u30fc\u30c9\u306e\u5185\u5bb9\u3092\u81ea\u52d5\u30d7\u30ea\u30d5\u30a3\u30eb\u3057\u3001\u8a2d\u5b9a\u8981\u306e\u901a\u77e5\u753b\u9762\u3078\n      state.record = \"spf\"; state.spfHasExisting = \"yes\";\n      state.spfExistingRecord = r.apex || \"\";\n      state.formError = \"\"; state.spfAutoFlow = true;\n      go(\"spfNeedsSetup\");\n    } else {\n      \/\/ SPF\u30ec\u30b3\u30fc\u30c9\u81ea\u4f53\u304c\u7121\u3044 \u2192 \u65b0\u898f\u8ffd\u52a0\u304c\u5fc5\u8981\u306a\u65e8\u306e\u901a\u77e5\u753b\u9762\u3078\n      state.record = \"spf\"; state.spfHasExisting = \"no\";\n      state.formError = \"\"; state.spfAutoFlow = true;\n      go(\"spfNeedsSetup\");\n    }\n  }catch(e){\n    state.spfAutoLoading = false;\n    state.spfAutoError = \"\u81ea\u52d5\u30c1\u30a7\u30c3\u30af\u306b\u5931\u6557\u3057\u307e\u3057\u305f\uff08\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u307e\u305f\u306fDNS\u3078\u306e\u901a\u4fe1\u304c\u30d6\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\uff09\u3002\";\n    go(\"spfAutoCheck\");\n  }\n}\n\nfunction spfUnknownCheck1Html(){\n  const dom = esc(state.yourDomain.trim() || \"\uff08\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\uff09\");\n  let extra = \"\";\n  if(state.spfUnknownVisible === \"yes\"){\n    extra = `\n      <div class=\"dsg-alert\" style=\"background:#e7f7ee;border-color:#bfe8cf;color:var(--dsg-ok);\">\n        <b>\u30cf\u30a4\u30bf\u30c3\u30c1\uff01SPF\u30ec\u30b3\u30fc\u30c9\u306f\u6709\u52b9\u3067\u3059\u304c...\u3068\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u5834\u5408<\/b>\n        \u3055\u3089\u306b\u3001Ctrl\uff0bF\u3067\u300cspf.haihaimail.jp\u300d\u3092\u753b\u9762\u4e0a\u3067\u691c\u7d22\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n      <\/div>\n      <p>\u300cspf.haihaimail.jp\u300d\u304c\u30c1\u30a7\u30c3\u30ab\u30fc\u30c4\u30fc\u30eb\u306e\u753b\u9762\u4e0a\u306b\u3042\u308a\u307e\u3057\u305f\u304b\uff1f<\/p>\n      <div class=\"dsg-btn-grid\">\n        <button class=\"dsg-opt\" onclick=\"DSG.selectSpfHaihaiFound('yes')\">\u3042\u3063\u305f<\/button>\n        <button class=\"dsg-opt\" onclick=\"DSG.selectSpfHaihaiFound('no')\">\u306a\u304b\u3063\u305f<\/button>\n      <\/div>\n    `;\n  }\n  return `\n    <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u72b6\u6cc1\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046<\/h2>\n    <p>\u307e\u305a\u306fSPF\u30ec\u30b3\u30fc\u30c9\u304c\u65e2\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u4e00\u7dd2\u306b\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff01<\/p>\n    <p>[1] \u4ee5\u4e0b\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u691c\u7d22\u6b04\u306b\u8cb4\u793e\u306e\u30c9\u30e1\u30a4\u30f3\u300c${dom}\u300d\u3092\u5165\u529b\u3057\u3066\u300c\u30c9\u30e1\u30a4\u30f3\u3092\u8abf\u67fb\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n    <p class=\"dsg-note\">\u25bcSPF\u8a2d\u5b9a\u72b6\u6cc1\u30c1\u30a7\u30c3\u30ab\u30fc<br><a href=\"https:\/\/dmarcian.com\/ja\/spf-survey\/\" target=\"_blank\" rel=\"noopener\">https:\/\/dmarcian.com\/ja\/spf-survey\/<\/a><\/p>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/spfcheck.gif\" alt=\"SPF\u8a2d\u5b9a\u72b6\u6cc1\u30c1\u30a7\u30c3\u30ab\u30fc\u306e\u64cd\u4f5c\u624b\u9806\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <p>[2] \u4e0a\u8a18\u52d5\u753b\u306e\u2461\u306e\u3088\u3046\u306b\u3001\u30cf\u30a4\u30bf\u30c3\u30c1\uff01SPF\u30ec\u30b3\u30fc\u30c9\u306f\u6709\u52b9\u3067\u3059\u304c...\u3068\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfUnknownVisible('yes')\">\u8868\u793a\u3055\u308c\u3066\u3044\u308b<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfUnknownVisible('no')\">\u8868\u793a\u3055\u308c\u3066\u3044\u306a\u3044<\/button>\n    <\/div>\n    ${extra}\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectSpfHaihaiFound(choice){\n  state.spfUnknownFoundHaihai = choice;\n  if(choice === \"yes\"){\n    state.done.add(\"spf\");\n    go(\"spfUnknownAlreadyOk\");\n  } else {\n    go(\"spfUnknownNeedAppend\");\n  }\n}\n\nfunction spfUnknownAlreadyOkHtml(){\n  const nextBtn = state.spfEntryUnknown\n    ? `<button class=\"dsg-primary\" onclick=\"DSG.goToDkimFromSpfComplete()\">\u6b21\u3078<\/button>`\n    : `<button class=\"dsg-primary\" onclick=\"DSG.goClear('selectRecord')\">\u6b21\u306e\u8a2d\u5b9a\u3078\u9032\u3080<\/button>`;\n  return `\n    <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u72b6\u6cc1<\/h2>\n    <div class=\"dsg-alert\" style=\"background:#e7f7ee;border-color:#bfe8cf;color:var(--dsg-ok);\">\n      <b>\u8a2d\u5b9a\u6e08\u307f\u3067\u3059<\/b>\n      \u65e2\u306bSPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3057\u3066\u3044\u307e\u3059\u3002\u8ffd\u52a0\u306e\u8a2d\u5b9a\u306f\u4e0d\u8981\u3067\u3059\u3002\n    <\/div>\n    <p>${state.spfEntryUnknown ? \"\u6b21\u306bDKIM\u3092\u8a2d\u5b9a\u3057\u307e\u3057\u3087\u3046\uff01\" : \"DKIM\u3001DMARC\u3082\u8a2d\u5b9a\u304c\u3067\u304d\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002\"}<\/p>\n    <div class=\"dsg-actions\">\n      ${nextBtn}\n    <\/div>\n  `;\n}\n\nfunction spfUnknownNeedAppendHtml(){\n  return `\n    <h2>\u300cspf.haihaimail.jp\u300d\u304c\u30c1\u30a7\u30c3\u30ab\u30fc\u30c4\u30fc\u30eb\u306e\u753b\u9762\u4e0a\u306b\u306a\u304b\u3063\u305f\u5834\u5408<\/h2>\n    <p>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8ffd\u8a18\uff08\u8a2d\u5b9a\u5909\u66f4\uff09\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/pic3.png\" alt=\"SPF\u30ec\u30b3\u30fc\u30c9\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u6570\u78ba\u8a8d\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <p>[1] \u4e0a\u8a18\u753b\u50cf\u306e\u8d64\u67a0\u306e\u7b87\u6240\u306f\u300110\/10\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfLookupFull('yes')\">\u306a\u3063\u3066\u3044\u308b<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfLookupFull('no')\">\u306a\u3063\u3066\u3044\u306a\u3044<\/button>\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownCheck1')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectSpfLookupFull(choice){\n  if(choice === \"no\"){\n    state.record = \"spf\";\n    state.spfHasExisting = \"yes\";\n    state.formError = \"\";\n    go(\"spfExistingInput\");\n  } else {\n    go(\"spfUnknownLookupFull\");\n  }\n}\n\nfunction spfUnknownLookupFullHtml(){\n  return `\n    <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8ffd\u8a18\u306b\u3064\u3044\u3066<\/h2>\n    <div class=\"dsg-alert\">\n      <b>\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u65e2\u306b10\/10\u306b\u306a\u3063\u3066\u3044\u308b\u5834\u5408<\/b>\n      \u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u4e0a\u9650\u306f10\u56de\u3067\u3059\u3002\u73fe\u72b6\u300cspf.haihaimail.jp\u300d\u3092\u767b\u9332\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3082\u306e\u306e\u3001\u65e2\u306b\u4e0a\u9650\u306b\u9054\u3057\u3066\u304a\u308a\u8ffd\u8a18\u304c\u3067\u304d\u306a\u3044\u72b6\u614b\u3067\u3059\u3002\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u6e1b\u3089\u3059\u305f\u3081\u306b\u65e2\u5b58\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a73\u7d30\u306f\u8cb4\u793e\u60c5\u5831\u30b7\u30b9\u30c6\u30e0\u90e8\u9580\u306e\u3054\u62c5\u5f53\u8005\u69d8\u307e\u305f\u306fDNS\u30b5\u30fc\u30d0\u306e\u7ba1\u7406\u4f1a\u793e\u69d8\u307e\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownNeedAppend')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction spfUnknownNotVisibleHtml(){\n  return `\n    <h2>SPF\u8a2d\u5b9a\u72b6\u6cc1\u30c1\u30a7\u30c3\u30ab\u30fc\u306b\u3066\u3001\u300c\u30cf\u30a4\u30bf\u30c3\u30c1\uff01SPF\u30ec\u30b3\u30fc\u30c9\u306f\u6709\u52b9\u3067\u3059\u304c...\u300d\u3068\u8868\u793a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408<\/h2>\n    <p>\u3069\u306e\u3088\u3046\u306a\u8868\u793a\u304c\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfUnknownResult('none')\">\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u306b\u306fSPF\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfUnknownResult('problem')\">SPF\u30ec\u30b3\u30fc\u30c9\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfUnknownResult('warning')\">\u8b66\u544a\uff01SPF\u30ec\u30b3\u30fc\u30c9\u306f\u6709\u52b9\u3067\u3059\u304c...<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfUnknownResult('other')\">\u305d\u306e\u4ed6<\/button>\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownCheck1')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectSpfUnknownResult(choice){\n  if(choice === \"none\"){\n    state.record = \"spf\";\n    state.spfHasExisting = \"no\";\n    state.formError = \"\";\n    go(\"spfIpQuestion\");\n  } else if(choice === \"problem\"){\n    go(\"spfUnknownProblem\");\n  } else if(choice === \"warning\"){\n    go(\"spfUnknownWarningCheck\");\n  } else {\n    go(\"spfUnknownSupport\");\n  }\n}\n\nfunction spfUnknownWarningCheckHtml(){\n  return `\n    <h2>\u300c\u8b66\u544a\uff01SPF\u30ec\u30b3\u30fc\u30c9\u306f\u6709\u52b9\u3067\u3059\u304c...\u300d\u3068\u8868\u793a\u3055\u308c\u305f\u5834\u5408<\/h2>\n    <p>Ctrl\uff0bF\u3067\u300cspf.haihaimail.jp\u300d\u3092\u753b\u9762\u4e0a\u3067\u691c\u7d22\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n    <p>\u300cspf.haihaimail.jp\u300d\u304c\u30c1\u30a7\u30c3\u30ab\u30fc\u30c4\u30fc\u30eb\u306e\u753b\u9762\u4e0a\u306b\u3042\u308a\u307e\u3057\u305f\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfHaihaiFound('yes')\">\u3042\u3063\u305f<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfHaihaiFound('no')\">\u306a\u304b\u3063\u305f<\/button>\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownNotVisible')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction spfUnknownProblemHtml(){\n  return `\n    <h2>\u300cSPF\u30ec\u30b3\u30fc\u30c9\u306b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u300d\u3068\u8868\u793a\u3055\u308c\u305f\u5834\u5408<\/h2>\n    <img decoding=\"async\" src=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-content\/uploads\/2026\/07\/pic.png\" alt=\"SPF\u30ec\u30b3\u30fc\u30c9\u306e\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u8d85\u904e\u30a8\u30e9\u30fc\" style=\"max-width:100%;display:block;border:1px solid var(--dsg-border);border-radius:10px;margin:14px 0;\">\n    <p>\u4e0a\u8a18\u753b\u50cf\u306e\u3088\u3046\u306b\u3001\u300c\u3053\u306eSPF\u30ec\u30b3\u30fc\u30c9\u306f\u3001DNS\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u6700\u5927\u6570\u3067\u3042\u308b10\u56de\u3092\u8d85\u3048\u3066\u3044\u307e\u3059\u3002\u300d\u3068\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3059\u304b\uff1f<\/p>\n    <div class=\"dsg-btn-grid\">\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfLookupExceeded('yes')\">\u306f\u3044<\/button>\n      <button class=\"dsg-opt\" onclick=\"DSG.selectSpfLookupExceeded('no')\">\u3044\u3044\u3048<\/button>\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownNotVisible')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction selectSpfLookupExceeded(choice){\n  if(choice === \"yes\") go(\"spfUnknownLookupExceeded\");\n  else go(\"spfUnknownSupport\");\n}\n\nfunction spfUnknownLookupExceededHtml(){\n  return `\n    <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u30a8\u30e9\u30fc\u306b\u3064\u3044\u3066<\/h2>\n    <div class=\"dsg-alert\">\n      <b>DNS\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4e0a\u9650\u3092\u8d85\u3048\u3066\u3044\u307e\u3059<\/b>\n      DNS\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u6700\u5927\u6570\u3067\u3042\u308b10\u56de\u3092\u8d85\u3048\u3066\u304a\u308a\u3001\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u30eb\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u6e1b\u3089\u3059\u305f\u3081\u306b\u65e2\u5b58\u306e\u8a2d\u5b9a\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a73\u7d30\u306f\u8cb4\u793e\u60c5\u5831\u30b7\u30b9\u30c6\u30e0\u90e8\u9580\u306e\u3054\u62c5\u5f53\u8005\u69d8\u307e\u305f\u306fDNS\u30b5\u30fc\u30d0\u306e\u7ba1\u7406\u4f1a\u793e\u69d8\u307e\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('spfUnknownProblem')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction spfUnknownSupportHtml(){\n  return `\n    <h2>\u304a\u554f\u3044\u5408\u308f\u305b<\/h2>\n    <div class=\"dsg-alert\">\n      <b>\u914d\u914d\u30e1\u30fc\u30eb\u306e\u30b5\u30dd\u30fc\u30c8\u7a93\u53e3\u307e\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044<\/b>\n      \u25a0\u304a\u554f\u3044\u5408\u308f\u305b\uff1a<a href=\"https:\/\/business.form-mailer.jp\/fms\/25dd3003226516\" target=\"_blank\" rel=\"noopener\">https:\/\/business.form-mailer.jp\/fms\/25dd3003226516<\/a><br>\n      TEL\uff1a050-5490-8066\u3000\u5e73\u65e5:9:30\uff5e17:00\n    <\/div>\n    <div class=\"dsg-actions\"><button class=\"dsg-ghost\" onclick=\"DSG.goClear('selectRecord')\">\u623b\u308b<\/button><\/div>\n  `;\n}\n\nfunction spfCompleteInterimHtml(){\n  return `\n    <div class=\"dsg-celebrate\">\n      <div class=\"dsg-big\">\u2705<\/div>\n      <h2>SPF\u30ec\u30b3\u30fc\u30c9\u306e\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\uff01<\/h2>\n      <p>\u6b21\u306bDKIM\u306e\u8a2d\u5b9a\u3092\u3057\u307e\u3057\u3087\u3046\uff01<\/p>\n      <div class=\"dsg-actions\" style=\"justify-content:center;\"><button class=\"dsg-primary\" onclick=\"DSG.goToDkimFromSpfComplete()\">\u6b21\u3078<\/button><\/div>\n    <\/div>\n  `;\n}\n\nfunction goToDkimFromSpfComplete(){\n  state.record = \"dkim\";\n  state.formError = \"\";\n  go(\"dkimStep1\");\n}\n\nwindow.DSG = {\n  go, goClear, selectRecord, goNextFromRecordDetail, selectProvider, copyFromButtonEl, markDone, markAlreadyDone, state, fullHostFor,\n  goNextFromSpfExisting, selectDmarcExisting,\n  goNextFromHome, selectDnsAccess, selectDnsNoAccessReason, goToDkimFromNoAccessInfo,\n  runSpfAutoCheck, runDmarcAutoCheck,\n  goToSpfUnknownFlow, selectSpfUnknownVisible, selectSpfHaihaiFound, selectSpfLookupFull,\n  selectSpfUnknownResult, selectSpfLookupExceeded,\n  goNextFromSpfIpQuestion, backFromSpfIpQuestion, goNextFromDkimStep2,\n  goToDkimFromSpfComplete\n};\n\nrender(\"home\");\n})();\n<\/script>\n\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e\u72b6\u614b\u3068\u7570\u306a\u308b\u5834\u5408\u306f\u5404\u793e\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\u3082\u5408\u308f\u305b\u3066\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","footnotes":""},"guide":[],"class_list":["post-27574","page","type-page","status-publish","hentry"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"ja_JP\" \/>\n\t\t<meta property=\"og:site_name\" content=\"\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8 - \u30e1\u30fc\u30eb\u30de\u30ac\u30b8\u30f3\u914d\u4fe1\u30b5\u30fc\u30d3\u30b9\u30fb\u30e1\u30eb\u30de\u30ac\u914d\u4fe1\u30b7\u30b9\u30c6\u30e0\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u306e\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\u3067\u3059\u3002\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56 \u8a2d\u5b9a\u30ac\u30a4\u30c9 - \u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\" \/>\n\t\t<meta property=\"og:description\" content=\"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-28T07:51:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-28T09:49:15+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56 \u8a2d\u5b9a\u30ac\u30a4\u30c9 - \u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/spfdkimdmarc\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/spfdkimdmarc\\\/#listItem\",\"name\":\"\\u306a\\u308a\\u3059\\u307e\\u3057\\u30e1\\u30fc\\u30eb\\u5bfe\\u7b56\\u3000\\u8a2d\\u5b9a\\u30ac\\u30a4\\u30c9\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/spfdkimdmarc\\\/#listItem\",\"position\":2,\"name\":\"\\u306a\\u308a\\u3059\\u307e\\u3057\\u30e1\\u30fc\\u30eb\\u5bfe\\u7b56\\u3000\\u8a2d\\u5b9a\\u30ac\\u30a4\\u30c9\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/#organization\",\"name\":\"\\u300c\\u697d\\u697d\\u30e1\\u30fc\\u30eb\\u30de\\u30fc\\u30b1\\u30c6\\u30a3\\u30f3\\u30b0\\u300d\\u30b5\\u30dd\\u30fc\\u30c8\\u30b5\\u30a4\\u30c8\",\"description\":\"\\u30e1\\u30fc\\u30eb\\u30de\\u30ac\\u30b8\\u30f3\\u914d\\u4fe1\\u30b5\\u30fc\\u30d3\\u30b9\\u30fb\\u30e1\\u30eb\\u30de\\u30ac\\u914d\\u4fe1\\u30b7\\u30b9\\u30c6\\u30e0\\u300c\\u697d\\u697d\\u30e1\\u30fc\\u30eb\\u30de\\u30fc\\u30b1\\u30c6\\u30a3\\u30f3\\u30b0\\u300d\\u306e\\u30b5\\u30dd\\u30fc\\u30c8\\u30b5\\u30a4\\u30c8\\u3067\\u3059\\u3002\",\"url\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/spfdkimdmarc\\\/#webpage\",\"url\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/spfdkimdmarc\\\/\",\"name\":\"\\u306a\\u308a\\u3059\\u307e\\u3057\\u30e1\\u30fc\\u30eb\\u5bfe\\u7b56 \\u8a2d\\u5b9a\\u30ac\\u30a4\\u30c9 - \\u300c\\u697d\\u697d\\u30e1\\u30fc\\u30eb\\u30de\\u30fc\\u30b1\\u30c6\\u30a3\\u30f3\\u30b0\\u300d\\u30b5\\u30dd\\u30fc\\u30c8\\u30b5\\u30a4\\u30c8\",\"description\":\"\\u672c\\u30da\\u30fc\\u30b8\\u306f\\u3054\\u6848\\u5185\\u6642\\u70b9\\u306e\\u5404\\u793eUI\\u30fb\\u4ed5\\u69d8\\u306b\\u57fa\\u3065\\u304f\\u53c2\\u8003\\u60c5\\u5831\\u3067\\u3059\\u3002\\u7ba1\\u7406\\u753b\\u9762\\u306e\\u8868\\u8a18\\u306f\\u5909\\u66f4\\u3055\\u308c\\u308b\\u5834\\u5408\\u304c\\u3042\\u308a\\u307e\\u3059\\u306e\\u3067\\u3001\\u6700\\u65b0\\u306e\",\"inLanguage\":\"ja\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/spfdkimdmarc\\\/#breadcrumblist\"},\"datePublished\":\"2026-07-28T16:51:27+09:00\",\"dateModified\":\"2026-07-28T18:49:15+09:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/#website\",\"url\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/\",\"name\":\"\\u300c\\u697d\\u697d\\u30e1\\u30fc\\u30eb\\u30de\\u30fc\\u30b1\\u30c6\\u30a3\\u30f3\\u30b0\\u300d\\u30b5\\u30dd\\u30fc\\u30c8\\u30b5\\u30a4\\u30c8\",\"description\":\"\\u30e1\\u30fc\\u30eb\\u30de\\u30ac\\u30b8\\u30f3\\u914d\\u4fe1\\u30b5\\u30fc\\u30d3\\u30b9\\u30fb\\u30e1\\u30eb\\u30de\\u30ac\\u914d\\u4fe1\\u30b7\\u30b9\\u30c6\\u30e0\\u300c\\u697d\\u697d\\u30e1\\u30fc\\u30eb\\u30de\\u30fc\\u30b1\\u30c6\\u30a3\\u30f3\\u30b0\\u300d\\u306e\\u30b5\\u30dd\\u30fc\\u30c8\\u30b5\\u30a4\\u30c8\\u3067\\u3059\\u3002\",\"inLanguage\":\"ja\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.rakus.co.jp\\\/support-rakus\\\/mailmarketing\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56 \u8a2d\u5b9a\u30ac\u30a4\u30c9 - \u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8","description":"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e","canonical_url":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing#listItem","position":1,"name":"Home","item":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing","nextItem":{"@type":"ListItem","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/#listItem","name":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u3000\u8a2d\u5b9a\u30ac\u30a4\u30c9"}},{"@type":"ListItem","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/#listItem","position":2,"name":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u3000\u8a2d\u5b9a\u30ac\u30a4\u30c9","previousItem":{"@type":"ListItem","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/#organization","name":"\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8","description":"\u30e1\u30fc\u30eb\u30de\u30ac\u30b8\u30f3\u914d\u4fe1\u30b5\u30fc\u30d3\u30b9\u30fb\u30e1\u30eb\u30de\u30ac\u914d\u4fe1\u30b7\u30b9\u30c6\u30e0\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u306e\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\u3067\u3059\u3002","url":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/"},{"@type":"WebPage","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/#webpage","url":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/","name":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56 \u8a2d\u5b9a\u30ac\u30a4\u30c9 - \u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8","description":"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e","inLanguage":"ja","isPartOf":{"@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/#website"},"breadcrumb":{"@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/#breadcrumblist"},"datePublished":"2026-07-28T16:51:27+09:00","dateModified":"2026-07-28T18:49:15+09:00"},{"@type":"WebSite","@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/#website","url":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/","name":"\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8","description":"\u30e1\u30fc\u30eb\u30de\u30ac\u30b8\u30f3\u914d\u4fe1\u30b5\u30fc\u30d3\u30b9\u30fb\u30e1\u30eb\u30de\u30ac\u914d\u4fe1\u30b7\u30b9\u30c6\u30e0\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u306e\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\u3067\u3059\u3002","inLanguage":"ja","publisher":{"@id":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/#organization"}}]},"og:locale":"ja_JP","og:site_name":"\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8 - \u30e1\u30fc\u30eb\u30de\u30ac\u30b8\u30f3\u914d\u4fe1\u30b5\u30fc\u30d3\u30b9\u30fb\u30e1\u30eb\u30de\u30ac\u914d\u4fe1\u30b7\u30b9\u30c6\u30e0\u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u306e\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8\u3067\u3059\u3002","og:type":"article","og:title":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56 \u8a2d\u5b9a\u30ac\u30a4\u30c9 - \u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8","og:description":"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e","og:url":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/","article:published_time":"2026-07-28T07:51:27+00:00","article:modified_time":"2026-07-28T09:49:15+00:00","twitter:card":"summary_large_image","twitter:title":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56 \u8a2d\u5b9a\u30ac\u30a4\u30c9 - \u300c\u697d\u697d\u30e1\u30fc\u30eb\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u300d\u30b5\u30dd\u30fc\u30c8\u30b5\u30a4\u30c8","twitter:description":"\u672c\u30da\u30fc\u30b8\u306f\u3054\u6848\u5185\u6642\u70b9\u306e\u5404\u793eUI\u30fb\u4ed5\u69d8\u306b\u57fa\u3065\u304f\u53c2\u8003\u60c5\u5831\u3067\u3059\u3002\u7ba1\u7406\u753b\u9762\u306e\u8868\u8a18\u306f\u5909\u66f4\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u6700\u65b0\u306e"},"aioseo_meta_data":{"post_id":"27574","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-07-15 03:12:22","updated":"2026-07-29 00:05:11","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u3000\u8a2d\u5b9a\u30ac\u30a4\u30c9\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing"},{"label":"\u306a\u308a\u3059\u307e\u3057\u30e1\u30fc\u30eb\u5bfe\u7b56\u3000\u8a2d\u5b9a\u30ac\u30a4\u30c9","link":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/spfdkimdmarc\/"}],"publishpress_future_action":{"enabled":false,"date":"2026-10-24 13:02:19","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"guide","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/pages\/27574","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/comments?post=27574"}],"version-history":[{"count":27,"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/pages\/27574\/revisions"}],"predecessor-version":[{"id":27623,"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/pages\/27574\/revisions\/27623"}],"wp:attachment":[{"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/media?parent=27574"}],"wp:term":[{"taxonomy":"guide","embeddable":true,"href":"https:\/\/www.rakus.co.jp\/support-rakus\/mailmarketing\/wp-json\/wp\/v2\/guide?post=27574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}