Я пытался перенаправить входящее электронное письмо на perl-скрипт, чтобы отслеживать потенциальные проблемы со счетами, отправляемыми по электронной почте, и мне не очень повезло. Работает в Red Hat Linux 2.6.32-696-6.3.el6.x86_64, cPanel 56.0 (сборка 51) и Exim 4.87
Используя cPanel, я пересылаю электронные письма, полученные на test@someaddress.com, на |/home/myuser/emailtest.pl
. Сценарий, который я собрал из разных поисковых запросов, выглядит следующим образом (права доступа установлены на 755):
#!/usr/bin/perl
# This is a test!
use strict;
use warnings;
use File::Touch;
use File::stat;
use Time::localtime;
my $file_list = ('/home/myuser/testfile');
touch $file_list;
my $timestamp = ctime(stat($file_list)->mtime);
#print $timestamp;
#print "\n";
Первоначально я получал ошибку возврата, после некоторого чтения я увидел, что это, вероятно, связано с тем, что я печатал метку времени. Мне действительно не нужно печатать метку времени, я просто делал это, когда сам запускал скрипт, чтобы убедиться, что я могу «прикоснуться» к файлу, а также прочитать дату. После комментирования команд печати больше не будет возврата. Сценарий по-прежнему работает при запуске из оболочки, и я могу проверить метку времени из ls, но все равно не повезло, когда я отправляю электронное письмо на свою тестовую учетную запись.
Однако не похоже, что скрипт успешно обрабатывает файл при получении электронного письма. Я не получаю возврата, но «тестовый файл» никогда не меняется, если я вручную не запустил скрипт из оболочки. Я пробовал переместить скрипт в / home / myuser / public_html, но результат тот же.
Я хотел бы в конечном итоге иметь возможность «прикоснуться» к файлу при получении электронного письма, а затем использовать ежедневное задание cron для проверки метки времени файла. Если в течение 4 дней в файл не вносятся изменения, я хочу, чтобы он отправил мне электронное письмо и сообщил, что может быть проблема. Я бы хотел поставить там чек, чтобы не беспокоить касание файла, если это уже текущая дата, но все это зависит от возможности сначала `` прикоснуться '' к файлу на основе входящего электронного письма, и вот где я застрял .
Кто-нибудь может понять, в чем проблема? Я не собираюсь решать эту проблему с помощью Perl, если PHP (или другое решение) лучше подходит для этого или есть что-то еще, что я упускаю из виду.
Вы можете использовать расширенный синтаксис exim для файлов ~ / .forward для передачи входящего сообщения в ваш Perl-скрипт при определенных условиях. Смотрите также пересылка и фильтрация в exim.
Ты можешь использовать procmail
делать доставки. Он очень программируемый и может выполнять несколько доставок. Вам понадобится .procmailrc
в домашнем каталоге пользователя, для которого нужно фильтровать сообщения.
Есть примеры для ряда вариантов использования. Я подозреваю, что вы хотите фильтровать почту, которая соответствует некоторым критериям, а затем доставлять ее. Язык фильтра позволяет указать несколько критериев выбора и отфильтровать заголовки, текст или и то, и другое.
procmail
должен быть доступен в виде пакета YUM. Обычно он включен в конфигурации eximʻa, так что он будет использоваться как MDA, если .procmailrc
Файл существует. Если вы хотите сначала прочитать документацию, она должна быть доступна онлайн.