分享內容(
加入看 log 的三種方式
在 app/controllers/vtables_controller.rb 新增個 action 透過參數的不同選擇,顯示出不同的記錄。由於只要從 mailllog 就可以看到其他轉址信箱的目的,就看要不要讓其他 user 看得到,而可以只選一種顯示方式,或者都可以。
編輯一個 app/views/vtables/viewlog.html.erb 檔案來對應 controller 的 viewlog 的template。
上述有「highlight」的字樣,是可讓要 match 的字串,可用較顯眼的顏色或加粗字體標示出來,讓 user 可一眼看到自己所定的名稱或已Sent的字樣。
修改 app/views/vtables/index.html.erb 讓登入的 user 可以有檢視 maillog 的連結。
在 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
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(/</,'<').gsub(/>/,'>').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

▼ ADVERTISEMENT ▼
-
‧
-
‧
-
‧
相關問答
- 鐵人賽的疑問?
- [RoR]為何Linux -> Perl -> Ruby on Rails?
- 如何成為一位好的程式設計師
- 小財神來報告一下鐵人賽豐富的獎品與參賽報法囉
- [RoR] Rails 環境建置及更新問題
- [RoR] 用 nginx 作為 RoR 的前端
- 鐵人賽
- 請問如何成為一位稱職的JAVA程式設計師
- API 應用程式介面(Application Programming Interface)
- 程式設計師是否須具備資安人員的相關知識?
- 如何成一位超強的網頁程式設計師,需要加強那些技巧?
- 鐵人賽4
- 鐵人賽5
- 鐵人賽6
- 程式設計 委外工程 的計價方式
- iT邦檔案新增「鐵人鍊成中」小貼紙
- [好書推薦]Short Coding 寫出簡捷好程式-短碼達人的心得技法
- 資安鐵人賽
- 請推薦 AutoCad 程式設計必看的網站
- 資訊安全30天-PART19 後門程式









