Комплексы мужчин message php id. Sip messages: отложенная доставка. Мужские комплексы: что, как и почему

23.03.2019

В этом топике вы узнаете, как грамотно настроить, сервер исходящей почты и в частности функцию mail() в PHP. Сам являюсь жутким педантом. Люблю, что бы везде было все на своих местах, не терплю халтуры. Увидев один раз полную чушь в заголовках письма со своего сервера я разобрался с этим кардинально и безоговорочно. Под грамотной настройкой я подразумеваю такую, которая удовлетворяет потребности спам фильтров крупных почтовых систем, и просто выглядело красиво и осмысленно.

Как известно протокол SMTP не подразумевает никаких средств защиты от спама и аутентификации пользователя, поэтому крупными и не очень компаниями были придуманы «фиксы» безопасности протокола.
Если вы устанавливаете выделенный сервер с доменом размещенным на нем, очень рекомендуется выполнить данные настройки, что бы все было как надо.

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

Название заголовка выбрал именно такое, так как вначале своего пути я искал что-то вроде этого. Настраивать будем postfix, php, dns (ptr, spf), и другое.

Эта статья будет интересная людям, настраивающим выделеные сервера, но не менее интересна для обычных программистов .

Подробности под катом

Преамбула

Кто-то пользуется либами, которые заменяют функцию mail (например phpmailer), они могут общаться с SMTP напрямую, а могут отправлять и на локальный сервер. Но лучше использовать стандартную встроенную и настроенную функцию PHP mail() которая будет отправлять почту на локальный сервер исходящей почты, который в свою очередь будет с ней сам разбираться. При использовании данной функции тормозов всегда наименьшее количество, так как локальный почтовый агент быстро принимает либо отклоняет почту, а если принимает, то доставляет самостоятельно.

Статья отформатирована не самым лучшим образом. Извиняюсь, время поджимает, а рассказать хочется пока вспомнил, а то потом не времени будет.

Чем проверять нашу работу?

Тестируем вот этим методом
$result = mail("[email protected]", "subject", "message"); if($result) { echo "все путем"; } else { echo "что-то не так"; }

Каких целей в заголовках нам требуется достичь?

- Вот этих заголовков от gmail.com
Прошу заметить, что это заголовки с которыми письмо попадает в ящик конечного пользователя
Delivered-To: [email protected] Received: by 10.182.0.137 with SMTP id 9cs9033obe; Sat, 21 Jan 2012 13:25:09 -0800 (PST) Received: by 10.205.119.199 with SMTP id fv7mr1052469bkc.113.1327181107295; Sat, 21 Jan 2012 13:25:07 -0800 (PST) Return-Path: Received: from wartur.ru (wartur.ru. ) by mx.google.com with ESMTP id ua10si4066845bkb.110.2012.01.21.13.25.06; Sat, 21 Jan 2012 13:25:07 -0800 (PST) Received-SPF: pass (google.com: domain of [email protected] designates 188.134.79.140 as permitted sender) client-ip=188.134.79.140; Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email protected] designates 188.134.79.140 as permitted sender) [email protected] Received: by wartur.ru (Postfix, from userid 1002) id 9913B61D; Sun, 22 Jan 2012 01:24:55 +0400 (MSK) To: [email protected] Subject: subject X-PHP-Originating-Script: 1002:index.php Message-Id: <[email protected]> Date: Sun, 22 Jan 2012 01:24:55 +0400 (MSK) From: [email protected]
- А так же этих заголовков от mail.ru
Return-path: Received-SPF: pass (mx64.mail.ru: domain of wartur.ru designates 188.134.79.140 as permitted sender) client-ip=188.134.79.140; [email protected]; helo=wartur.ru; Received: from (port=64667 helo=wartur.ru) by mx64.mail.ru with esmtp (envelope-from ) id 1RoiQJ-0005E9-6r for [email protected]; Sun, 22 Jan 2012 01:24:31 +0400 X-Mru-BL: 0:0:0:0 X-Mru-PTR: wartur.ru X-Mru-NR: 1 X-Mru-OF: Linux (ethernet/modem) X-Mru-RC: RU Received: by wartur.ru (Postfix, from userid 1002) id 460BC9B7; Sun, 22 Jan 2012 01:24:20 +0400 (MSK) To: [email protected] Subject: subject X-PHP-Originating-Script: 1002:index.php Message-Id: <[email protected]> Date: Sun, 22 Jan 2012 01:24:20 +0400 (MSK) From: [email protected] X-Spam: Not detected X-Mras: Ok X-Mru-Authenticated-Sender: uid:[email protected]

Когда вы только начнете, вы увидите, что таких красивых заголовков у вас нет. Принимающий сервер почты будет считать вас каким-то чучмеком, об этом и будет писать в заголовке письма с предупреждением, что вот еще чуть чуть и он тебя точно в блек-лист поставит. Вся информация в заголовке используются всеми цепочками серверов и принимающий агент для того что бы в зависимости от настроек спам фильтра отклонить письмо или принять. Самые драконовые методы это блек-листы, а мягкие определяют плохих по заголовкам и жалобам.

Так же замечаю, если установить в функции mail() 4-й параметр и поставить туда заголовок From то и заголовок From: [email protected] тоже изменится, а если не задавать, то оно будет автоматически определяться таким же как и заголовок Return-path: , что вы можете видеть у меня в заголовках.
Очень удобна такая схема: отправка идет через сервер с измененным заголовком From, а прием на gmail (через службы домена). Желательно, что бы почта тоже принадлежала к тому же домену, для которого настроен сервер, а так же выполнены некоторые пункты указанные ниже.

Приступим

- Совет
Господа, я люблю ставить все пакетами и новичкам не советую заниматься самодеятельностью, во многих пакетах уже есть скрипты автоматической настройки, результаты которых надо только чутка подправить и все будет хорошо. Кроме того, из репозиториев оно само обновляется и вообще меньше запары просто потому что её меньше.

- Настройка PHP
Ставим как хотим php, это вы как-нибудь без меня.

Идем в настройки php, заменяем эквивалентно:
sendmail_path = /usr/sbin/sendmail -t -i [email protected]

Этим мы указали заголовок Return-Path:

Кстати 1: это будет таковым для всех виртуальных доменов сервера, что бы это исправить и настроить под текущий, то требуется передать 5-й параметр в функцию mail().
$result = mail("[email protected]", "subject", "message", "From ...", "[email protected]");
Кстати 2: если вы поставите 5-й параметр на обычном виртуальном хостинге, то вам тоже рекомендуется проводить настройку вашего домена, как это описано ниже. Обращаю внимание, что операцию с PTR записями сделать невозможно, так как 1 IP = Домен, ну или по крайней мере не рекомендуется делать их 2, не помню уже.

- Настройка MTA , он же локальный сервер исходящей почты
Я вам искренне советую postfix, далее идем в настройки /etc/postfix/main.cf
для тех, кто уже нарвался на sendmail, и понял как они трудно выпиливаются из системы, советую команду:
aptitude purge sendmail

(k-wartur.wartur.ru - это мой сервер в домене wartur.ru)

Если я не ошибаюсь, это помогло. Когда агент доставки представляется другому серверу передается HELO. Поменяете myhostname, поменяется следующий заголовок:
Message-Id: <[email protected]>

Smtp_helo_name по дефолту это myhostname, читаем матчасть

Mydestination - если я не ошибаюсь, это задает те домены с которых MTA будет принимать почту на обработку, если у вас виртуальный хостинг (что я устроил на сервере дома), то без _ALL_ у вас будут проблемы с отправкой почты с других доменов кроме указанных.

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

- Разборки с почтовыми сервисами (почтовики)
А они нас считают как недобрый источник.
Наш сервер смог правильно helo представиться, но вот только почтовики нам все равно не доверяют.
Для этого были придуман алгоритм, для того что бы владелец домена с помощью DNS (если он конечно грамотный как мы) мог указывать, что вот таким-то серверам можно доверять, а другим нельзя.

У вас вместо ужаса который сейчас должно получиться вот это:
Received-SPF: pass (google.com: domain of [email protected] designates 188.134.79.140 as permitted sender) client-ip=188.134.79.140; Received-SPF: pass (mx64.mail.ru: domain of wartur.ru designates 188.134.79.140 as permitted sender) client-ip=188.134.79.140; [email protected]; helo=wartur.ru;

Мы уже на пути к истине. К слову, по умолчанию, почтовик все считает как v=spf1 ~all, что понижает уровень порога входа в блек лист, и а так же можно пользоваться вашим доменом для отправки спама, и вас сами того не знали пометят как плохиша на будущие времена.

Идем в ДНС и создаем TXT запись в вашем домене, в моем случае wartur.ru
v=spf1 +mx +a:wartur.ru +a:k-wartur.wartur.ru +include:gmail.com -all

V=spf1
это означает, что версия алгоритма spf1

Mx
Можно доверять почте если она отправлена с серверов mx, например если mx.wartur.ru это сервер приема, то если этот сервер будет отправлять, то все будет хорошо.

A:wartur.ru
Можно доверять серверу, обслуживающий домен wartur.ru

Так же добавлю, например на моем почтовом сервере разместился pupkin.ru.
Я дал Пупкину погонять мой почтовый сервер исходящей почты k-wartur.wartur.ru (обычная ситуация виртуального хостинга, он всегда стоит локально, как бд, и все все все). Тогда он у себя должен настроить +a:k-wartur.wartur.ru

Include:gmail.com
Импортируем все правила gmail.com, у них тоже есть такая запись TXT для своих серверов. (я использую сервисы google для домена)

All
Указываем, что админ считает другие места не своими, и это может быть ближайший бордель в подворотне рассылающий спам от моего имени
(+all а это означает, что весь мир мои друзья)

Матчасть для самообучения
http://ru.wikipedia.org/wiki/Sender_Policy_Framework

- Разборки с почтовыми сервисами, настройка обратной PTR
Почтовики еще спрашивают обратные доменные зоны PTR для дополнительной галочки, думаю эта галочка одна из самых жирных , так как она 100% определяет сервер, и если он ведет себя правильно, то ему очень сильно доверяют и любое письмо наверняка дойдет до адресата.
X-Mru-PTR: wartur.ru, он же есть в google наврное это Received: from wartur.ru (wartur.ru. )

Заметка:
В виртуальном хостинге вам это сделать не дадут, у них на этот адрес замапин свой сервер, какой-нибудь servername.badhosting.ru, на котором вы и размещаетесь, да и вообще только на собственном серваке с собственным IP это возможно провернуть.

Интересно: Если вы живете дома, а у меня один из серверов стоит дома, в частности wartur.ru. Что делать? вроде IP выделенный, а обратный адрес, не настроить. Я позвонил выше (к провайдеру) сказал мол так и так хочу PTR зону. Мне её сделали, очень доволен.

Еще немного слов о заголовках (все вперемешку)

X-Mru-BL: 0:0:0:0 упаси вас иметь что-нибудь кроме нолей, это блеклисты.
X-Mru-OF: интерфейс с которого посылается, я так и не понял от чего это зависит.
X-PHP-Originating-Script: - я бы советовал добавлять, хотя если вы очень печетесь о безопасности и неразглашении, то можно и запретить. Делается это неподалеку от той настройки PHP которой мы делали. По умолчанию включено.

Еще можно и интересно посмотреть что пишет Яндекс при приеме, очень интересно.

Дополнительно

Там еще какие-то цифровые подписи есть.
определяется заголовком, DKIM-Signature
С виду у меня уже было все в порядке, а этот заголовок не очень нужен. Он нужен обычно сервисом очень крупного масштаба вроде facebook или google где рассылка уведомлений и почты идет в гигатонном масштабе. Если ваш сервис не обладает миллионами пользователей, то не думайте об этом, хотя если вы изыскатель - напишите как об этом здесь и мы свяжем статьи - что бы все казалось полностью законченным, только я прошу намного проще написать, так как уже где-то видел статьи про это все. От себя добавлю что мне было лень устанавливать еще один пакет, разбираться и еще что-нить.

Материала к сожалению нет, так как по крупицам отовсюду собирал 4 месяца назад, потом меня не было времени, а теперь я написал по памяти.

Удачной грамотной настройки вашего сервера. Я попробовал объяснить хотя бы один из нескольких аспектов настройки.

UPD:
Найден интересный пруф

Мужские комплексы глазами женщин

Чего только не говорят о женщинах: и закомплексованные они, и пугливые, и логика хромает на обе ноги. Просто все демоны ада навечно поселились в умах слабой половины человечества!

Согласен. Но только из той самой женской зловредности предлагаю подумать – какие же комплексы обитают в подсознании мужчин. Причем женщины к нижеперечисленному не имеют никакого отношения. Почему? Да просто потому, что они Женщины.

Комплекс босса

Вспомните, как родители говорят своим детям: мальчики не плачут, мужчина должен быть сильным , мужчина всегда впереди… И что ж получается? Если ты не впереди планеты всей, то ты уже не мужчина? Вот и приходится сильному полу, напичканному буквально с рождения подобными указаниями, постоянно тянуться, тянуться, тянуться.

А не дай Бог жизнь закинет под начальство женщины или у собственной жены будет больше зарплата? Все, жизнь не удалась, мужская программа не отработана. И начинаются инсульты, язвы, а то и алкоголизм. Избавиться от этого въедливого комплекса довольно сложно – нет-нет да грызнет червячок сомнения: ты же мужчина, что же ты так живешь, а?

Комплекс потерянного времени

Раньше его еще называли кризисом среднего возраста, когда лет в 40 мужчина останавливался, оглядывался и вдруг: «Батюшки! Мне уже 40, а я до сих пор ничего не сделал в этой жизни!» Сегодня этот комплекс молодеет. Вот уже и в 20 – 30 лет в загнанных мужских глазах можно увидеть: «Мне уже 25 (30,35+), а я до сих пор…» И начинается сумасшедшая гонка за призраками.

Комплекс бессилия

Это самый страшный призрак, который посещает мужчину во снах. НЕ СМОГУ! Чего? Да всего, чего угодно. Например, в постели (самый распространенный вариант комплекса). И вроде ж бояться нечего, ну а вдруг? Вот и получается замкнутый круг: вначале сомнения, затем переживания, а в результате – самые страшные мысли претворяются в жизнь.

Вот и получается вариативная самодрессировка. Если не получилось один раз, значит, подобное может повториться. Когда? Неизвестно. А неизвестность, как вы знаете, сильнее всего выматывает нервы.

Комплекс Дон Жуана

Пожалуй, самый простой в понимании. должен бросить женщину до того, как она бросила его. Всем понятно? То-то же. Так что расслабьтесь, барышни. Мужчины вас любят, просто отрабатывают свои детские .

Комплекс Александра

Вы когда-нибудь пробовали мужчину с гетеросексуальной ориентацией обозвать голубым? Нет? И не советую. Поступая таким образом, вы задеваете самые сокровенные струнки души. Оказывается, мужчины больше всего боятся, что их посчитают недостаточно мужественными другие мужчины. При этом специалистам известно, что не меньше 21 % представителей сильного пола имеют соответствующие наклонности, а 30 % даже опыт, приобретенный в молодости (как Александр Македонский, в честь которого комплекс и назван).

Комплекс Котовского

Честно говоря, не знаю, насколько его можно назвать комплексом. Но психологи выделяют его в отдельную категорию. Относится он только к тем особям мужского пола, которые бреют голову наголо. Как тот самый Котовский. А потом шашку, да на коня.

Но это все шуточки. На самом деле 80% мужчин из тех, которые ходят со сверкающе выбритой головой, подсознательно уверены в том, что облысение – это как минимум конец света. Нет волос на голове – нет, хм, мужской силы. Ну а если волосы уничтожить Самостоятельно – это уже символ мужественности получается!

Комплекс царя Давида

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

Само название комплекса пошло еще с древнейших времен – от библейского царя Давида. Именно он любил класть себе в постель молодых девушек, дабы согреться их теплом.

Комплекс Наполеона

Этот комплекс относится не ко всей сильной половине человечества, а только малорослой его части. Гендерные стереотипы на этот счет до сих пор строги: мужчина должен быть выше женщины – и точка. Обсуждению не подлежит.

Хотя, если подумать, а чего ради? Но маленькие мужчины обычно думать об этом не хотят, а стараются компенсировать свой рост в сантиметрах ростом карьерно-личностным. Вспомните: Наполеон (157 см), Диего Марадона (167 см), Дастин Хоффман (163 см). Стали бы они столь известны, если бы в детстве не стояли на физкультуре в самом хвосте? Как вы думаете?

Комплекс Лота

Его, пожалуй, могут прочувствовать только отцы дочерей. Все или нет, утверждать не берусь. Но один мой знакомый, у которого подрастает пока еще совсем крохотная дочурка, как-то в порыве искренности заикнулся: «У меня такое ощущение, что в будущем всех ее ухажеров я буду отгонять метлой. Как я с ними смирюсь, не представляю себе».

Только не нужно сразу обвинять всех поголовно отцов в сексуальных извращениях. Дело тут в обычной , а точнее, в стремлении рассматривать бойфренда дитяти как своего соперника. Название же комплекса берет свое начало опять же в библейской истории.

По сюжету, после уничтожения Содома и Гоморры, Лот вместе со своими двумя дочерьми отправился жить в пещеру, где и возродил весь человеческий род. Ну не было у него другого выбора, не было!

P.S. Уважаемые мужчины, попрошу не обижаться на женскую язвительность. Мы прекрасно понимаем, как вам нелегко живется в этом безумном мире. И ценим вас именно за то, что всегда можете посмеяться над самими собой. Ведь вы действительно это умеете?

Мужские комплексы: что, как и почему

Среди людей бытует мнение, что многие женщины имеют целый ряд комплексов: недовольство своей внешностью, весом, возрастом, материальным положением и т.д. Десятки сайтов, интернет журналов, телепередач рассказывают как девушкам и женщинам бороться со всевозможными комплексами, но мало кто уделяет внимание мужчинам. В обществе сложился определенный образ, который не допускает никакой слабины для сильных мира сего. Мужчина должен быть непоколебим, его должно все устраивать, он не должен иметь никаких страхов и комплексов. Конечно, это правильно, но не всегда отвечает действительности. Многие мужчины имеют комплексы, но не всегда могут это признать, боясь осуждения общества.

Сегодня мы с Вами поговорим про самые большие, самые распространенные мужские комплексы. Вы спросите, а зачем на это нужно. Тут каждый сам для себя должен найти ответ. Лично я считаю, что с любой проблемой, а комплексы – это проблема, нужно бороться с осознания. Если вы реально осознаете, что имеете определенные взгляды на себя и на мир, которые не дают Вам раскрыться полностью, если поймете, что поборов комплексы, сможете достичь значительно больших результатов, то это будет первым шагом к преодолению всевозможных комплексов.
Конечно, описывать все мужские страхи и комплексы мы не будем, ведь для этого может быть мало целой книги, но приведем 8 самых распространенных, тех, с которым сталкивается большинство современных мужчин.

Мужские комплексы: 8 самых распространенных

1. Комплекс Александра
По статистике имя Александр является одним из самых распространенных в мире. Среди известных и успешных людей очень много носителей данного имени, но почему-то очень многие люди ассоциируют его лишь с одной персоной. Уверен, вы тоже когда слышите Александр и пытаетесь вспомнить кого-то известного, то в голову, в первую очередь, приходит образ Александра Македонского, великого полководца и завоевателя. Этот комплекс и назвали в честь античного полководца.
Суть «Комплекса Александра» заключается в том, что мужчина боится показаться не мужчиной в глазах других людей. Если же говорить прямо, то это боязнь того, что все подумают, что мужчина гомосексуалист. Вы можете спросить, а причем тут известный, я б даже сказал легендарный, полководец? Все кроется в современности древнего мира. Гомосексуализм тогда был распространен значительно больше, нежели сейчас, учитывая, что воины годами были в походах, где женщин они точно не видели.
Есть информация, что Александр Македонский, как и множество его воинов, имел половые связи с другими мужчинами. Правда это или миф, боялся ли Александр, что его начнут считать «не мужественным» или нет, уже не важно, ведь данный комплекс есть, и очень многие современные мужчины от него страдают.

2. Комплекс Геракла
Данный мужской комплекс получил свое название в честь героя древнегреческих легенд Геракла. В одной повести было сказано, что однажды Геракла поработила царица амазонок и заставляла прислуживать ей, выполняя чисто женскую работу. Вроде бы легенда, которая своими корнями уходит
в далекое прошлое, но отображение получила в полнее реальном настоящем.
Многие мужчины боятся стать домохозяйками, и по статистике среди всех страхов, комплекс геракла входит в пятерку самых распространенных. Мужчины как огня боятся «женской работы», считая, что один раз поддавшись под это, они будут всю жизнь стирать, мыть посуду, выдирать пыль и чистить плиту. Психологи отмечают, что данный комплекс развивается с годами, а женщины же говорят, что это обычная лень. Кто из них прав? Тут еще нужно подумать.

3. Комплекс Лота
Лот – это библейский персонаж. Согласно легенде, после того как Бог уничтожил Садом и Гоморру, Лот восстановил род человеческий. В качестве женщин он использовал своих родных дочерей, которые и послужили прародительницами будущих жителей.
В современном мире, под комплексом Лота, ученые понимают страх отцов потерять своих дочерей. Но не просто потерять, а отдать в другую семью, выдать замуж, а иногда и просто разрешить встречаться с молодым человеком.
Стоит отметить, что мужчины от данного комплекса не страдают, и считают его проявлением заботы и отцовской любви. В большей же степени всю проблему комплекса Лота ощущают дочери, которых постоянно ограничивают, навязывают свое видение мира, парней и отношений. Некоторые папочки так пекутся о дочерях, так окружают их любовью, что сводят к нулю всю личную жизнь молодых девушек.

4. Комплекс Наполеона
Пожалуй, один из самых известных мужских комплексов в мире. Все мы еще со школьного курса истории помним, что Наполеон был маленького роста, но при этом имел невероятные амбиции и стремление.
Так вот, данный мужской комплекс и заключается в том, что невысокие мужчины чувствуют себя не ловко в обществе. Нам навязывается образ, что мужчина должен быть высокий, крепкий, с широкой спиной и большими мышцами, но не все обладают этими «шаблонными» качествами. В результате «наполеоны» ненавидят всех, кто их выше, лучше, красивее и стараются данный «недостаток» компенсировать за счет своих невероятных амбиций, высоких целей и стремления их достич.

5. Комплекс Дон Жуана
Дон Жуан был известным любовником, который менял женщин как перчатки. Да они и сами были не прочь провести хоть одну ночь с эти великолепным мужчиной. Он их бросал, не жалел ни о чем, и уже через день находил новую спутницу.
Мужчины, которые имеют комплекс Дон Жуана, очень боятся того, что девушка их бросит или захочет первая разорвать отношения. Они считают это постыдным, не достоянным для настоящего мужика. Бросать должен мужчина и точка – такой лозунг «Дон Жуанов».

6. Комплекс Котовского
Котовский был одним из «красных комиссаров» бывшего СССР, жестоким и очень строгим мужчиной. Но нас интересует не его биография и личные качества, а внешний вид. Как вы думаете, откуда пошла мода на бритые головы? Кто-то может сказать, что от скинхедов, кто-то вспомнит братков из девяностых, кто-то еще предложит интересный вариант. Но мужчины, которые решают выбриться на лысо, очень часто это делают из-за преждевременного облысения. Котовский с молодых лет был лысым, а все потому, что рано начал терять волосы.
Хоть современная медицина уже далеко шагнула вперед, но бороться с облысение по-прежнему не легко, и многие мужчины решают выбрать «образ Котовского», нежели признаться, что начали лысеть.

7. Комплекс начальника
Комплекс начальника заключается в том, что мужчина боится оказаться в сильном подчинении, постоянно выполнять указания начальства. В какой-то степени данный комплекс схож с комплексом Геракла, но охватывает очень широкую сферу общественных отношений.
Также мужчины, которые страдают от комплекса Геракла, очень сильно бояться узнать, что их жена зарабатывает больше. Это, как они считают, влечет за собой финансовое подчинение, некое унижение и контроль со стороны жены.

8. Комплекс пенсионера
И последний мужской комплекс присущь практически каждому мужчине, просто единицы могут его признать. Комплекс пенсионера заключается в том, что мужчина очень сильно боится выхода на пенсию, считая, что станет никому не нужным. Стоит отметить, что данный комплекс начинает развиваться значительно раньше выхода на пенсию. Уже к 50 годам мужчина начинает задумываться о своей старости, но при этом упорно не хочет осознавать, что уступает молодым парням во многом. Дух соперничества, и нежелание принимать все как должное, подпитывают данный комплекс,толкая мужчину на очень удивительные, и порой странные, поступки.

Тема о сообщениях (аля SMS) в Астериске не первая на Хабре , но у всех публикаций есть один недостаток - они не обладают функционалом отложенной доставки сообщений. Когда получатель не в сети, вы получаете об этом сообщение при попытке отправки ему message, и предложение попробовать позднее.

Непорядок!

Работать будем с asterisk 11, с установленным FreePBX. Традиционно «без конфигов» в этот раз не получится.

Итак, разрешаем работу messages и указываем контекст обработки оных, в разделе вебморды Settings → Asterisk SIP Settings. В самом низу добавляем кастомные поля для sip.conf и указываем:

Accept_outofcall_message = yes outofcall_message_context = messages auth_message_requests = no
Создаем в extensions_custom.conf этот контекст:

Exten => _.,1,Set(MSG_TO=${CUT(MESSAGE(to),@,1)}) exten => _.,n,MessageSend(${MSG_TO},${MESSAGE(from)}) exten => _.,n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?sendfailedmsg) exten => _.,n,Hangup() exten => _.,n(sendfailedmsg),Set(MSG_TMP=${CUT(MESSAGE(from),<,2)}) exten => _.,n,Set(MSG_FROM=${CUT(MSG_TMP,@,1)}) exten => _.,n,Set(ODBC_SAVE_MESSAGE("${MESSAGE(from)}","${MSG_TO}","${MESSAGE(body)}")=1) exten => _.,n,Set(MESSAGE(body)="[${STRFTIME(${EPOCH},%d%m%Y-%H:%M:%S)}] Ваше сообщение для ${EXTEN} не доставлено. Оно будет доставлено, когда абонент появится в сети.") exten => _.,n,MessageSend(${MSG_FROM}, SYSTEM) exten => _.,n,Hangup()
В этом контексте присутствует вызов ODBC-функции, которая сохраняет «SMS-ку» в СУБД MySQL. Чтобы не морочится с отдельными базами и DSN, я создал таблицу в имеющейся базе asteriskcdrdb:

CREATE TABLE IF NOT EXISTS `messages` (`id` int(11) NOT NULL AUTO_INCREMENT, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `mfrom` varchar(100) CHARACTER SET utf8 NOT NULL, `mto` varchar(100) CHARACTER SET utf8 NOT NULL, `mbody` text CHARACTER SET utf8 NOT NULL, `delivered` timestamp NOT NULL DEFAULT "0000-00-00 00:00:00", PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
В файле func_odbc.conf добавим саму ODBC_функцию:

Writesql = INSERT INTO messages (mfrom,mto,mbody) VALUES ("${ARG1}","${ARG2}","${BASE64_ENCODE(${ARG3})}") dsn = asteriskcdrdb
Как видим, текст сообщения перед сохранением кодируется в base_64. Таким нехитрым образом я обхожу глюки с кириллицей. Кстати, передачу текста в контексте messages обязательно заключать в кавычки, иначе при появлении например запятой в тексте диалпан считает это разделителем параметров:)

Итак, сообщения у нас сохраняются в базу при отсутствии абонента в сети. Осталось настроить механизм доставки ему сего сообщения. Делать будем на php, скрипт я положил в /etc/asterisk/send_delayes_messages.php:


В качестве метки для факта доставки я использую поле delivered типа timestamp, если там нули - то сообщение нуждается в доставке. Таким образом, пробегая по сохраненным недоставленным сообщениям, мы проверям по каждому наличие регистрации пира через команду cli, и если он в сети - создаем outgoing call file, который и производит доставку сего сообщения. После этого скрипт помечает в базе сообщение, устанавливая дату отправки.

Останется прикрутить скрипт через php -f /etc/asterisk/send_delayes_messages.php в поминутный крон и раз в минуту будет производится проверка и попытка доставки сообщения.

Какие минусы у этой реализации? Первый - регистрация статуса пира держится какое то время после обрыва, и вполне возможна ситуация, когда пир кратковременно зарегистрируется и отвалится, а система «отправит» в течение минуты ему сообщение, и будет считать его доставленным. Выкрутится можно, использовав не Application в call-файле, а передачу данных в контекст с проверкой статуса переменной ${MESSAGE_SEND_STATUS}. Наверное, возможно будет использовать имеющийся контекст, задав переменные через Set в call-файле.
Но я пока остановился на этом: некогда.



© dagexpo.ru, 2024
Стоматологический сайт