詳細說明請見:http://www.openspf.org/SPF_Record_Syntax
以下幾個關鍵字,用來敘述一個domain用來外寄郵件的主機,基本有以下幾種類型(Mechanism):
all | ip4 | ip6 | a | mx | ptr | exists | include
而domain也可以定義一些modifiers如下。其中modifier僅能出現一次
redirect | exp
Mechanism會有以下四種前綴,當有符合mechanism的結果時,就會採取前綴所代表的動作,先說明這些前綴代表的意義(沒有寫前綴時,預設是+):
"+" Pass
"-" Fail
"~" SoftFail
"?" Neutral
語法範例如下:
"v=spf1 -all" =>全部Fail
"v=spf1 a -all" =>僅 a 紀錄的主機 Pass
"v=spf1 a mx -all" =>僅 a 及mx紀錄的主機Pass
"v=spf1 +a +mx -all" =>同上
結果 | 說明 | 預期採取動作 |
Pass | SPF紀錄中指定允許傳送的主機 | accept |
Fail | SPF紀錄中指定不該被傳送的主機 | reject |
SoftFail | SPF紀錄中指定不該被傳送的主機,但標示目前為過渡期 | accept but mark |
Neutral | SPF紀錄中沒有指定 | accept |
None | 這個Domain沒有任何SPF紀錄 | accept |
PermError | 永久性錯誤(可能是spf格式有誤) | unspecified |
TempError | 一次性的錯誤 | accept or reject |
Mechanism說明:
all :所有的主機
ip4:指定的IPv4 的主機
範例:"v=spf1 ip4:123.123.123.123 -all" =>僅123.123.123.123這台主機可以
"v=spf1 ip4:192.168.0.1/16 -all" =>192.168.0.1到192.168.255.255之間的主機
ip6:指定的IPv6 的主機
範例:"v=spf1 ip6:1080::8:800:200C:417A/96 -all" =>僅123.123.123.123這台主機可以
"v=spf1 ip6:1080::8:800:68.0.3.1/96 -all" =>1080::8:800:0000:0000 到 1080::8:800:FFFF:FFFF之間的主機
a:A紀錄的主機
範例:"v=spf1 a -all" =>目前mail server所在的主機
"v=spf1 a:example.com -all" =>僅確認mail server是否為example.com所在的主機
"v=spf1 a:mailers.example.com -all" =>僅指定的mailers.example.com主機
mx:mx紀錄指定的主機,若沒指定domain,則採用目前的domain
範例:"v=spf1 mx mx:deff.domain.com -all" =>目前domain所在主機及deff.domain.com
exists:不太會翻譯...自己看
include:看不太懂,感覺是這樣,先檢查include所指定的domain有沒有設定SPF紀錄,如果沒有的話,傳回永久性錯誤,如果有的話,則交給這個SPF紀錄來做判斷,但若沒有任何的match到,則交給後面的語法去判斷...自己看
講這麼多,最後附上微軟提供的SPF紀錄精靈