post by tommy @ 21 八月, 2006 15:51
DomainKeys 是 Yahoo 所提出用來檢驗發信者的 email 是否來自某個 domain. 當你收到某個被驗證過的信件時, 在讀取該信件時, 就會顯示 "網域認證鑰匙確認這信件寄出自 xxx.com.xx" 之類的訊息.
現在, 透過 domainkeys-milter, 也可以讓我們自己的 mail server 寄信到有 Yahoo 的信箱時, 會出現這個訊息.
下載這個軟體後, 只要 ./Build; ./Build install 之後, 就算安裝完成了. 詳約的設定可以參考這篇中文的說明, 與這篇英文的說明. 當你的 DNS 設定生效之後, 在發信的信件中, 就會把加上 DomainKey-Signature 這個 header, 而收到信件的程式, 就可以依據這個 header 的內容, 來判斷信件的出處是否正確.
除了 Yahoo 的信箱外, 也可以寄到下列幾個信箱來檢查:
這些信箱在收到信之後, 會回覆一封信件給你, 說明檢查的結果. 不過... 在我的測試中, 並非上述所有的檢查都正確, 因為同一封信, 在 Yahoo 時成功的, 但是有些會失敗.
另外, 在搭配 postfix 使用時, 要注意這兒所提示的修改.
或是抓這個 patch 回去使用:
diff -Nur dk-milter-0.4.1.orig/dk-filter/dk-filter.c dk-milter-0.4.1/dk-filter/dk-filter.c
--- dk-milter-0.4.1.orig/dk-filter/dk-filter.c 2006-05-20 05:42:05.000000000 +0800
+++ dk-milter-0.4.1/dk-filter/dk-filter.c 2006-08-22 08:45:33.615662379 +0800
@@ -2076,6 +2076,13 @@
dfc = cc->cctx_msg;
assert(dfc != NULL);
+ /* Determine the job ID for logging. */
+ if (dfc->mctx_jobid == 0 || strcmp(dfc->mctx_jobid, JOBIDUNKNOWN) == 0) {
+ char *jobid = smfi_getsymval(ctx, "i");
+ if (jobid != 0)
+ dfc->mctx_jobid = jobid;
+ }
+
/* get hostname; used in the X header and in new MIME boundaries */
hostname = smfi_getsymval(ctx, "j");
if (hostname == NULL)
補充說明一下, 在我家的 Debian Etch 中, 我安裝的是 sid 中的 postfix 2.3.2 x86-64 版本. 在配合 dk-filter 時, 偶而會發生 dk_getsig(): resource unavailable: Cannot allocate memory 這個錯誤. 我查了一下程式, 居然是在一個 b64len / 60 的運算中, 會隨機發生錯誤, 產生一個負數, 所以後頭的記憶體 allocate 的動作就會失敗. 後來我是把 libdk/libdk.c 的編譯參數 -O2 這個最佳化的參數移除, 好像就正常了. 到目前似乎沒有再碰過同樣的錯誤了. 如果你有相同的問題, 可以參考看看.