解析传入电子邮件、剥离数据并推送到数据库的工具或方法

解析传入电子邮件、剥离数据并推送到数据库的工具或方法

是否有可用的工具可以自动解析发往特定地址的电子邮件、提取数据并将其插入 SQL 数据库?

电子邮件将通过 Exchange 2003 服务器传入,并采用已知的固定格式,即

姓名:名 姓氏
身份证号码:nnnnnnn
等等

理想情况下,解决方案需要在服务器上运行,而不是在客户端。任何建议都值得赞赏。

答案1

有一个商业软件似乎可以做到这一点:

电子邮件2DB

  • 读取并处理来自 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 的报告工具对其进行报告和搜索。

相关内容