Создание топиков письмом

Возникла такая у меня потребность. Дать пользователям присылать свои фотозаметки. Так скажем «Молния! Срочно в номер!».

Сделал адрес post@my-ls-site.ru на которого натравил свой скрипт.

Как это работает? На адрес post@my-ls-site.ru пользователь присылает письмо с вложенной фотографией. Скрипт по крону раз в минуту проверяет почтовый ящик. Если есть письма, начинаем их обработку.

1. Смотрим отправителя, если отправитель есть в БД продолжаем работу, если нет письмо в помойку.
2. Смотрим письмо, конверт темы, текста в утф-8 и изъятие вложений.
3. Сохраняем вложения в папку пользователя.
4. Формируем топик. Название — тема, текст — текст письма, после текста фотка/фотки из вложения, теги «молния, картинки».
5. Засовываем в таблицы все, что надо для топика.
6. Удаляем письмо.

И так по кругу.

Сложность только одна, необходимо установить MailParse extension and PHP5+. У меня не виртуальный сервер и суппорт поставил все за минуту. Если у вас VDS тоже проблем не будет. А так, все это не будет работать без этого экстеншена.

файл mail_post.php надо пихать в крон.

Архив:
hktmail.ru/LS.zip

Содержит два файла классов и mail_post.php редактировать надо только его. Я там вроде напихал комментариев как что делать.

Никакой ответственности за то, что вы наворотите не несу. Обладать минимальным пониманием PHP и движка обязательно. Там все что вам надо: прописать вашу БД, прописать ваш почтовый сервер, прописать какие теги дать таким топикам и вуаля.

Тонкое место:
По умолчанию скрипт создает папки с правами 777, потом я уже отдельно правлю как мне надо. Имейте это ввиду!

У меня всё работает. Думаю и у вас заработает.

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

13 комментариев

avatar
Интересная вещица, а почему не плагином сделали?
avatar
Руки у меня из жопы.
avatar
Я так и не понял для чего((
avatar
Ну как! Это как в Тумблере, или в Фейсбуке, там есть служба такая, и специальный альбом «Загружено с мобильного», а на самом деле грузит с почты. Типа: сфоткал на телефон и сразу опубликовал. Ну или написал чо. Почтой же отправить быстрее, чем инет на телефоне, например, открыть.

А соберите кто-нибудь это в плагин, пожалуйста. Потому что если у автора руки из жопы, то у меня — и вовсе подумать страшно.
avatar
Да вы все правильно поняли. Не бойтесь попробовать, ничего прям страшного там нет.

кинули содержимое в корень сайта, создали папку mobile дали ей права на запись веб приложениями. создали ящик и прописали его в скрипт.

прописали свои папки к сайту, прописали номер блога куда валиться будут мобильные заметки.

ну и все.

без крона тестировать можно просто набрав в адресе маилпост.пхп и смотреть как чо. только сначала письмо с фото отправьте.

известные баги: у айфонов в теме вместо пробелов подчеркивания встают и тема обрезается.

ну а так, самое то выложить дтп или смешного уличного кота.
avatar
Т.е. для iOS не подойдёт? Это печально. Просто я Apple пользуюсь.
avatar
где написано что не подойдет?
avatar
известные баги: у айфонов в теме вместо пробелов подчеркивания встают и тема обрезается.
avatar
Ну не большое дело. Модераторы блога правят тему и все норм. Хотя в основном, ничо делать не требуется ибо темы пишут короткими и никаких проблем. «Нихера себе таракан!» — отлично влезает, а вот например «Я сегодня приготовила пирог с яблоками Шарлотка» уже не катит.

Приучаю к краткости.
avatar
Любопытно, но файл не доступен. Переложите его куда еще к примеру dropbox.com
avatar
avatar
работы на сервере были
avatar
Обновил скрипт. Возникала ошибка если письмо в Koi-8 и топик не создавался.

строки 85,86
$text = $Parser->getMessageBody('text');
		$html = $Parser->getMessageBody('html');

Заменить на
if (mb_detect_encoding($Parser->getMessageBody('text'), "KOI8-R, UTF-8") == "KOI8-R"){
		$text = iconv("KOI8-R","UTF-8",$Parser->getMessageBody('text'));
		$html = iconv("KOI8-R","UTF-8",$Parser->getMessageBody('html'));
        }
        else {
		$text = $Parser->getMessageBody('text');
		$html = $Parser->getMessageBody('html');
        }


Добавляя в детектор кодировки в принципе можно будет решить любой гемор, включая iPhone. У меня нет ифонов под рукой, как там кодируется тема мне не ясно. Для отладки последнее письмо в сыром виде лежит в той же папке что и скрипт. data.txt файл. Открываете, и там смотрите Subject: =?KOI8-R?B?8tXT08vJyiDUxdPU?= вам намекнет что там и как.

?B? — base64_decode
или
?Q? — quoted_printable_decode

Подскажет вам куда копать и какую кодировку юзать. Кстати со старыми нокиями тоже не совсем все гладко, но там это из-за того, что в тексте каждое слово начинается с =?KOI8-R?B? и делать детектор и конвертить каждое слово люто-бешенно лень и смысла нет, у всех или HTC или iPhone.

Ну а так, вроде все.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.