iThome online | iThome Blog | iThome周刊訂閱

載入中...

twtw

IT邦初學者
9級

[RoR] 多人用虛擬轉址信箱的建置(3)

管理 mail server 常會被問到:信有沒有寄成功?為什麼沒收到信?等問題,本文提供簡單的方式可讓 user 從記錄檔自行查詢轉信結果。



收到書籤:發佈到twitter      
分享時間:2008-09-22 05:30:23
最近更新:2008-09-22 05:31:04

▼ ADVERTISEMENT ▼

分享內容(
7

利用 fromto.pl
先 chmod og+r /var/log/maillog ,才可讓 mail 的記錄檔被讀取,另外,請下載 http:
//ring.u-toyama.ac.jp/archives/NetBSD/packages/distfiles/fromto-1.5
這個 perl
script檔案並放在 /var/log/,在此將檔名改成 fromto.pl 只要修改第一行到系統上 perl 的正確位置,然後 chmod +x fromto.pl,然後執行 perl fromto.pl 就可看到該類似這樣的結果:

Sep 21 04:48 root                       -> root
Sep 21 04:48 root@SITENAME       -> root@SITENAME
Sep 21 05:10 root                       -> root
Sep 21 05:10 root@SITENAME       -> root@SITENAME
UNKNOWN: CACHE sendmail[8427]: m8L5PoHt008427: ruleset=check_rcpt, arg1=<w92d463f@yahoo.com.tw>, relay=118-161-42-87.dynamic.hinet.net [118.161.42.87], reject=550 5.7.1 <w92d463f@yahoo.com.tw>... Relaying denied
UNKNOWN: CACHE sendmail[8427]: m8L5PoHt008427: lost input channel from 118-161-42-87.dynamic.hinet.net [118.161.42.87] to MTA after rcpt

加入看 log 的三種方式
在 app/controllers/vtables_controller.rb 新增個 action 透過參數的不同選擇,顯示出不同的記錄。由於只要從 mailllog 就可以看到其他轉址信箱的目的,就看要不要讓其他 user 看得到,而可以只選一種顯示方式,或者都可以。
  def viewlog
        email = params[:forward]
#只抓出有轉信信箱字串的 maillog 記錄
        if params[:detail] == 'some'
                cmd = "grep -i #{email} /var/log/maillog"
# 秀出最後10行的 mailllog 內容				
        elsif params[:detail] == 'tail'
                cmd = "tail -10 /var/log/maillog"
        else
# 透過 fromto.pl 只秀出有轉信信箱的筆數出來,且將 UNKNOWN 的記錄不顯示出來
                cmd = "/var/log/fromto.pl -to #{email} -ignore U"
        end
# 將 log 檔中有會與 HTML 標籤的符號,置換一下,避免造成顯示上的問題。
        @text = `#{cmd}`.gsub(/</,'&lt;').gsub(/>/,'&gt;').gsub(/\n/,"<br />\n")
#        render :text => @text
  end

編輯一個 app/views/vtables/viewlog.html.erb 檔案來對應 controller 的 viewlog 的template。
<% if @text.empty? %>
<h1>目前log中沒有 <%= params[:forward] -%> 的記錄!</h1>
<% else %>
<% if params[:detail] %>

<% if params[:detail] == 'some' %>
<h1>較詳細的記錄</h1>
<% elsif params[:detail] == 'tail' %>
<h1>maillog的最後 10 行記錄</h1>
<% end %>

<%= highlight(highlight(@text, params[:forward]), 'stat=Sent', highlighter = '<b style="color:black;background-color:#ffff66">\1</b>') -%>
<% else %>
<h1>Log View</h1>
<%= highlight(@text, params[:forward]) -%>
<% end %>
<% end %>

上述有「highlight」的字樣,是可讓要 match 的字串,可用較顯眼的顏色或加粗字體標示出來,讓 user 可一眼看到自己所定的名稱或已Sent的字樣。
修改 app/views/vtables/index.html.erb 讓登入的 user 可以有檢視 maillog 的連結。
<h1>您現有的虛擬信箱列表</h1>
<table border="1">
  <tr>
    <th>使用者</th>
    <th>虛擬信箱</th>
    <th>轉寄到您的真正信箱</th>
  </tr>

<% for vtable in @vtables -%>
  <tr>
    <td><%=h vtable.user.login -%></td>
    <td><%=h vtable.vname -%>@虛擬主機名</td>
    <td><%=h vtable.forward -%></td>
    <td><%= link_to 'Show', vtable -%></td>
    <td><%= link_to 'Edit', edit_vtable_path(vtable) -%></td>
    <td><%= link_to 'Destroy', vtable, :confirm => 'Are you sure?', :method => :delete -%></td>
    <td><%= link_to '查看記錄', "viewlog/#{vtable.vname}" -%></td>
    <td><%= link_to '查看是否寄成的記錄', "viewlog/#{vtable.vname}?detail=some" -%></td>
    <td><%= link_to '最後10行的maillog', "viewlog/#{vtable.vname}?detail=tail" -%></td>
  </tr>
<% end -%>
</table>
<br />
<%= link_to '新增虛擬信箱', new_vtable_path -%>

在 config/routes.rb 加上:
map.connect 'viewlog/:forward', :controller => 'vtables', :action => 'viewlog'
可讓新增的動作生效。另外要提醒的是,只要有更動到 config/routes.rb 後,最好再將 thin 或 mongrel 給重新啟動一下,才會認得所新增的路徑及所要做的動作。

小結論
這個虛擬轉址信箱的小計畫,主要是利用 RoR 結合外部程式的應用,及少許的 if else 的判斷,就可做到簡易的個人化項目功能;而資料庫方面,更是簡單地被處理掉,連個 select 的語法也沒看到,就可以完成 users 與 vtables 的關聯及操作的議題。在這樣可以暫時不管 RoR 怎麼運作的細節下,就可做出實際可用的服務,所以更可以發揮在「要做什麼事情」,而不至花太多心力在「要怎麼做出」的議題上。

截圖
登入後個人列表

新增一筆

查看記錄

查看是否寄成記錄

最後10行的maillog

[RoR] 多人用虛擬轉址信箱的建置(3)

目前沒有資料

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

熱門標籤

 cisco   crystal   exchange   it   java   javascript   linux   m-power   mail   microsoft   msnlib   msnp15   msnsdk   msn機器人   mysql   nas   oracle   outlook   pmi   pmp   raid   report   sap   server   smartquery   sql   vista   windows   xp   倍力   倍力資訊   免費軟體   國際專案管理師   報表   專案管理   微軟   有話大聲說   活動   省錢   網路   網路儲存   網路管理   網頁安全   網頁設計   資安   資料庫   資訊安全   防毒軟體   2003   2008