是否有可用的工具可以自动解析发往特定地址的电子邮件、提取数据并将其插入 SQL 数据库?
电子邮件将通过 Exchange 2003 服务器传入,并采用已知的固定格式,即
姓名:名 姓氏
身份证号码:nnnnnnn
等等
。
理想情况下,解决方案需要在服务器上运行,而不是在客户端。任何建议都值得赞赏。
答案1
有一个商业软件似乎可以做到这一点:
读取并处理来自 POP3、IMAP 和 Microsoft Exchange 服务器的消息
[...]
- 轻松从主题、消息和标题中提取任意数量的字段。更新任何数据源,包括 Access、SQL Server、Oracle、MySQL、Access、ODBC。
答案2
我总是看到这种事情用一点粘合代码就可以完成。一点 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;
答案3
如果你想尝试开源项目,可以看看 Archiveopteryx (http://www.archiveopteryx.org/)。它有一个非常非常好用的基于 SQL 的规范化电子邮件数据存储模式(使用 PostgreSQL)。您可以将其与 Exchange 上的“fetchmail”和 POP3 服务器相结合,以创建一个基于 SQL 的邮件存档,您可以使用基于 ODBC 的报告工具对其进行报告和搜索。