Пакеты обновления не обнаружились через веб-страницу обновления, пока я не установил обновления основы .NET. После того как я сделал их и перезагрузил появившийся SP3.
Это все предполагает, что Вы хотите собрать информацию о возвратах, а не самой возвращенной электронной почте:
У меня есть в значительной степени та же установка с постфиксом, 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
У меня нет примера, поскольку я никогда не пытался сделать это, но Вы могли использовать системный-журнал-ng (в зависимости от Вашей платформы) и создать фильтр. фильтр имеет опцию выполнить соответствие regex на самом сообщении. Все, что необходимо было бы сделать, отправляют его определенному месту назначения, то место назначения было бы mysql. Быстрый поиск скажет Вам, как установить системный-журнал-ng к mysql, и некоторая тонкая настройка, вероятно, заставит Вас фильтр отправлять тому месту назначения.
Вы можете направлять уведомления о недоставках в сценарий. Просто в качестве обзора, как вы можете его реализовать:
/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