Может кто-нибудь сказать мне, как я могу сделать следующее:
Моя компания построила свою собственную систему управления проектами с Linux, Apache, MySQL и PHP. В базе данных веб-приложения есть таблица t_project, в которой хранится информация обо всех проектах компании. Мой босс хочет, чтобы я разработал решение, при котором, если кто-то отправит электронное письмо на (t_project.project_id) @ mysite.com, веб-приложение запишет его в таблицу базы данных с именем t_project_message.
Как мне решить эту проблему? Что мне нужно изучить?
Дополнительные замечания Я только что заметил, что в моем вопросе пропало "(t_project.project_id) @ mysite.com", которое я добавил обратно. Значит ли это, что мне понадобится столько учетных записей электронной почты, сколько проектов в моей базе данных? Это могут быть десятки тысяч ...
Какой почтовый сервер вы используете на хосте PHP? Для нескольких приложений PHP, за которые я отвечаю, я использую Exim, а с Exim я настраиваю транспорт и маршрутизатор. Это означает, что exim примет сообщение, а затем запустит сценарий PHP и передаст сообщение сценарию PHP STDIN. Затем сценарий PHP выполняет действия на основе содержимого сообщения.
Указанный ниже маршрутизатор / конфигурация будет принимать сообщения на helpdesk@helpdesk.example.org, helpdesk-bounce@helpdesk.example.org и tckt-{id#}@helpdesk.example.org. С Exim конфигурация транспорта и маршрутизатора чрезвычайно гибкая, ниже приведен лишь один из возможных способов ее настройки. Я сомневаюсь, что то, что я настроил, применимо непосредственно к вашему проекту, вам, вероятно, нужно будет прочитать Exim. Я также почти уверен, что другие почтовые серверы также могут делать то же самое. Просто я с ними не знаком.
### router/050_helpdesk_router
#################################
helpdesk_router:
driver = accept
domains = helpdesk.example.org
caseful_local_part = true
local_parts = lsearch;/etc/exim4/helpdesk
local_part_suffix_optional
local_part_suffix = -*
transport = helpdesk_transport
### transport/20_helpdesk_router
#################################
helpdesk_transport:
driver = pipe
command = /usr/bin/php ${lookup{$local_part}lsearch{/etc/exim4/helpdesk}} $local_part '${if def:local_part_suffix {$local_part_suffix}}'
# return the data from the script on a failure
return_fail_output = true
# temporary error
temp_errors = 10
# set a timeout for 30 seconds
timeout = 30s
current_directory = /home/helpdeskadmin/
home_directory = /home/helpdeskadmin/
user = helpdeskadmin
group = helpdeskadmin
### /etc/exim4/helpdesk
#################################
helpdesk: /srv/www/helpdesk.example.org/www/helpdesk/mail/recv.php
tckt: /srv/www/helpdesk.example.org/www/helpdesk/mail/recv.php
Чтобы дать отправную точку в части вопроса, связанной с анализом почты. я использую Zend_Mail для разбора входящего сообщения и отправки почты.
У вас будет время также рассказать мне о преимуществах / недостатках вашего метода по сравнению с методом Бена?
С крючком в MTA, как я описываю.
Обычно в PHP опрашиваются почтовые ящики из cron. Из cron вы должны быть очень осторожны, чтобы убедиться, что ваш опрос имеет некоторую форму блокировки, чтобы вы не отвечали или не обрабатывали одно и то же сообщение дважды.
Раньше я часто делал это, бегая fetchmail
каждые X минут через cron. Fetchmail будет получать почту через IMAP или POP3, а затем может направлять почту через обработчик / парсер скрипта определенного типа (обычно написанного на perl, python и т. Д.). Сценарий синтаксического анализатора извлечет из сообщения любые необходимые данные и затем вставит эту информацию в соответствующие места в вашей базе данных.
В зависимости от вашего почтового сервера вы можете написать сценарий PHP, который будет опрашивать почтовый ящик на сервере с помощью IMAP и предпринимать соответствующие действия.
Для PHP доступно расширение IMAP, которое может получать сообщения электронной почты с сервера, а также перемещать их по серверу или полностью удалять, когда вы зафиксировали его в базе данных.
Вы можете запланировать это соответствующим образом с помощью cron.
Хотя вы можете опросить почтовый ящик POP, это очень неэффективное решение. Предполагая, что вы можете направить почту в целевую систему, лучшим решением будет синхронная обработка запроса. Хотя вы можете просто использовать механизм .forward, я бы рекомендовал использовать procmail в качестве MDA - он позволяет вам создавать сценарии для сложных действий, таких как запуск программ, пересылка копий, условные ответы и многое другое.