Вход Возвращенных сообщений к Базе данных (Постфикс с виртуальными доменами/пользователями)

Пакеты обновления не обнаружились через веб-страницу обновления, пока я не установил обновления основы .NET. После того как я сделал их и перезагрузил появившийся SP3.

3
задан 27 January 2010 в 21:06
3 ответа

Это все предполагает, что Вы хотите собрать информацию о возвратах, а не самой возвращенной электронной почте:

У меня есть в значительной степени та же установка с постфиксом, mysql, и виртуальные хосты. С n точки зрения аппаратного ресурса самый эффективный способ отслеживать это состоит в том, чтобы проанализировать файлы журнала, как Вы делаете. Но если Вы думаете, как Вы анализируете, к большой из загрузки, можно использовать приложение как Logwatch, чтобы сделать весь парсинг для Вас. Затем настройте Постфикс для отказа от возвращенных файлов для Вас.

Теперь, если Вы решаете, что на самом деле хотите собрать эти электронные письма где-нибудь, можно использовать эти настройки в main.cf файле:

bounce_notice_recipient = someone@nowhere.com
error_notice_recipient = someone@nowhere.com

И если Вы хотите, чтобы электронные письма были полностью уничтожены, можно добавить виртуального пользователя и корректироваться, Вы искажаете файл для отправки их в dev/null

someone: /dev/null

Что касается сценария и базы данных я работаю с PHP и MySQL много в эти дни поэтому, если бы я должен был использовать те инструменты, то я мог бы создать некоторый код php, чтобы читать в файле журнала, искать возвраты и затем исправить их в базу данных. Затем я выполнил код, прежде чем mail.log был усеченным. На самом деле я отправлю код здесь после того, как я запишу это для ударов.

Вот некоторый код, если Вы хотите выполнить это с php/mysql (я уверен, что это могло бы быть более симпатично):

<?php
#parse_logs.php
# load local file into array
$val = file("mail.log");

$pattern = '/status=bounced/';

foreach ($val as &$value) {
if (preg_match($pattern,$value)) {
        $a = split('[<>]', $value);

       //if you prefer you can also use: preg_match_all('/<(.*)>/', '$value', $matches);
       #can be helpful to print the following to the screen during tests
       # echo $a[1];

        // Make a MySQL Connection
        mysql_connect("localhost", "username", "password") or die(mysql_error());
        mysql_select_db("postfix_db") or die(mysql_error());

        // Insert a row of information into the table "example"
        mysql_query("INSERT INTO emails (emailaddress) VALUES('$a[1]') ") 
        or die(mysql_error());  

        #again, if you want to see while running manually from cli
        #echo "Data Inserted!";

}
#again, if you want to see while running manually from cli
#echo "\n";
}

?>

Вы могли затем исчерпать крон прямо, прежде чем Ваш mail.log будет установлен быть переработанным или убрать журнал, после того как крон исчерпывает.

Походит на большое усилие отслеживать адреса электронной почты возвращенных электронных писем. Необходимо будет записать, что запросы mysql к затем получают доступ к этой информации, конечно.

Вы могли также пропустить материал mysql полностью и просто передать результаты по каналу в тестовый файл или адрес электронной почты (и мог также использовать крон),

php parse.php > results.txt

или

php parse_logs.php | /usr/sbin/sendmail someemailaddress@nowhere.com
5
ответ дан 3 December 2019 в 05:54

У меня нет примера, поскольку я никогда не пытался сделать это, но Вы могли использовать системный-журнал-ng (в зависимости от Вашей платформы) и создать фильтр. фильтр имеет опцию выполнить соответствие regex на самом сообщении. Все, что необходимо было бы сделать, отправляют его определенному месту назначения, то место назначения было бы mysql. Быстрый поиск скажет Вам, как установить системный-журнал-ng к mysql, и некоторая тонкая настройка, вероятно, заставит Вас фильтр отправлять тому месту назначения.

0
ответ дан 3 December 2019 в 05:54

Вы можете направлять уведомления о недоставках в сценарий. Просто в качестве обзора, как вы можете его реализовать:

/etc/postfix/main.cf

notify_classes = bounce, 2bounce, resource, software
2bounce_notice_recipient=bouncepipe@example.com
bounce_notice_recipient=bouncepipe@example.com

/ etc / postfix / transport

bouncepipe@example.com     bouncepipe:

/etc/postfix/master.cf

bouncepipe   unix  -       n       n       -       -       pipe
      flags=DRhu user=list argv=/etc/postfix/bouncepipe.pl

/ etc / postfix / bouncepipe .pl

#!/usr/bin/perl                                                                                                                                                                                                                                                                       

my $message = '';
my $sender = '';
my $recipient = '';

foreach $line ( <STDIN> )
{
    $message .= $line;
    chomp( $line );
    if ( $line =~ /Final-Recipient: /)
    {
        my $index = index($line, ';');
        $recipient = substr($line, $index+2);
    }
    if ( $line =~ /X-Postfix-Sender: /)
    {
        my $index = index($line, ';');
        $sender = substr($line, $index+2);
    }
}
# Do whatever you need to do with $sender and $recipient
0
ответ дан 3 December 2019 в 05:54

Теги

Похожие вопросы