Należy przy tym pamiętać, że znak @ odnosi się do wektorów. Adresy należy pisać w formie "osoba\@firma.com" lub 'osoba@firma.com'.
Dla Windows jest Blat for Windows NT(2000) (na 9x też powinien działać, lecz autorzy tego nie gwarantują). http://blat.freeshell.org/
Jest także Sendmail dla Windows http://www.indigostar.com/sendmail.htm
Blat jest freeware. Na 30-dni jest sendmail z Indigo.
smtpsend:
Można próbować modułu Win32::OLE i wysyłać z MS Outlooka, czy innego klienta windowsowego.
open(MAIL,"|mail $dokogo"); #uruchomienie programu i potoku do pisania
alternatywnie powyższą linię można zastąpić jedną z dwóch poniższych (uwaga na ścieżkę do programu sendmail):
open (MAIL, "|/usr/lib/sendmail -f $odkogo -oi -t -- $dokogo") || die "sendmail: $!"; open (MAIL, "|/usr/lib/sendmail -t -oi") || die "sendmail: $!";
W przypadku stosowania formularza należy stosować tę ostatnią, gdyż do zmiennej $dokogo można dopisać parę innych poleceń, które niekoniecznie chcemy wykonywać. Nadawcę i odbiorcę sendmail ustawia wtedy na podstawie następnych linii, które są:
print MAIL <<"END" ; From: $odkogo To: $dokogo Subject: $temat
END print MAIL "$tresc\n\n"; close (MAIL) or warn $! ? "Blad: $!" : "Blad ze statusem $?";
Moduł Mail::Sendmail jest polecany jako zamiennik komendy sendmail.
use Net::SMTP;
$smtp = Net::SMTP->new('mailhost');
$smtp->mail($ENV{USER});
$smtp->to('postmaster');
$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();
$smtp->quit;
Inny moduł do wysyłania to Mail::Sender (patrz niżej).
Mime-Version: 1.0 Content-type: text/plain; charset=ISO-8859-2 Content-transfer-encoding: 8bit
i oczywiście literki kodowane w ISO.
use MIME::Entity;
# Przygotowanie:
$top = build MIME::Entity Type =>"multipart/mixed",
From => "me\@myhost.com",
To => "you\@yourhost.com",
Subject => "Hello, nurse!";
# Czesc #1: dokument tekstowy: attach $top Path=>"./testin/short.txt";
# Czesc #2: plik GIF:
attach $top Path => "./docs/mime-sm.gif",
Type => "image/gif",
Encoding => "base64";
# Wysłanie przez sendmail: open MAIL, "| /usr/lib/sendmail -t -i" or die "open: $!"; $top->print(\*MAIL); close MAIL or die "sendmail close:$!\n";;
Zamiast MIME::Entity niektórzy używają MIME::Lite. Alternatywą dla MIME-tools jest korzystające z SMTP:
use Mail::Sender;
$sender = new Mail::Sender {smtp => 'mail.yourdomain.com',
from => 'your@address.com',
charset=>'ISO-8859-2'};
$sender->MailFile({to => 'some@address.com',
subject => 'Here is the file',
msg => "I'm sending you the list you wanted.",
file => 'filename.txt'});
lub
$sender->MailMsg({ to => "$USER", subject => "$EMAIL_TITLE",
msg => "$MESTEXT \n"});
bardziej ambitni mogą chcieć kodować nagłówki i treść samodzielnie, co nie jest polecane:
"Content-Type: Multipart/Mixed;\n"; "\tboundary=\"Boundary-=_yGgxxpkLoRellNMPapqfWkHOPkMC\"\n"; "MIME-Version: 1.0\n";
"\n\n--Boundary-=_yGgxxpkLoRellNMPapqfWkHOPkMC\n"; "Content-Type: application/x-msdownload;\n"; "\tname=\"$Plik\" \n"; "Content-Transfer-Encoding: base64\n"; "Content-Disposition: attachment; filename=\"$Plik\" \n"; "\n\n";
use MIME::Base64 qw(encode_base64);
while (read($File_Handle,$Bufor,60*57)) {
encode_base64($Bufor);
}#while
use MIME::Parser;
my $parser = new MIME::Parser;
$parser->decode_headers(1); # naglowki zgodnie z RFC-1522
$parser->output_dir("/tmp"); # plik tymczasowe do /tmp
$ent = $parser->parse(\*STDIN); # parsuj pocztę
$temat=$ent->head->get('subject'); # ustal temat
$type=$ent->mime_type; # ustal typ
if($type =~ m|multipart/|i) { # jesli wieloczesciowa
$num_parts = $ent->parts; # liczba czesci
for($i=0;$i<$num_parts;$i++) { # znajdz ktora jest tekstowa
if(($part = $ent->parts($i))->mime_type =~ m|text/|i) {
$part->print_body; # wyswietl tekst
last;
}
}
} else { $ent->print_body(); } # wyswietl zwykla poczte
$parser->filer->purge; # usun pliki tymczasowe
Moduł Email::Valid sprawdza zgodność formatu z RFC 822 (zawiera wyrażenie regularne z około 6000 znakami), oraz opcjonalnie czy jest wpis MX w DNSie, dla danego adresu.
while (<PLIK>) { push @adresy,(m|([\w\d\.]{1,}\@[\w\d\.]{1,})|ig); }
use Net::POP3;
$pop = Net::POP3->new('pop3.host');
$result = $pop->login ( $USER , $PASS );
if ($result eq undef) { print "Nie zalogowalem\n"; }
else { print "liczba postow w skrzynce: $result\n"; }
$pop->quit();
Alternatywa to moduł Mail::POP3Client (z lub bez ssl).
$pop = new Mail::POP3Client(USER=>"user", PASSWORD=>"hasło",
#USESSL => true, PORT => 995
HOST=>"poczta.onet.pl");
$liczba_listow = $pop->Count();