@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/04/25/000-contact-form-email-delivery-troubleshooting/#article>
    schema:about <https://comcomponent.com/knowledge/contact-form-notification-email/>, <https://comcomponent.com/knowledge/dmarc-alignment/> ;
    schema:mentions <https://comcomponent.com/knowledge/spf/>, <https://comcomponent.com/knowledge/dkim/>, <https://comcomponent.com/knowledge/dmarc/>, <https://comcomponent.com/knowledge/from-header/>, <https://comcomponent.com/knowledge/reply-to-header/>, <https://comcomponent.com/knowledge/sender-header/>, <https://comcomponent.com/knowledge/return-path/>, <https://comcomponent.com/knowledge/mail-forwarding-spf-failure/>, <https://comcomponent.com/knowledge/shared-hosting-mta/>, <https://comcomponent.com/knowledge/php-mail-function/>, <https://comcomponent.com/knowledge/header-injection/>, <https://comcomponent.com/knowledge/sendgrid-domain-authentication/>, <https://comcomponent.com/knowledge/ses-custom-mail-from/>, <https://comcomponent.com/knowledge/mailgun-domain-verification/>, <https://comcomponent.com/knowledge/dmarc-policy-mode/>, <https://comcomponent.com/knowledge/dkim-selector/>, <https://comcomponent.com/knowledge/ptr-record/>, <https://comcomponent.com/knowledge/authentication-results-header/>, <https://comcomponent.com/knowledge/unaligned-from-design/>, <https://comcomponent.com/knowledge/dmarc-failure/> .

<https://comcomponent.com/knowledge/contact-form-notification-email/> a skos:Concept ;
    skos:prefLabel "問い合わせフォームの通知メール"@ja ;
    skos:definition "問い合わせフォームの送信を受けて、サイト側システムが担当者へ送る通知メール。利用者本人がMUAから送っているのではなく、サイト側が作成する点が設計上の前提になる。"@ja ;
    skos:altLabel "フォーム通知メール"@ja .

<https://comcomponent.com/knowledge/dmarc-alignment/> a skos:Concept ;
    skos:prefLabel "DMARCのアラインメント"@ja ;
    skos:definition "DMARCの判定基準。SPFやDKIMで認証されたドメインが、From:ヘッダのドメインと整合しているかどうかを表す。"@ja ;
    skos:altLabel "Alignment" ;
    ks:requires <https://comcomponent.com/knowledge/from-header/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/authentication-results-header/> .

<https://comcomponent.com/knowledge/from-header/> a skos:Concept ;
    skos:prefLabel "Fromヘッダ"@ja ;
    skos:definition "メッセージの作者を表す本文ヘッダ。RFC 5322は作者のものでないアドレスをFrom:に入れるべきではないと定める。"@ja ;
    skos:altLabel "From:" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/contact-form-notification-email/> .

<https://comcomponent.com/knowledge/reply-to-header/> a skos:Concept ;
    skos:prefLabel "Reply-Toヘッダ"@ja ;
    skos:definition "返信先を作者とは別にしたいときに使う本文ヘッダ。"@ja ;
    skos:altLabel "Reply-To:" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/contact-form-notification-email/> .

<https://comcomponent.com/knowledge/dmarc/> a skos:Concept ;
    skos:prefLabel "DMARC"@ja ;
    skos:definition "SPFやDKIMの成否だけでなく、それらの認証済みドメインがFrom:ドメインと整合しているかを見て、受信メールの扱いを判定する仕組み。"@ja ;
    skos:altLabel "Domain-based Message Authentication, Reporting, and Conformance" ;
    ks:uses <https://comcomponent.com/knowledge/spf/> ;
    ks:uses <https://comcomponent.com/knowledge/dkim/> ;
    ks:requires <https://comcomponent.com/knowledge/dmarc-alignment/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/dmarc-policy-mode/> .

<https://comcomponent.com/knowledge/spf/> a skos:Concept ;
    skos:prefLabel "SPF(Sender Policy Framework)"@ja ;
    skos:definition "SMTPセッション中のMAIL FROM(エンベロープ送信者)が、そのドメインの送信元として許可されたIPかをDNSのTXTレコードで検証する仕組み。"@ja ;
    skos:altLabel "Sender Policy Framework" ;
    ks:uses <https://comcomponent.com/knowledge/return-path/> .

<https://comcomponent.com/knowledge/dkim/> a skos:Concept ;
    skos:prefLabel "DKIM(DomainKeys Identified Mail)"@ja ;
    skos:definition "メッセージの一部ヘッダと本文に署名を付け、受信側がDNSの公開鍵で検証する認証方式。署名ドメインはDKIM-Signatureのd=で表される。"@ja ;
    skos:altLabel "DomainKeys Identified Mail" ;
    ks:mitigates <https://comcomponent.com/knowledge/dmarc-failure/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/dkim-selector/> .

<https://comcomponent.com/knowledge/unaligned-from-design/> a skos:Concept ;
    skos:prefLabel "利用者アドレスをFromに使う設計"@ja ;
    skos:definition "問い合わせフォームで、フォーム利用者のメールアドレスをそのままFrom:に入れてしまう設計。認証済みドメインとFrom:ドメインが食い違う典型的な失敗パターン。"@ja ;
    skos:altLabel "Fromなりすまし設計"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/dmarc-failure/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/contact-form-notification-email/> .

<https://comcomponent.com/knowledge/dmarc-failure/> a skos:Concept ;
    skos:prefLabel "DMARCの失敗(dmarc=fail)"@ja ;
    skos:definition "DMARCのアラインメント判定が通らず、受信側でメールが隔離・拒否・警告扱いになりうる状態。"@ja ;
    skos:altLabel "dmarc=fail" .

<https://comcomponent.com/knowledge/mail-forwarding-spf-failure/> a skos:Concept ;
    skos:prefLabel "メール転送によるSPF失敗"@ja ;
    skos:definition "メール転送で最終受信者から見た送信元IPが、元の送信ドメインのSPFに載っていない中継サーバーになりやすく、正当なメールでもSPFが失敗する現象。"@ja ;
    skos:altLabel "転送によるSPF破損"@ja .

<https://comcomponent.com/knowledge/return-path/> a skos:Concept ;
    skos:prefLabel "Return-Path(エンベロープ送信者)"@ja ;
    skos:definition "SMTPのエンベロープで渡す配送用の差出人。最終配送時にはこの逆経路がReturn-Pathとして1つだけ残されるべきで、送信側が最初からReturn-Pathヘッダを持ったメッセージを作るべきではない。"@ja ;
    skos:altLabel "MAIL FROM" ;
    skos:altLabel "エンベロープ送信者"@ja .

<https://comcomponent.com/knowledge/php-mail-function/> a skos:Concept ;
    skos:prefLabel "PHPのmail()関数"@ja ;
    skos:definition "PHPの標準的なメール送信関数。Fromヘッダが必要で、追加パラメータでsendmail -f相当のエンベロープ送信者指定ができる。"@ja ;
    skos:altLabel "PHP mail()" .

<https://comcomponent.com/knowledge/header-injection/> a skos:Concept ;
    skos:prefLabel "メールヘッダインジェクション"@ja ;
    skos:definition "外部入力に含まれるCR/LFをサニタイズせずヘッダへ組み込むと、攻撃者がBcc:などの追加ヘッダを差し込めてしまう脆弱性。"@ja ;
    skos:altLabel "CRLFインジェクション"@ja .

<https://comcomponent.com/knowledge/shared-hosting-mta/> a skos:Concept ;
    skos:prefLabel "共有ホスティングのローカルMTA"@ja ;
    skos:definition "共有ホスティングが提供するローカルの送信基盤。送信IPのPTR未設定、共有IPの評判悪化、DKIM未対応などで到達率が落ちやすい。"@ja ;
    skos:altLabel "共有IPの送信基盤"@ja .

<https://comcomponent.com/knowledge/ptr-record/> a skos:Concept ;
    skos:prefLabel "PTRレコード(逆引き)"@ja ;
    skos:definition "送信元IPアドレスからホスト名を引くための逆引きDNSレコード。受信側のレピュテーション判定に使われる。"@ja ;
    skos:altLabel "逆引きDNS"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/shared-hosting-mta/> .

<https://comcomponent.com/knowledge/sendgrid-domain-authentication/> a skos:Concept ;
    skos:prefLabel "SendGridのDomain Authentication"@ja ;
    skos:definition "SendGridで送信ドメインを認証する設定。Automated SecurityをONにするとCNAMEベースでDKIMなどの認証レコードが生成される。"@ja ;
    skos:altLabel "SendGrid Domain Authentication" ;
    ks:requires <https://comcomponent.com/knowledge/dkim-selector/> .

<https://comcomponent.com/knowledge/dkim-selector/> a skos:Concept ;
    skos:prefLabel "DKIMセレクタ"@ja ;
    skos:definition "DKIMの公開鍵をselector._domainkey.example.comのように引くための識別子。鍵ローテーションのために使われ、複数の公開鍵を同じドメインに共存させられる。"@ja ;
    skos:altLabel "selector" .

<https://comcomponent.com/knowledge/ses-custom-mail-from/> a skos:Concept ;
    skos:prefLabel "Amazon SESのカスタムMAIL FROM"@ja ;
    skos:definition "Amazon SESで、既定のamazonses.comサブドメインではなく自ドメイン配下のMAIL FROMを設定し、サイトドメインとのSPFアラインメントを取る機能。"@ja ;
    skos:altLabel "SES custom MAIL FROM" ;
    ks:requires <https://comcomponent.com/knowledge/return-path/> .

<https://comcomponent.com/knowledge/mailgun-domain-verification/> a skos:Concept ;
    skos:prefLabel "Mailgunの送信ドメイン検証"@ja ;
    skos:definition "Mailgunで送信ドメインを検証する設定。SPF用TXTとDKIM用TXT、MXレコードの追加が必要になる。"@ja ;
    skos:altLabel "Mailgun domain verification" ;
    ks:requires <https://comcomponent.com/knowledge/dkim-selector/> .

<https://comcomponent.com/knowledge/dmarc-policy-mode/> a skos:Concept ;
    skos:prefLabel "DMARCポリシーモード"@ja ;
    skos:definition "DMARCのp=で指定するポリシー。noneは監視のみ、quarantineは隔離推奨、rejectはSMTP中の拒否推奨を意味する。"@ja ;
    skos:altLabel "p=none/quarantine/reject" .

<https://comcomponent.com/knowledge/authentication-results-header/> a skos:Concept ;
    skos:prefLabel "Authentication-Resultsヘッダ"@ja ;
    skos:definition "受信側MTAがSPF・DKIM・DMARCなど認証結果を記録する内部ヘッダ。生ヘッダを確認することで不達原因を切り分けられる。"@ja ;
    skos:altLabel "Authentication-Results:" .

<https://comcomponent.com/knowledge/sender-header/> a skos:Concept ;
    skos:prefLabel "Senderヘッダ"@ja ;
    skos:definition "実際にメッセージを送出した主体を表す本文ヘッダ。作者と送信主体が同じなら使うべきではない。"@ja ;
    skos:altLabel "Sender:" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/contact-form-notification-email/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/from-header/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/contact-form-notification-email/> ;
    schema:description "From:は自サイトのドメインに固定し、フォーム利用者のアドレスはReply-To:に入れる設計が問い合わせフォーム通知の推奨パターンである"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc5322> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/reply-to-header/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/contact-form-notification-email/> ;
    schema:description "返信先を利用者へ向けたいだけならReply-To:で十分で、これにより返信のしやすさを確保しつつFromは自ドメインに固定できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc5322> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dmarc-alignment/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/from-header/> ;
    schema:description "DMARCのアラインメント判定は、From:ヘッダのドメインとSPF/DKIMで認証されたドメインを突き合わせて行うため、判定の起点としてFrom:ヘッダを前提とする"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc7489> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dmarc/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/spf/> ;
    schema:description "DMARCはSPFの認証結果とFrom:ドメインのアラインメントを判定材料の1つとして使う"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc7489> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dmarc/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dkim/> ;
    schema:description "DMARCはDKIMの認証結果とFrom:ドメインのアラインメントも判定材料として使う"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc7489> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dmarc/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dmarc-alignment/> ;
    schema:description "DMARCの合否は、SPF/DKIMが個別にpassするかだけでなく、認証済みドメインがFrom:ドメインとアラインしているかで決まる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc7489> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/unaligned-from-design/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/dmarc-failure/> ;
    schema:description "フォーム利用者のアドレスをそのままFrom:に入れると、認証されるのはサイト側ドメインなのにFrom:は別ドメインというズレが起き、DMARCのアラインメントに失敗する"@ja ;
    ks:evidence <https://support.google.com/a/answer/81126?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mail-forwarding-spf-failure/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/dmarc-failure/> ;
    schema:description "転送で送信元IPがSPFに載っていない中継サーバーになりSPFが失敗すると、DKIMがない場合はDMARCも失敗する"@ja ;
    ks:evidence <https://support.google.com/a/answer/81126?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dkim/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/dmarc-failure/> ;
    schema:description "DKIMは本文や署名対象ヘッダーが変わらない限り転送後も生き残りやすいため、転送でSPFが壊れてもDMARCの判定を救い、DMARC失敗を軽減する"@ja ;
    ks:evidence <https://support.google.com/a/answer/81126?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/spf/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/return-path/> ;
    schema:description "SPFは主にSMTPセッション中のMAIL FROM、最終的にReturn-Pathとして残る差出人を検証する"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc5321> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/return-path/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/php-mail-function/> ;
    schema:description "送信にPHPのmail()を使う場合、Return-Path:ヘッダを自分で書くのではなく、sendmail -f相当の追加パラメータでエンベロープ送信者を指定する"@ja ;
    ks:evidence <https://www.php.net/manual/ja/function.mail.php> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/php-mail-function/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/header-injection/> ;
    schema:description "フォーム入力をサニタイズせずヘッダへ差し込むと、CR/LFを含む値からBcc:などの追加ヘッダを注入できてしまう"@ja ;
    ks:evidence <https://www.php.net/manual/ja/function.mail.php> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/shared-hosting-mta/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/dmarc-failure/> ;
    schema:description "共有ホスティングのローカルMTAは送信IPのPTR未設定や共有IPの評判悪化、DKIM未対応などにより到達率が落ちることがある"@ja ;
    ks:evidence <https://support.google.com/a/answer/81126?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ptr-record/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/shared-hosting-mta/> ;
    schema:description "共有ホスティングでは送信IPのPTR(逆引き)が正しく設定されているかを確認することが到達率改善の基本になる"@ja ;
    ks:evidence <https://support.google.com/a/answer/81126?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/sendgrid-domain-authentication/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dkim-selector/> ;
    schema:description "SendGridのDomain AuthenticationはCNAMEでDKIMセレクタを委譲する仕組みで実現される"@ja ;
    ks:evidence <https://docs.sendgrid.com/ui/account-and-settings/how-to-set-up-domain-authentication> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ses-custom-mail-from/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/return-path/> ;
    schema:description "Amazon SESでサイトドメインとのSPFアラインメントを取るには、既定のamazonses.comではなくカスタムMAIL FROM用のドメインを設定する"@ja ;
    ks:evidence <https://docs.aws.amazon.com/ses/latest/dg/mail-from.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mailgun-domain-verification/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/dkim-selector/> ;
    schema:description "Mailgunの送信ドメイン検証では、SPF用TXTとセレクタ付きDKIM用TXT、MXレコードの設定が必要になる"@ja ;
    ks:evidence <https://documentation.mailgun.com/docs/mailgun/user-manual/domains/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dmarc/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/dmarc-policy-mode/> ;
    schema:description "DMARCはp=none(観測)・quarantine(隔離)・reject(拒否)というポリシーモードで構成する"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc7489> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dmarc-alignment/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/authentication-results-header/> ;
    schema:description "DMARCのアラインメントが取れているかは、受信メールのAuthentication-Resultsヘッダでspf/dkim/dmarcの合否を確認することで判定できる"@ja ;
    ks:evidence <https://support.google.com/a/answer/3726730?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/sender-header/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/contact-form-notification-email/> ;
    schema:description "作者(From)と実送信主体が同じ場合、Sender:ヘッダは通常不要で、問い合わせフォームの通知メールでは常用すべきではない"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc5322> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/unaligned-from-design/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/contact-form-notification-email/> ;
    schema:description "フォーム利用者のメールアドレスをFrom:にそのまま使う設計は、問い合わせフォーム通知では推奨されない非推奨パターンである"@ja ;
    ks:evidence <https://support.google.com/a/answer/81126?hl=ja> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/dkim/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/dkim-selector/> ;
    schema:description "DKIMの公開鍵はselector._domainkey.example.comのようにセレクタで引かれ、セレクタは鍵ローテーションのために使われ複数の公開鍵を同じドメインに共存させられる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc6376> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
