Email
解析收到的電子郵件、剝離數據並推送到數據庫的工具或方法
是否有任何可用的工具可以自動將傳入的電子郵件解析到特定地址,剝離數據並將其插入 SQL 數據庫?
電子郵件將通過 Exchange 2003 伺服器傳入,並且採用已知的固定格式,即
姓名:名字姓氏
身份證號碼:nnnnnn
等等
等等。
理想情況下,該解決方案需要在伺服器而不是客戶端上執行。任何建議表示讚賞。
有一個商業軟體,它似乎可以做到這一點:
- 讀取和處理來自 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;