Dla nieuświadomionych Sheevaplug to taki dziadek RaspberryPi. Kiedy jeszcze nie sprzedawali Rpi kupiłem Sheevaplug i używam do dzisiaj. Na obu komputerach jest zainstalowany Debian, ale w różnych wersjach.
Listy mam wysyłać skryptem Perla więc
rozpoczynam od zainstalowania stosowego modułu Net::SMTP::TLS
:
sudo apt-cache search TLS | grep perl libnet-smtp-tls-butmaintained-perl - Perl module for providing SMTP... libnet-smtp-tls-perl - Perl SMTP client library supporting TLS and AUTH libwww-curl-perl - Perl bindings to libcurl sudo apt-get install libnet-smtp-tls-perl
W Debianie
działającym na Sheevaplug (Debian Lenny) nie ma gotowego pakietu
więc instaluję co trzeba za pomocą cpan
:
cpan install Net::SMTP::TLS
Skrypt do wysyłania listu (mail-snd.pl
):
#!/usr/bin/perl # http://dipinkrishna.com/blog/2010/12/sending-emails-gmail-smtp-perl/ use Net::SMTP::TLS; my $smtp = new Net::SMTP::TLS( 'smtp.gmail.com', Port => 587, User => 'USER1@gmail.com', Password=> '??PASSWORD??', Timeout => 30 ); # -- Enter email FROM below. -- $smtp->mail('USER1@gmail.com'); # -- Enter recipient mails addresses below -- my @recipients = ('USER2@gmail.com'); $smtp->recipient(@recipients); $smtp->data(); #This part creates the SMTP headers you see $smtp->datasend("To: USER2\@gmail.com\n"); $smtp->datasend("From: USER1\@gmail.com\n"); $smtp->datasend("Content-Type: text/html \n"); $smtp->datasend("Subject: A Test Mail"); # line break to separate headers from message body $smtp->datasend("\n"); $smtp->datasend("This is a test mail body"); $smtp->datasend("\n"); $smtp->dataend(); $smtp->quit;
W Sheevaplug działa i wysyła, a Raspberry Pi nie:
invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332
Żeby było śmieszniej w Debianie Lenny z Sheevaplug jest
jakaś bardzo stara wersja IO::Socket:SSL
:
## sprawdź numer wersji modułu cpan -D IO::Socket::SSL Installed: 1.16
A na Raspberry Pi znacznie nowsza (ale nie działa):
cpan -D IO::Socket::SSL Installed: 1.76 CPAN: 1.994 Not up to date
Aktualizuję
sudo cpan cpan> install IO::Socket:SSL
Ale to nie pomaga:
invalid SSL_version specified at /usr/local/share/perl/5.14.2/IO/Socket/SSL.pm
Rozwiązanie jest podane tutaj. Należy:
## w pliku SSL.pm sudo nano usr/share/perl5/IO/Socket/SSL.pm ## zmienić m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i ## na m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
Zamiast rzeźbienia w Perlu można zainstalować gotowe rozwiązanie
pn. sendemail
:
apt-get install sendemail
List wysyłamy w następujący sposób:
sendEmail -f USER1@gmail.com -t USER2@other.com \ -u "Title1" -m "this is a test message" \ -s smtp.gmail.com \ -o tls=yes \ -xu USER1 -xp '??PASSWORD??'