Email

解析收到的電子郵件、剝離數據並推送到數據庫的工具或方法

  • March 3, 2015

是否有任何可用的工具可以自動將傳入的電子郵件解析到特定地址,剝離數據並將其插入 SQL 數據庫?

電子郵件將通過 Exchange 2003 伺服器傳入,並且採用已知的固定格式,即

姓名:名字姓氏

身份證號碼:nnnnnn

等等

等等。

理想情況下,該解決方案需要在伺服器而不是客戶端上執行。任何建議表示讚賞。

有一個商業軟體,它似乎可以做到這一點:

電子郵件2DB

  • 讀取和處理來自 POP3、IMAP 和 Microsoft Exchange 伺服器的消息
  • $$ … $$
  • 從主題、消息和標題中輕鬆提取任意數量的欄位。更新任何數據源,包括 Access、SQL Server、Oracle、MySQL、Access、ODBC。

我總是看到用一點膠水程式碼完成這種事情。一點 perl 可以解決這個問題:

#!/usr/bin/perl -w
use strict;
use Net::POP3;
use DBI;

my $pop = Net::POP3->new('mail.server.com') or
       die "shit, I can't connect\n";

my $dbh = DBI->connect('DBI:mysql:databasename', 'username', 'password'
              ) || die "Could not connect to database: $DBI::errstr";


if ($pop->login( 'username' , 'pass' ) > 0) {
   my $msgnums = $pop->list;
   MESSAGE: foreach my $msgnum (keys %$msgnums) {
       my $msg = $pop->get($msgnum);

       my ( $firstName, $lastName, $idNum );

       if( $msg =~ /^Name:\s+([a-zA-Z]+)\s+([a-zA-Z]+)/){
           $firstName = $1;
           $lastName = $2;
       }
       if ( $msg =~ /^ID Number:\s+([0-9]+)/ ){
           $idNum = $1;
       }

       $dbh->do('INSERT INTO exmpl_tbl VALUES( ? , ? , ?)', undef, ($firstName, $lastName, $idNum));

       $pop->delete($msgnum);
       next MESSAGE;

   }
}

$pop->quit;
exit 0;

引用自:https://serverfault.com/questions/32258