URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3946
[ Назад ]

Исходное сообщение
"Редактирование заголовка в теле письма."

Отправлено hostel5 , 10-Фев-05 20:50 
Задача такая, разослать пользователям электронные письма через 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"? Могу предположить что необходимо использовать регулярные выражения. Подскажите как поступить в этом случае и как этот кусок кода будет выглядеть.

Фактически задача подменить заголовок при отправки почты.

Делается в целью разослать важную информацию пользователям сервера.


Содержание

Сообщения в этом обсуждении
"Редактирование заголовка в теле письма."
Отправлено PoizOn , 11-Фев-05 11:00 
>Как изменить $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);


Ну а дальше подгоняйте его под свои нужды.



"Редактирование заголовка в теле письма."
Отправлено mthawk , 12-Фев-05 12:40 
Для отправки писем можно пользоваться удобной модулем 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);