Статьи

Входящая электронная почта с PHP и vpopmail

Я подозреваю, что многие из вас — например, SitePoint — используют PHP для обработки входящей электронной почты в различных целях. Например, наша складская компания-исполнитель отправляет нам электронное письмо с вложением в формате XML, уведомляющее нас о доставке заказа. Он включает в себя различные полезные данные (время доставки, номера отслеживания, стоимость доставки и т. Д.), Которые нам необходимо сохранить в нашей базе данных .

В прошлом я сталкивался с проблемами, пытаясь включить это в нашу установку vpopmail . Vpopmail — это удобный набор исправлений для qmail, которые облегчают обработку большого количества почтовых доменов и пользователей.

Ключевая проблема заключается в том, что vpopmail обычно работает как пользователь «vpopmail» и доставляет всю почту во время выполнения под этим UID. Следовательно, любые сценарии, которые он вызывает, не имеют разрешения на доступ к библиотекам PHP, которые заставляют наши приложения работать.

Большая часть Google привела меня в безвыходное положение, кроме сомнительной возможности сделать все наши библиотеки PHP читаемыми во всем мире. Спасибо, не надо!

Я обнаружил, что лучше всего было создать локальный домен для доставки соответствующих писем. При установке vpopmail локальные домены ведут себя так же, как обычные домены qmail, а не как виртуальный домен vpopmail.

например, [email protected]

где «processing.sitepoint.com» настроен как локальный домен.

Настройка локального домена проста; просто добавьте его в / var / qmail / control / locals (и не забудьте также поместить его в rcpthosts). Тогда -HUP qmail-send и все готово.

Как только это будет сделано, электронные письма на [email protected] доставляются в системную учетную запись UNIX «someuser». И самое главное, он поставляется под UID / GID этого пользователя .

Таким образом, скрипт, который обрабатывает эти электронные письма, теперь выполняется как «someuser», который, предположительно, имеет доступ к соответствующим библиотекам и может выполнить свою работу.