summaryrefslogtreecommitdiff
path: root/src/pop
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2021-05-26 01:33:06 +0200
committerJohn Ankarström <john@ankarstrom.se>2021-05-26 01:34:47 +0200
commitca98b2ba8799b40ca0fe5b38b34c817a0215b119 (patch)
treee4ee153b32bd245939b9488a9aad8bcc87282ebb /src/pop
parent61205f34eccdaf65d639cf15f7599ebe4830d5f9 (diff)
downloadmum-ca98b2ba8799b40ca0fe5b38b34c817a0215b119.tar.gz
Improve 'm-pop' script
Username and password have been moved to environment variables. Command-line interface has improved.
Diffstat (limited to 'src/pop')
-rwxr-xr-xsrc/pop130
1 files changed, 0 insertions, 130 deletions
diff --git a/src/pop b/src/pop
deleted file mode 100755
index dbdd8c6..0000000
--- a/src/pop
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/perl
-
-# pop -- retrieve (new) messages via POP3
-
-use strict;
-use warnings;
-
-use Net::POP3;
-use POSIX;
-use Term::ReadKey;
-use Sys::Hostname;
-
-# Flush STDERR
-select STDERR; $|++; select STDOUT;
-
-# Process arguments
-if (@ARGV != 2) {
- print STDERR "usage: $0 mbox mbox.i\n";
- exit 1;
-}
-
-# Get UIDs of existing messages
-my ($mbox, $index, @existing_uids);
-if (-e $ARGV[1]) {
- open $index, '<', $ARGV[1] or die "Could not open $ARGV[1]: $!";
- local $/ = ''; # paragraph mode
- while (<$index>) {
- push @existing_uids, $1 if /^M-UID: (.*)$/m;
- }
- close $index;
-}
-
-# Open mbox and index files for appending
-open $mbox, '>>', $ARGV[0] or die "Could not open $ARGV[0]: $!";
-open $index, '>>', $ARGV[1] or die "Could not open $ARGV[1]: $!";
-
-# Get POP3 server, username and password
-my $server = 'pop3.mailbox.org';
-my $ssl = 1;
-my $timeout = 5;
-my $username = 'john@ankarstrom.se';
-my $password;
-
-if (not $password) {
- print 'Enter password: ';
- ReadMode 'noecho';
- chomp($password = ReadLine(0));
- print "\n";
- ReadMode 0;
-}
-
-# Connect to POP3 server
-my $pop = Net::POP3->new($server, SSL => $ssl, Timeout => $timeout)
- or die "Could not connect to POP3 server $server: $!\n";
-$pop->login($username, $password) or die "Could not log into server\n";
-
-# Retrieve ids and uids of all messages
-my @ids = sort { $a <=> $b } keys %{$pop->list};
-my %uids = %{$pop->uidl};
-
-# Handle SIGINT
-my $sigint = 0;
-$SIG{INT} = sub {
- print STDERR "\nSafely ending retrieval...\n";
- $sigint = 1;
-};
-
-# Append new messages to mbox and index files
-chomp(my $date = asctime(localtime(time)));
-my $offset = 0;
-my $i = 0;
-
-for my $id (@ids) {
- next if grep { $_ eq $uids{$id} } @existing_uids;
- print STDERR "\r$id/$ids[-1]";
-
- my @msg;
- {
- local $/ = "\r\n";
- chomp(@msg = @{$pop->get($id)});
- }
-
- # Make From_ line
- my ($from, $from_alt);
- my $j = 0; # index of empty line before message body
- for (@msg) {
- last if /^$/;
- $j++;
- $from = $1 if /^From: (.*)$/;
- $from_alt = $1 if /^from: (.*)$/;
- }
- $from = $from_alt if $from_alt and not $from;
- $from = $1 if $from and $from =~ /^.* <(.*?@.*?)>$/;
- $from = 'MAILER-DAEMON@' . hostname if not $from;
- my $from_ = "From $from $date";
-
- # Calculate message length
- my ($head_length, $body_length, $message_length);
- $head_length += length($_)+1 for (@msg[0..$j-1]);
- $body_length += length($_)+1 for (@msg[$j..$#msg]);
- $message_length = length($from_) + 1 + $head_length + $body_length;
-
- # Append message to mbox and index files
- local $" = "\n";
- print $mbox <<MBOX;
-$from_
-@msg[0..$j-1]
-@msg[$j..$#msg]
-
-MBOX
- print $index <<INDEX;
-$from_
-M-Offset: $offset
-M-Length: $message_length
-M-Status: 00
-M-UID: $uids{$id}
-@msg[0..$j-1]
-
-INDEX
-
- exit 130 if $sigint;
-
- # Set offset for next message
- $offset += $message_length + 1;
-}
-print STDERR "\n";
-
-close $index;
-close $mbox;
-$pop->quit;