1 50794f47 2023-04-04 op #!/usr/bin/env perl
3 50794f47 2023-04-04 op # mimport was written by Omar Polo <op@openbsd.org> and is placed in the
4 50794f47 2023-04-04 op # public domain. The author hereby disclaims copyright to this source
12 50794f47 2023-04-04 op use Date::Parse;
13 50794f47 2023-04-04 op use File::Basename;
15 50794f47 2023-04-04 op use OpenBSD::Pledge;
16 50794f47 2023-04-04 op use OpenBSD::Unveil;
18 50794f47 2023-04-04 op die "usage: $0 dbpath\n" if @ARGV != 1;
19 50794f47 2023-04-04 op my $dbpath = shift @ARGV;
21 50794f47 2023-04-04 op open(my $sqlite, "|-", "/usr/local/bin/sqlite3", "mails.sqlite")
22 50794f47 2023-04-04 op or die "can't spawn sqlite3";
24 50794f47 2023-04-04 op unveil("/usr/local/bin/mshow", "rx") or die "unveil mshow: $!";
25 50794f47 2023-04-04 op pledge("stdio proc exec") or die "pledge: $!";
27 50794f47 2023-04-04 op say $sqlite ".import --csv /dev/stdin email"
28 50794f47 2023-04-04 op or die "can't speak to sqlite: $!";
33 50794f47 2023-04-04 op open(my $fh, "-|", "/usr/local/bin/mshow", "-Atext/plain", "-NF", $_)
34 50794f47 2023-04-04 op or die "can't run mshow $_: $!";
37 50794f47 2023-04-04 op my ($time, $id) = split /\./, basename $_;
38 50794f47 2023-04-04 op my $mid = "$time.$id";
39 50794f47 2023-04-04 op $mid =~ s/"/""/g;
41 50794f47 2023-04-04 op my ($from, $subj, $date) = ('', '', undef);
42 50794f47 2023-04-04 op while (<$fh>) {
46 50794f47 2023-04-04 op $from = s/.*?: //r if /^From:/;
47 50794f47 2023-04-04 op $subj = s/.*?: //r if /^Subject:/;
48 50794f47 2023-04-04 op $date = str2time(s/.*?: //r) if /^Date:/;
50 50794f47 2023-04-04 op $date //= time;
51 50794f47 2023-04-04 op $from =~ s/ +<.*>//;
53 50794f47 2023-04-04 op # leave open for the body
54 50794f47 2023-04-04 op print $sqlite "\"$mid\",\"$from\",\"$date\",\"$subj\",\"";
56 50794f47 2023-04-04 op while (<$fh>) {
58 50794f47 2023-04-04 op print $sqlite $_;
60 50794f47 2023-04-04 op say $sqlite '"';
65 50794f47 2023-04-04 op close $sqlite;
66 50794f47 2023-04-04 op die "sqlite3 exited with $?\n" unless $? == 0;