Вот что из этого получилось.
Это второй мой скрипт на perl, просьба сильно не пинать.
Данные в файле birthday.txt должны быть в виде:
6.6.1970 Иванов А.Ю. 05.07.1975 Петров Ю.А.Ведущие нули в дне и месяце рождения не учитываются.
#!/usr/bin/perl -w # Almad - http://vorobyev.blogspot.com/ # # Напоминалка дня рождения по почте. # Разбор файла формата: # dd.mm.yyyy FName LName # 6.6.1970 Иванов А.А. # строки начинающиеся с не цифры игнорируются. # получение текущей даты в формате dd.mm.yyyy use strict; use POSIX qw(strftime); use Net::SMTP; use MIME::Base64; # адреса получателей my @mail_user_to=('user1@host.ru','user2@host.ru'); # адрес отправителя my $mail_user_from='admin@host.ru'; # почтовый сервер my $mail_server='192.168.0.1'; my $now_string = strftime "%d.%m.%Y", localtime; my $body="Здравствуйте.\n\nСегодня $now_string день рождения у:\n"; my $flag=0; my $subj='Сегодня день рождения у сотрудника'; # читаем файл со списком дней рождений open my $fh, '<', "/home/almad/birthday/birthday.txt" or die $!; my @body=<$fh>; close $fh or die "$fh: $!"; # обработка foreach (@body) { # если строка начинается не с цифры, то она игнорируется. if (/^\d/){ my @line=split(" "); # разделяем дату, месяц и год my @n_string=split(/\./,$now_string); my @b_string=split(/\./,$line[0]); # сравниваем дату и месяц как числа. if ($n_string[0]+0 == $b_string[0]+0 and $n_string[1]+0 == $b_string[1]+0) { $body.=$line[1]." ".$line[2]." Исполняется ".($n_string[2]-$b_string[2])."\n"; $flag=1; } } } # отправляем письмо, если был день рождения if ($flag) { # для отладки, вывод на консоль # print $body; $subj=encode_base64("$subj"); $subj='=?utf-8?B?'.$subj.'?='; # Удаляем переводы строки в base64, иначе отправка почты не работает! $subj =~ s/\n//ig; my $smtp=Net::SMTP->new($mail_server, Timeout =>30, Debug =>0); $smtp->mail($mail_user_from); $smtp->recipient(@mail_user_to); $smtp->data(); $smtp->datasend("Subject: $subj\n"); #$smtp->datasend("To: @mail_user_to\n"); $smtp->datasend("From: $mail_user_from\n"); $smtp->datasend("Mime-Version: 1.0\n"); $smtp->datasend("Content-Type: text/plain; charset=\"utf-8\"\n"); $smtp->datasend("Content-Transfer-Encoding: 8bit\n"); $smtp->datasend("$body\n"); $smtp->dataend(); $smtp->quit; }
Комментариев нет:
Отправить комментарий