Portál AbcLinuxu, 10. května 2025 09:55

Dotaz: Debian, postfix, forwarding + autoresponding

23.8.2023 20:04 semtex | skóre: 24 | blog: semtex
Debian, postfix, forwarding + autoresponding
Přečteno: 446×
Odpovědět | Admin
Zdravím kolegové.

Řeším následující problém s automatickou odpovědí. Tu mám řešenou přes sql a skript a funguje spolehlivě.

V master.cf mám následující:

autoresponder unix - n n - - pipe flags= user=nobody argv=/usr/local/sbin/autoreply/autoreply.pl $sender $mailbox

Skript se podívá do sql databáze, zda příjemce mailu má aktivní automatickou odpověď a zda již odesílateli tuto odpověď již v minulosti neposlal a pak pošle autoreply. Nicméně dále mám ještě přes /etc/postfix/mysql-virtual.cf nadefinované mimojiné forwardy. A to konkrétně:
email=jmeno@mojedomena.cz
destination=jmeno@mojedomena.cz, kolega@mojedomena.cz
Tím sice docílím toho, že mail je doručen do "mojí" schránky i do schránky kolegy, ale autoresponder v tomto případě nepředá skriptu v proměnné $mailbox jmeno@mojedomena.cz, ale kolega@mojedomena.cz.

Poradí někdo, jak docílit toho, aby v tomto případě předal skriptu adresu jmeno@mojedomena.cz? Díky.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.8.2023 09:17 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vymen poradie mailov v destination.
24.8.2023 10:25 semtex | skóre: 24 | blog: semtex
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
To jsem zkoušel a výsledek je stejný.
24.8.2023 09:37 X
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Odpovědět | | Sbalit | Link | Blokovat | Admin
${mailbox}
                     This macro expands to the complete local part of a recip-
                     ient   address.    For   example,   with    an    address
                     user+foo@domain the mailbox is user+foo.

                     A  command-line argument that contains ${mailbox} expands
                     to as many command-line arguments as  there  are  recipi-
                     ents.
Ukaz ten skript autoreply.pl. Hadam, ze skript spatne prebira nebo zpracovava vsechny parametry.
24.8.2023 10:32 semtex | skóre: 24 | blog: semtex
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Ahoj, toto je zmiňovaný skript:
#!/usr/bin/perl

use DBI;
use Mail::Mailer;
use MIME::Words qw(:all);

open CONF, "/usr/local/sbin/autoreply/db.conf";
#open LOG, ">/tmp/mailreply.txt";

while ($radek= {CONF}) {
    chomp($radek);
    {
        $radek=~m/^(\w+)\s+(\S+).*$/;
        $conf{$1}=$2;
    }
}

close CONF;

$email=$ARGV[0];
$emailto=$ARGV[1];

#print LOG $email."\n";
#print LOG $emailto."\n";

@cas = localtime(time);
$year = 1900 + @cas[5];
$mon = "0".(1 + @cas[4]);
$day = @cas[3];
$hour = @cas[2];
$min = @cas[1];
$sec = @cas[0];
$datum = sprintf("%04d%02d%02d%02d%02d%02d", $year, $mon, $day, $hour, $min, $sec);

$dsn = "DBI:mysql:database=$conf{database};host=$conf{server};port=$conf{port}";
$reply = DBI -> connect($dsn , $conf{username} , $conf{password});
die "$DBI::errstr" if $DBI::err;

$setlatin = $reply -> prepare("SET character_set_results=latin2");
$setlatin -> execute();
$setlatin = $reply -> prepare("SET character_set_connection=latin2");
$setlatin -> execute();
$setlatin = $reply -> prepare("SET character_set_client=latin2");
$setlatin -> execute();

$select = $reply -> prepare("select id,recipient,Subject,message from autoreply where recipient='$emailto' and valid_from<'$datum' and valid_to>'$datum'");
$select -> execute();
die "$DBI::errstr" if $DBI::err;

while (($id,$recipient,$Subject,$message) = $select -> fetchrow()) {

    $poslano = $reply -> prepare("select id from autoreply_sent where replyid=$id and mail_from='$email'");
    $poslano -> execute();
    die "$DBI::errstr" if $DBI::err;
    $rownumber = $poslano -> rows();

    if ($rownumber == 0) {
        printf "Bude poslana zprava na mail ".$email." ve zneni ".$message;

        my $mailer = Mail::Mailer->new("sendmail");
        my $charset = 'ISO-8859-2';
        my $mailmssg = $message;
        $mailer->open({From     => $emailto,
                        To      => $email,
                        Subject => encode_mimewords($Subject, Charset => $charset),
                        'MIME-Version' => '1.0',
                        'Content-Type' => "text/plain; charset=$charset",
                        'Content-Transfer-Encoding' => '8bit',
                        });
        print $mailer $mailmssg;
        $mailer -> close();

        $poslano = $reply -> prepare("insert into autoreply_sent (replyid, mail_from) values('$id', '$email')");
        $poslano -> execute();
        die "$DBI::errstr" if $DBI::err;
    }

}
24.8.2023 15:10 X
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
V tom skriptu je druhy argument fixni hodnota:
$emailto=$ARGV[1];
Takze se do skriptu ta druha adresa nedostane i kdyby tam nakrasne byla. Ted je otazka jestli se predavaji adresy vsechny na zaklade toho preposilani (@#ARGV), nebo si je bude muset dohledat na zaklade uzivatele v databazi sam a nasledne preposlat na vsechny.
Řešení 1× (semtex (tazatel))
24.8.2023 19:21 X
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Odkomentuj:
open LOG, ">/tmp/mailreply.txt";
a nekde si tam pridej:
foreach my $arg(@ARGV) { print LOG "$arg\n"; }
Posli mail a podivej se jake parametry to predalo.
25.8.2023 10:57 semtex | skóre: 24 | blog: semtex
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Tak jsem zkusil a objevily se mi tam 3 parametry, 1. adresa odesílatele, 2. adresa mailu, na který je příjemce přesměrovaný a 3. adresa příjemce.

Díky, takže musím projet všechny parametry, ne jen jeden...
25.8.2023 11:57 X
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Presne tak.
25.8.2023 23:06 semtex | skóre: 24 | blog: semtex
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Tak jsem to předělal a vypadá, že funguje. Dal jsem celý skript do cyklu, kdy při prvním průběhu z argv načtu odesílatele a všechny ostatní načítám jako příjemce...
25.8.2023 23:06 semtex | skóre: 24 | blog: semtex
Rozbalit Rozbalit vše Re: Debian, postfix, forwarding + autoresponding
Každopádně moc děkuji za pomoc

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.