webew
Войти » Регистрация
 
PHP

Организовать почтовый сервис на php

28 мая 2015, 6:29
Автор: mmotor
Есть каталог фирм на пхп. Нужно в нем организовать при регистрации одновременно и регистрацию почтового ящика с данным доменом. Каталог на ВПС. Подскажите, как можно реализовать данную функцию.
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

rgbeast

Задача неоднозначная - все зависит от используемого почтового решения.
В общем случае, давать PHP-скрипту права для создания ящика напрямую выглядит небезопасным. Лучше записывать информацию в определенную таблицу в базе данных и отдельно запустить скрипт, который будет проверять эту таблицу, создавать аккаунт и удалять строку из таблицы.
28.05.2015, 19:18
Ответить
NO USERPIC

mmotor

И как такое можно сделать?
28.05.2015, 19:23
Ответить
NO USERPIC

rgbeast

Нужно сначала понять как создается почтовый ящик в вашей системе. Затем написать скрипт на bash, Perl или Python, который бы его создавал. Затем сделать так, чтобы скрипт брал данные из таблицы в базе данных. Не забыть обработать ошибки, которые могут возникнуть.
28.05.2015, 19:29
Ответить
NO USERPIC

mmotor

Пока он никак не создается, поэтому буду признателен, за совет как его создать и настроить, и в общем-то как это сделать лучше для реализации моей задачи
28.05.2015, 20:44
Ответить

paulus

Насколько я понимаю, у Вас сейчас нет никакого решения для почты, поэтому выберите какое-то. Например, http://habrahabr.ru/post/193220/. Заведение ящика тогда — это просто добавление строки в MySQL.
28.05.2015, 21:30
Ответить
NO USERPIC

mmotor

Вот спасибо. Думаю то, что надо. Буду пробовать
29.05.2015, 00:14
Ответить
NO USERPIC

mmotor

Я так понимаю, что postfix это альтернатива sendmail, и если я поставлю postfix, то удалится sendmail, который и отправляет письма с моего сайта. Я правильно понял? А если так, то наверное мне надо какое-то решение с sendmail?
30.05.2015, 14:11
Ответить
NO USERPIC

mmotor

Вот такую штуку нашел http://sourceforge.net/projects/sendmail-sql/?source=typ_redirect А что с ней делать дальше не пойму. Подскажите
30.05.2015, 16:01
Ответить

paulus

Если вкратце, то sendmail — это демон прошлого, его очень сложно настраивать. Я бы рекомендовал всё-таки посмотреть в сторону каких-то готовых решений, а не пытаться прицепить его к базе. Если действительно без него никуда, то я бы попробовал заставить его принимать всю почту для домена в какой-нибудь procmail и из него уже разбрасывал бы по пользователям (благо, там можно запускать любые приложения для этого). Но еще раз повторю — лучше возьмите какое-нибудь рабочее готовое решение.
31.05.2015, 15:25
Ответить
NO USERPIC

mmotor

я бы попробовал заставить его принимать всю почту для домена в какой-нибудь procmail

а вот это как?
31.05.2015, 22:53
Ответить

paulus

Ну, например, завести всех пользователей в /etc/aliases, чтобы ссылались на одного пользователя, включить MAILER(procmail) и в .procmailrc написать уже нужную конструкцию. Что-нибудь в районе http://www.opennet.ru/base/net/sendmail_sa2.txt.html
31.05.2015, 23:26
Ответить

paulus

И да, на самом деле я намекаю на то, что лучше поставить postfix вместо sendmail :-)
01.06.2015, 00:10
Ответить
NO USERPIC

mmotor

Все таки при установке Postfix, sendmail предлагается удалить.
У меня вопрос такой возник, как бы а зачем мне устанавливать кучу приложений. Мне ведь по сути надо только принять почту. Т.е. мне надо направить почту ко мне на сервер, а на сервере обработать и записать в тот же файл или отдать на обработку в php. Ведь можно ж как-то это сделать без кучи программа. Чтобы к примеру тот же самый apache2 принял и направим мне в нужное место текст письма. Просто я не знаю принципа работы. Где-то же он должен быть описан. Может там и делов то не так уж и много. И вот эта штука http://www.php.su/functions/?cat=imap онаж для чего-то сделана.
31.05.2015, 22:33
Ответить

paulus

apache не умеет работать с почтой, если Вы внимательно почитаете про imap, то обнаружите, что для него нужен отдельный сервис (в предложенном мною случае сверху, — его реализует dovecot).

Также было бы неплохо, если бы Вы описали таки свою задачку. Может оказаться, что Вам подойдет просто какая-нибудь почта для домена (pdd.yandex.ru).
31.05.2015, 23:28
Ответить
NO USERPIC

mmotor

В общем-то получил я сообщение путем перенастроект sendmail и оно теперь попало в файл /var/lib/sendmail/dead.letter. Как бы мне теперь разобраться почему оно туда попало и направить его я так предполагаю с помощью файла aliases в нужный мне файл, где я уже смогу его обработать как мне надо и показать пользователю
02.06.2015, 05:39
Ответить
NO USERPIC

mmotor

Вот такую ошибку он выдает.

554 5.0.0 MX list for motor-vehicle.ru. points back to vps-73843.vps-ukraine.com.ua
554 5.3.5 Local configuration error

Где копать
02.06.2015, 06:42
Ответить
NO USERPIC

mmotor

Спасибо за ответы. Ваши советы оказались самые дельные. Вроде настроил как надо небольшими изменениями в настройках sendmail.
02.06.2015, 13:09
Ответить
NO USERPIC

mmotor

Вот у меня единственное вопрос возник
user: /home/site.ru/public_html/mail
Я сохраняю в файл. А можно как-то каждое сообщение в отдельный файл сохранять хотя бы. А то как-то нехорошо будет, если он переполняться будет.
02.06.2015, 14:30
Ответить

paulus

Зависит от того, какая программа именно сохраняет. С другой стороны, кажется, если Вы регулярно будете разбирать этот файлик, то он переполняться не будет.

Ну то есть я бы делал как-то так:
1. mv /home/site.ru/public_html/mail /home/site.ru/public_html/mail.1
2. process /home/site.ru/public_html/mail.1
3. rm /home/site.ru/public_html/mail.1

Также убедитесь, что почту нельзя прочитать по http (судя по каталогу, сейчас — можно).
02.06.2015, 14:59
Ответить
NO USERPIC

mmotor

Запись ведет sendmail. То, что я указал выше, настройка файла /etc/aliases
Не очень представляю, как запустить данную команду. И как бы основная задача состоит в том. чтобы считать файл не мешая записи в него новых писем.
Т.е. по идее я на php беру содержимое, считываю, распределяю между пользователями, привожу к нужному формату, может в базу записываю, может в файл отдельный перевожу. И вот как только я это сделал, я файл очищаю, или если это копия файла удаляю.
А в это время sendmail записывает в файл новую почту. И чтобы этих параллельных процессов не происходило мне было бы логичнее работать с копиями файла. Примерно как Вы указали, но копии должны создаваться опять же динамические. Т.е. если есть файл mail.1, то должна создаваться например копия mail.2. А я уже буду искать именно нумерованные файлы считывать и удалять их уже на php. Как бы такое реализовать. Подскажите, пожалуйста.
03.06.2015, 13:29
Ответить

paulus

Решение то же, что и то, которое я написал постом выше: просто переименовывайте файл перед обработкой. Sendmail создаст новый файл для новой почты, поэтому новая почта не будет влиять. Если sendmail при этом дописывает письмо, то переименование никак не помешает (особенность UNIX), но чтобы минимизировать возможные рейсы в этом месте, возможно, стоит после переименования подождать секунду-другую, чтобы sendmail мог дописать письмо до конца. Если хотите совсем гарантированно избежать их, то настройте-таки procmail, который будет сразу скармливать текст письма в обработчик.
03.06.2015, 14:32
Ответить
NO USERPIC

mmotor

Спасибо. За ответы.
03.06.2015, 15:40
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: