Hai milisers,

Selama ini saya download email dr pop server pakai fetchmail.
Tapi kadang2 suka socket error pas lagi download, padahal
saat itu koneksi dialup-nya tdk ada masalah, lancar bahkan.
Yang sering itu kalau download email dr pop3 telkom, entah
kenapa selalu socket error padahal jumlah emailnya tdk besar2
amat, wajar lah. Saya coba pakai fetchmail di mesin yg konek
internet pakai astinet, juga sama2 socket error saat download
email dr pop3 telkom. Kalau ada yg ingat, saya bahkan pernah
cerita keluhan saya ke milis ini, maksudnya mau mencari teman
senasib, tapi nampaknya saya saja yg sial...

Kebetulan lagi belajar perl, dan baca2 bagian internet, kok
kelihatan ada solusi untuk pemecahan masalah saya, akhirnya
selesai lah script sederhana untuk download email dr mesin
pop3 server dan simpan hasil downloadnya ke file mbox.
Saya kira script ini cukup praktis karena dpt dijalankan
di setiap mesin linux yg senantiasa terinstall perl-nya.
Cuma untuk module Term::ReadKey nampaknya tdk ada dalam
default instalasi perl, jadi module ini saya hilangkan dalam
script, gunanya adalah saat ditanyakan input untuk password,
input yg diketikkan tdk akan ditampilkan ke layar.

Berikut ini scriptnya:

------- awal script perl -------
#!/usr/bin/perl
#
# Nama script pop2mbox.pl
#
# Download email dr mesin pop3server dan simpan ke file
# berformat mailbox. Untuk menjalankan script ini.
# 
# 1. chmod a+x pop2mbox.pl
# 2. ./pop2mbox.pl username pop3server file.mbox
#    Contoh: ./pop2mbox linux pop3.telkom.net linux
#            ./pop2mbox '[EMAIL PROTECTED]' pop3.domain.com linux
#
# Untuk membaca email yg telah tersimpan di file linux
#   mail -f linux
# atau
#   mutt -f linux
# atau
#   mv linux ~/mail/
#   pine
#
# Dibuat oleh: Arief Yudhawarman
# Update terakhir 23 Juni 2006
 
use Net::POP3;
##uncomment baris di bawah jika perl mempunyai module Term::ReadKey
#use Term::ReadKey;

if (@ARGV < 3)
{
  print "Usage: $0 username pop3host file\n";
  exit;
}

($username, $pop3host, $file) = @ARGV;
$timeout  = 60;

print "Password at $pop3host: ";
##uncomment 2 baris di bawah jika perl mempunyai module Term::ReadKey
#ReadMode 'noecho';
#$password = ReadLine 0;
##comment baris di bawah jika perl mempunyai module Term::ReadKey
$password = <STDIN>;
chomp $password;
##uncomment baris di bawah jika perl mempunyai module Term::ReadKey
#ReadMode 'normal';
print "\n";

do {
  print "Flush email after download [Yy/Nn] ? ";
  $_ = <STDIN>;
  chomp;
} while (! /y|n/i);

$flush = $_;

open (OUT,">>$file") || die "Can not open $file.\n";

$pop = Net::POP3->new($pop3host, Timeout => 60)
    or die "Can't open connection to $pop3host.\n";

print "Fetching mail from $username at $pop3host\n";

defined ($pop->login($username, $password))
    or die "Can not authenticate.\n";

$msgnums = $pop->list;
$totmsgs =  keys (%$msgnums);
for ($i = 1; $i <= $totmsgs; $i++) {
  $msgsize = $pop->list($i);
  $msg = $pop->get($i);
  $_ = $$msg[0];
  $from = $1 if (/^Return-Path: <(.*?)>/i);
  # In order the file known as mailbox format
  # insert a first line like this
  #   From [EMAIL PROTECTED] Mon Jun 19 14:53:48 2006
  print "$i. Email from: $from, $msgsize bytes.\n"; 
  print OUT "From $from ".scalar(localtime)."\n";
  print OUT @$msg;
  print OUT "\n";
  $pop->delete($i) if ($flush =~ /y/i); 
}
$pop->quit;
close (OUT);
------- akhir script perl -------

Mau tanya bagi rekan2 yg perl mania, apa ada cara yg lebih
praktis untuk memakai module tertentu, seperti di C:

#if define anu
bla..bla
#else
bla..bla
#endif
 

TIA,

~yudi




-- 
FAQ milis di http://wiki.linux.or.id/FAQ_milis_tanya-jawab
Unsubscribe: kirim email ke [EMAIL PROTECTED]
Arsip dan info milis selengkapnya di http://linux.or.id/milis

Kirim email ke