作者 主題: [討論]Email to DB  (閱讀 3809 次)

0 會員 與 1 訪客 正在閱讀本文。

changchichung

  • 憂鬱的高中生
  • ***
  • 文章數: 148
    • 檢視個人資料
[討論]Email to DB
« 於: 2003-10-21 09:58 »
環境簡介
1. Email Server : Linux 7.2 with Sendmail , NO Exchange
2. Client : OE, outlook
3. DB: MSSQL 2000

問題
公司上層認為員工收到email之後 無法追蹤其後續的進度以及備檔存查
一開始提的想法是 把一封一封email 都存成 .eml
然後依照分類原則 統一存在 File Server

我想到的是是否能強制員工這樣做?
 如果他不作, 我會沒有辦法知道到底他有沒有follow 這個規則在走?
那有沒有可能 由Server來作? 等於是將所有的進出email 都存放在一起
所以我想到用DB來處理
在進出信件的同時, forward給某個信箱
由負責人員開啟這個信箱, 然後每天固定利用匯出的功能
匯入access or Excel
再利用MS SQL的import 把資料叫進來, 嗯 似乎可行


But , 附檔案怎麼辦?
ok , DB 的問題卡在這邊

那有沒有可能利用WebMail 來處理?
同樣都forward到某個信箱 再利用webmail 的分類規則及郵件過濾來達到
分類存放的要求
我用的是openWebmail
碰到的問題
1. 過濾條件太少, 一條規則只能有單一過濾條件
   沒辦法做到說 當主旨有 AA 且 收件者為BB的時候 自動過濾到CC資料夾
2. 雖然可以自行建立資料夾 但是無法在新建立的資料夾中 建立第二層的子資料夾

以上, 還請大家多多指教 看有沒有可行的方法可以做到??
我是比較想用第一種寫入DB的方法
到時候可以自己來寫WEB Page 來存取 也可以做到控管及備份的要求...
唉, 沒有Exchange的時候 才發現Exchange 真的好用@@

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[討論]Email to DB
« 回覆 #1 於: 2003-10-21 11:26 »
你要將 sendmail 的收送信寫入 DB 並做成類似 work flow 的控管目前網路上並沒有這樣的 package(sendmail mail to DB )

我唯一想得到的是用 procmail 來處理,但對您來說,我猜可能有點複雜, 如果您不熟 sendmail + procmail , 我也不見議您這麼做
因為你在做的過程中可能會碰到不少問題,非除你有足夠的 testbed 資源

引用
問題
公司上層認為員工收到email之後 無法追蹤其後續的進度以及備檔存查
一開始提的想法是 把一封一封email 都存成 .eml
然後依照分類原則 統一存在 File Server

我想到的是是否能強制員工這樣做?
如果他不作, 我會沒有辦法知道到底他有沒有follow 這個規則在走?

這個重點我想就是正常的 mail 不進習慣的 /var/spool/mail 的目錄下,且您的 pop3/imap 等服務也不開,讓他無從收信
mail 要如何不進 mailbox 且可以 "一封一封email 都存成 .eml "
http://phorum.study-area.org/viewtopic.php?t=17306
改一下很快的 (前提是 對 procmail 的了解要夠)

引用
我想到的是是否能強制員工這樣做?
如果他不作, 我會沒有辦法知道到底他有沒有follow 這個規則在走?
那有沒有可能 由Server來作? 等於是將所有的進出email 都存放在一起
所以我想到用DB來處理
在進出信件的同時, forward給某個信箱
由負責人員開啟這個信箱, 然後每天固定利用匯出的功能
匯入access or Excel
再利用MS SQL的import 把資料叫進來, 嗯 似乎可行

這一段就不予置評囉~因為人工做或由程式自動作都是可以
我的話就一定用程式做, 再高明一點就用 IE+Execl (Plug-in)+VBA+VBScript 就可以做出很漂的表格了

至於你說的附件怎麼辨,那不重要(我想整體來說,你要的是:
1. in/out mail 要能追蹤,尤其 out 的附件要能追踪記錄
(http://pages.prodigy.net/michael_santovec/decode.htm)
2. in mail 如何不被 pop3 收走,且可以進 DB, 再做成Web 介面型式 (procmail)
3. 以 Web 介面的登入/登出及操作記錄去了解 User 進度
(你的工作需要)
4. DB 的型式除了必要的 header 欄位外,要注意 mail body 是否需要進入 DB, 還是存成 file 就好 DB 僅存 link

如果您真的想做 , 對 sendmail 及 procmail 熟一點後再開始動工
若不用 sendmail ( 像 postfix/qmail ) 我看網路上巳有寫好的軟體了, 精華區中也有類似的文章.

註:我在網路上只看到 sendmail + mysql for "virtusertable,aliases,access.." 等的功能,並沒有看到支援 mailbox 的

changchichung

  • 憂鬱的高中生
  • ***
  • 文章數: 148
    • 檢視個人資料
[討論]Email to DB
« 回覆 #2 於: 2003-10-21 13:33 »
引述: "abelyang"

若不用 sendmail ( 像 postfix/qmail ) 我看網路上巳有寫好的軟體了, 精華區中也有類似的文章.


請問有link可參考乎?

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[討論]Email to DB
« 回覆 #3 於: 2003-10-21 13:57 »
http://phorum.study-area.org/viewtopic.php?t=16556
其他的 google 自己找了.....

armani

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
Re: [討論]Email to DB
« 回覆 #4 於: 2003-10-26 13:59 »
引述: "changchichung"
環境簡介
1. Email Server : Linux 7.2 with Sendmail , NO Exchange
2. Client : OE, outlook
3. DB: MSSQL 2000

問題
公司上層認為員工收到email之後 無法追蹤其後續的進度以及備檔存查
一開始提的想法是 把一封一封email 都存成 .eml
然後依照分類原則 統一存在 File Server

我想到的是是否能強制員工這樣做?
 如果他不作, 我會沒有辦法知道到底他有沒有follow 這個規則在走?
那有沒有可能 由Server來作? 等於是將所有的進出email 都存放在一起
所以我想到用DB來處理
在進出信件的同時, forward給某個信箱
由負責人員開啟這個信箱, 然後每天固定利用匯出的功能
匯入access or Excel
再利用MS SQL的import 把資料叫進來, 嗯 似乎可行


But , 附檔案怎麼辦?
ok , DB 的問題卡在這邊

那有沒有可能利用WebMail 來處理?
同樣都forward到某個信箱 再利用webmail 的分類規則及郵件過濾來達到
分類存放的要求
我用的是openWebmail
碰到的問題
1. 過濾條件太少, 一條規則只能有單一過濾條件
   沒辦法做到說 當主旨有 AA 且 收件者為BB的時候 自動過濾到CC資料夾
2. 雖然可以自行建立資料夾 但是無法在新建立的資料夾中 建立第二層的子資料夾

以上, 還請大家多多指教 看有沒有可行的方法可以做到??
我是比較想用第一種寫入DB的方法
到時候可以自己來寫WEB Page 來存取 也可以做到控管及備份的要求...
唉, 沒有Exchange的時候 才發現Exchange 真的好用@@


若是要將 [收進來的信] 存放到 [ Database ] 你可以考慮一個 loading 比較重
的作法.
Step:
1. 在 /etc/aliases 下建立一筆 record
support:        "|/etc/smrsh/gateway.pl"
當然你也可以用別種方式替代

2. 撰寫一隻 gateway.pl 透過 DBI
# database bindings
use DBI;

# read in message
while (<STDIN>) {
        push @message, $_;
}

# main program
&get_headers();
&check_attachments();
&get_body();
&insert_message();
&mail_report() if ($send_email_report);
&mail_acknowledgement() if ($send_acknowledge);

exit();
.... snip ....
並將每個 sub fuction implement 即可.
例如寫入資料庫: &insert_message(); 可以如下:
.... snip ....


sub insert_message {

    # connect to database
    $dbh = DBI->connect("DBI:mysql:$config{'database_name'}:$config{'database_host'}", $config{'database_user'}, $config{'database_pass'});

    # update parent activity
    if ($parent) {
        $activity_query = "UPDATE 內文 SET type = 'Open', activity = UNIX_TIMESTAMP() WHERE ticket = '$parent'";
        $sth = $dbh->prepare($activity_query);
        $sth->execute();
        $sth->finish();
        $type = "Client Followup";
        $assignment = "9999";
    }
    else {
        $type = "Open";
        $assignment = "0";
    }

    # quote all fields
    $db_parent = $dbh->quote($parent);
    $attachment = $dbh->quote($attachment);
    $author = $dbh->quote($header{'From'});
    $subject = $dbh->quote($header{'Subject'});
    $body = $dbh->quote($body);
    $type = $dbh->quote($type);
    $cc = $dbh->quote($header{'Cc'});
    $assignment = $dbh->quote($assignment);

    # do insertion
    $insert_query = "INSERT INTO "內文" (parent, attachment, timestamp, author, subject, body, type, cc, assignment) ";
    $insert_query .= "VALUES ($db_parent, $attachment, UNIX_TIMESTAMP(), $author, $subject, $body, $type, $cc, $assignment)";
    $sth = $dbh->prepare($insert_query);
    $sth->execute();
    $ticket = $sth->{'mysql_insertid'};
    $sth->finish();
    $dbh->disconnect();

}

.... snip ....

"內文" table 請自建

參考這個範例:


--
-- Table structure for table 'tickets'
--

CREATE TABLE tickets (
  ticket int(10) unsigned NOT NULL auto_increment,
  author varchar(100) NOT NULL default '',
  recipient varchar(100) NOT NULL default '',
  subject varchar(100) NOT NULL default '',
  attachment tinyint(1) unsigned NOT NULL default '0',
  timestamp int(10) unsigned NOT NULL default '0',
  type varchar(15) NOT NULL default '',
  assignment int(10) unsigned NOT NULL default '0',
  parent int(10) unsigned NOT NULL default '0',
  activity int(10) unsigned NOT NULL default '0',
  priority tinyint(1) unsigned NOT NULL default '1',
  cc varchar(100) NOT NULL default '',
  body text NOT NULL,
  signature text,
  PRIMARY KEY  (ticket),
  KEY parent (parent),
  KEY type (type)
) TYPE=MyISAM;



這樣簡易的 sendmail -> DB (MySQL or Oracle) 即可完成 !!