Задача такая, разослать пользователям электронные письма через perl-скрипт. Скрипт запускается путем отправления письма на определенный электронный адрес(через альяс).пример скрипта:
************************
open(MAIL, "|/usr/sbin/sendmail -t");while($line=<STDIN>){
$pismo.=$line;
}
print MAIL $pismo;
close(MAIL);
************************Идея простая, передать через <STDIN> в переменную $pismo все тело письма, во время передачи отредактировать поле "To:" и отправить уже отредактированное письмо. Адресатов будет много(из sql)
В переменную $pismo передается польностью тело письма.Как изменить $line во время добавление в $pismo, если там попалось значение "To: какойнибудь@email.ru" на "To: email@email.ru"? Могу предположить что необходимо использовать регулярные выражения. Подскажите как поступить в этом случае и как этот кусок кода будет выглядеть.
Фактически задача подменить заголовок при отправки почты.
Делается в целью разослать важную информацию пользователям сервера.
>Как изменить $line во время добавление в $pismo, если там попалось значение
>"To: какойнибудь@email.ru" на "To: email@email.ru"? Могу предположить что необходимо использовать регулярные
>выражения. Подскажите как поступить в этом случае и как этот кусок
>кода будет выглядеть.Ну к примеру формат поля To, такой:
...
To: vasya@mail.ru
...Самый простой вариант - это while по всем строкам письма, (файла или переменной). например такой:
Файл letter.txt следующего содержания:
-----------
ate: Fri, 11 Feb 2005 03:02:28 GMT
From: Charlie Root <root@server..ru>
Message-Id: <200502110302.j1B32SaM094732@server.ru>
To: root@server.ru
Subject: server.ru security run output
Checking setuid files and devices:Checking for uids of 0:
root 0
toor 0
----------------------------
Код для обработки:
my $newmail="admin\@server.ru";open(LETTER,"letter.txt") || die "$!\n";
while(<LETTER>) {
next unless(/^To/);
s/$_/To: $newmail/;
print $_,"\n";
}close(LETTER);
Ну а дальше подгоняйте его под свои нужды.
Для отправки писем можно пользоваться удобной модулем MIME::Lite
вот простой пример отправки письма всем пользователям почтового сервера
вариации - за вами.
#!/usr/bin/perl
use MIME::Lite;
open(ALL,"/etc/passwd")||die"Cannot open passwd. $!";
while(<ALL>)
{
($uname,$pass,$uid,$gid)=split(/:/);
if ($uid >499)
{
$rec="$uname".'@my.domain';
$msg = MIME::Lite->new(
From =>'my.mail@my.domain',
To =>"$rec",
Subject =>"тема вашего письма",
Data => "текст вашего письма"
);
$msg->send();
}
}
close(ALL);