понедельник, 6 июня 2011 г.

Напоминалка дня рождения сотрудника

Нужно было сделать напоминалку о днях рождения сотрудников предприятия.
Вот что из этого получилось.
Это второй мой скрипт на 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;
}

Комментариев нет:

Отправить комментарий