Как получать и обрабатывать файлы по электронной почте?
Необходимо обрабатывать письма с вложениями, приходящими на определенный адрес, т.е. настроить почтовый сервер так, чтоб он сохранял вложение в определенное место и вызывал мой php-скрипт с параметрами "от кого", "тема письма" и "вложенный файл". В какую сторону копать, что крутить? В администрировании никсов не специалист, но man прочитать смогу, если что.
sendmail (который MTA, а не скрипт на PHP) умеет в качестве "доставки" входящих писем вызывать скрипты, передавая весь набор SMTP-полей и данных в них в stdin, т.е. достаточно написать парсер; другой вариант - написать парсер письма (емнип встроенного параметра выдачи вложения нет) на языке самого sendmail, но вы скорее призовете половину Ада, пока будете это делать, парсер SMTP-письма написать нагуглить проще и быстрее.
Вы не уточнили ОСь и почтовик.
Но если это чтото-из мира юникс, то к sendmail/exim/postfix прикручивается procmail. Он фильтрует складывает выполняет скрипты. Не работает с виртуальными учетками
Сделал вот так: https://habrahabr.ru/post/126448/
Только вместо robot: "|php -q /путь/к/скрипту.php" у меня robot: "|cd /путь/к/скрипту && php -q скрипт.php" и получаю ошибку Diagnostic-Code: x-unix; sh: 1: cd: can't cd to /путь/к/скрипту
Похоже, прав доступа не хватает для пользователя postfix? Как их добавить, чтоб ничего не поломать? Права на каталог 755, на на уровень выше - 750, может, в этом дело?
Александр Черных: не могу так сделать, т.к. тот скрипт потом инклюдит много других файлов по относительным путям, нужно обязательно сперва в тот каталог зайти
Нашел решение, которое мне оказалось даже удобнее. Просто по IMAP подключаюсь к почте на gmail и обрабатываю письма оттуда. Но допинать этот вариант все-таки нужно.
Александр Черных: Can't open /путь/к/скрипту/script.sh
Но он лежит там же, где и скрипт.пхп
Права поставил 777
Как все-таки postfix дать доступ в этот каталог?
Александр Черных: почему не сразу 777? не зря, наверное, 750 стоит? =) возможно, есть несколько пользователей и групп, и не стоит давать чужим доступ к каталогу?
тогда Вам нужно запустить скрипт от пользователя который сможет сделать удачно cd и далее. Если скрипт запускается от др пользователя то именно 755 (последняя 5-ка) играет роль. На просмотр, не на запись. Если там будет 0, то те кто не владелец и не входят в группу войти не смогут
Александр Черных: и как заставить postfix запустить скрипт от другого пользователя? или как ему дать доступ к этому каталогу (и к тому, у которого 750 стоит, чтоб другие пользователи исходники не могли посмотреть)
MAXiDROME: Посмотрите, какой группе/группам принадлежат данные каталоги (ls -ld .<каталог>) и добавьте юзкра postfix во все эти группы (gpasswd -a postfix <группа>)
ipc_ngs: не сработало :-(
у меня вот такая структура каталогов: /home/<пользователь>/<тут разные сайты в виде каталогов>
/home - принадлежит root/root, вложенные каталоги - <пользователь>/<пользователь>
postfix я добавил в группу <пользователь>, в root его добавлять как-то стремно
получил сообщение:
Command died with status 127: " sh
/home/<пользователь>/путь/до/скрипта/script.sh". Command output: sh: 0:
Can't open /home/<пользователь>/путь/до/скрипта/script.sh
Переключитесь вручную в аккаунт postfix (su postfix) и проверьте доступ ко всем каталогам в пути и к самому скрипту. Если нет доступа, внимательно проверяйте права доступа к соответствуюшему каталогу и его группу. Если все равно ничего не получается, выкладывайте конкретные логи ("id postfix", "ls -ld" для каждого компонента пути, и попытке запуска скрипта), а то так получается безрезультатное гадание.
ipc_ngs: su postfix ничего не дало, все-равно остался под рутом. а id postfix выдает uid=106(postfix) gid=107(postfix) groups=107(postfix),1001(develop)
develop - это группа, у которой есть доступ к /home/develop/<и так далее до скрипта>. а к /home есть доступ только у рута
MAXiDROME: Не совсем понятно что там у вас происходит, было бы гораздо проще увидеть логи команад в терминале, чем гадать по вашим ответам. Если "su postfix" не переходит в аккаунт, можно использовать "sudo -u postfix <команда>" для проверки доступа к скрипту.
Что /home владеет root не страшно, поскольку у самого /home есть права доступа для всех: drwxr-xr-x. 6 root root 4096 Jan 24 00:20 /home
В вашем случае нужно организовать доступ к каталогам, у которых нет "r-x" в последнем сегменте.
Еще одной причиной может быть ограничения доступа из-за политик SELinux. Проверьте включен ли режим Enforcing и временно переключите в режим Permissive:
в самом начале конфига постфикса написано:
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
myorigin = /etc/mailname