之前無論是使用php的mail函數,或是使用PEAR、ZendFramwork的Zend_Mail來發信,當寄到hinet的時候總是無法寄成功,連登入web mail,查看裡面的垃圾郵件箱也都找不到,所以應該是在hinet伺服器的時候就被擋掉了。
查了網路上的資料,發現除了一般郵件表頭之外,郵件伺服器在確認收下信件的時候必須還要驗證return-path這個值,這個值是一個email帳號,伺服器似乎會反查return-path這組帳號是否真實存在。除此之外,如果指定的是hinet的郵件帳號,hinet似乎還會檢驗發信的伺服器IP是否為hinet的IP。
如果是虛擬主機的空間,通常廠商會提供幾組email帳號的空間,這時可以建立一組帳號專門作為return-path之用。在虛擬主機上,如果return-path的email是在自己的網域,而且不存在,那麼在寄出的時候就可能產生錯誤。
總之,return-path必須是個真實存在的email帳號。加上之後就可以避免很多擋信的可能,但垃圾信的部份似乎還是避免不了。