Вот что из этого получилось.
Это второй мой скрипт на 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;
}
Комментариев нет:
Отправить комментарий