Страница 1 из 1

сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Пн сен 28, 2015 1:47 pm
Vovix
Хочу поделиться своей наработкой, в принципе ни чего особенного
просто удобный, как мне кажется, сценарий который передает сообщения пользователю
тремя возможными путями (при чем кому передать можно просто указать именем пользователя или его прозвищем):

1) Через SMS - используется специальный адрес e-mail(в моем случае МЕГАФОН) привязанный к номеру
2) Просто письмо на электронную почту
3) Выдача сообщения непосредственно на экран iPhone или iPad (используется доп.библиотека: http://majordomo.smartliving.ru/forum/v ... one#p16175)

Вызов скрипта:

Код: Выделить всё

runScript('send_mes', array('to'=>$to,'subj'=>$subj,'msg'=>$msg,'what'=>$what)); 
где:
$to - это переменная со значением "Кому отправить" (при этом можно указать как ИМЯ или прозвище, так и адрес эл.почты)
$subj - тема сообщения (не обязательно)
$msg - сам текст сообщения
$what - что передать (чем), возможные значения: SMS, Email, iPhone

Необходимые условия:
Используются объекты из класса "Users"
задействованные (необходимые) свойства для объектов:
"altName" - альтернативные имена (корни имен) через запятую, возможно и в дательном падеже
"fullName" - имя пользователя (основное имя)
"AppleID" - AppleID пользователя в iCloud
"AppleDevNum" - номер устройства Apple соответствующего например iPhone (если имеем несколько устройств Apple)
"ApplePass" - пароль к AppleID пользователя в iCloud. У меня храниться в закодированном виде: http://habrahabr.ru/post/61309/ файл с функцией добавлен в библиотеку на сервер (каталог lib)
"Email" - основной адрес электронной почты пользователя
"gender" - пол пользователя одной буквой
"sms2email" - адрес электронной почты для отправки SMS

Вот сценарий "send_mes" с комментариями:
send_mesПоказать

Код: Выделить всё

/*
* Сценарий 'send_mes' для MajorDoMo 
* автор: Владимир Попов, на форуме - Vovix 
* дата последнего изменения: 30.09.2015 
* runScript('send_mes', array('to'=>$хххх,'subj'=>$yyyy,'msg'=>$zzzz,'what'=>$qqqq)) 
*/

// кому отправить, просто имя или адрес e-mail включающий знак "@" (при пустом = "admin")
$user_to=($params['to']=='') ?  "admin" : $params['to'];

// тема сообщения (при пустом = "Alice! Smart Home system")
$subject=($params['subj']=='') ?  "Alice! Smart Home system" : $params['subj'];

// текст сообщения (при пустом = "проверка связи")
$msg=($params['msg']=='') ?  "проверка связи" : $params['msg'];

// что будем отправлять (через что): SMS, Email, iPhone
$what=($params['what']=='') ?  "iPhone" : $params['what'];

// константы для e-mail отправок
$from = "admin@mdm.vovix";
$sms2email='';

// присваеваем первоначальные НЕИЗВЕСТНЫЕ значения, на всякий случай
$fullName='unknown';
$user='unknown';
$gender='unknown';

// вариант №1
// проверим встречается ли символ '@' в кому отправить, т.е. указан ли конкретный e-mail?? 
// если не встретилось или это первый символ, то будем определять среди своих пользователей
// $podstr1=strpos($user_to, '@');
// if (($podstr1===false)||($podstr1=='0')) {
    
// вариант №2
// проверим НЕ указан ли именно e-mail    
if (!preg_match("/^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$/i", $user_to)) {
    
    // определяем массив значений альтернативных имен 
    $altNameArray=array();
    
    // переберем всех пользователей
    $objects=getObjectsByClass("Users");
    foreach($objects as $obj) {
        // проверим, может это главное имя и перебирать альтернативы тогда не надо? 
        if (gg($obj['TITLE'].".fullName")==$user_to) {
            $fullName=gg($obj['TITLE'].'.fullName');
            $sms2email=gg($obj['TITLE'].'.sms2email');
            $user=$obj['TITLE']; 
        } else {
            // присвоим
            $altName=gg($obj['TITLE'].".altName");
            // имена разделены запятой
            $altNameArray = explode(",",$altName);
            $len=count($altNameArray);
            // в цикле проверяем вхождение альтернативных имён
            for($j=0;$j<$len;$j++) {
                $podstr2=strpos($user_to, $altNameArray[$j]);
                if ($podstr2===false) {
                    // тут нет таких
                  } else {
                    // вот нашли
                    $fullName=gg($obj['TITLE'].'.fullName');
                    $sms2email=gg($obj['TITLE'].'.sms2email');
                    $user=$obj['TITLE'];
                } 
            }
        }
    }
}

// проверим ЧТО будем отправлять
switch ($what): 
    
    // SMS
    case 'SMS':
    case 'sms':
    case 'СМС':
    case 'смс':
    
        if ($user<>'unknown') {
            say ("Отправляю SMS сообщение. Кому: ".$user_to.". Текст сообщения: ".$msg.". Получатель мне известен как: ".$fullName,1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject); 
            SendMail($from, $sms2email, $subject, $message);
        } else if (!($podstr1===false)||!($podstr1=='0')) {
            say ("Я попытаюсь отправить SMS сообщение посредством e-mail. Кому: ".$user_to.". Текст сообщения: ".$msg.". Но с получателем я видимо не знакома и не уверена в представленном вами e-mail адресе.",1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject); 
            SendMail($from, $user_to, $subject, $message);   
        } else {
            say ("Увы, отправить СМС не получиться, такого адреса: ".$user_to." я ,видимо, не знаю.",1);
        }
    break;
    
    // Email
    case 'Email':
    case 'E-mail':
    case 'еmail':
    case 'e-mail':
    case 'письмо':
        if (($user<>'unknown')&&(gg($user.'.Email')<>'')) {
            say ("Отправляю e-mail. Кому: ".$user_to.". Текст письма: ".$msg.". Получатель мне известен как: ".$fullName,1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject);
            SendMail($from, gg($user.'.Email'), $subject, $message);
        } else if (($user<>'unknown')&&(gg($user.'.Email')=='')) {
            $fullName=gg($user.'.fullName');
            $gender=gg($user.'.gender');
            $ending1=($gender<>'ж') ? 'ен' : 'на';
            $pronoun1=($gender<>'ж') ? 'его' : 'её';
             say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." электронном адресе.",1);
        } else {
            say ("Я попытаюсь отправляю e-mail на адрес: ".$user_to.". Текст письма: ".$msg.". Но с получателем я видимо не знакома и не уверена в представленом вами e-mail адресе.",1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject); 
            SendMail($from, $user_to, $subject, $message);   
        }
    break;
    
    // iPhone
    case 'iPhone':
    case 'Iphone':
    case 'IPhone':
    case 'iphone':
    case 'телефон':
        if (($user<>'unknown')&&(gg($user.'.AppleID')<>'')) {
            $fullName=gg($user.'.fullName');
            $AppleID=gg($user.'.AppleID');
            $ApplePass=dsCrypt(gg($user.'.ApplePass'),true);
            $gender=gg($user.'.gender');
            $AppleDevNum=(gg($user.'.AppleDevNum')=='') ?  0 : gg($user.'.AppleDevNum');
            // особенность наше сообщение передадим как тему, так лучше на экране выглядит
            $subject=$msg;
            soundToMyiPhone($AppleID, $ApplePass, $subject, $AppleDevNum);
            say ("На iPhone, пользователя: ".$fullName.", отправлен сигнал и текст на экран.",1);
        } else if (($user<>'unknown')&&(gg($user.'.AppleID')=='')) {
            $fullName=gg($user.'.fullName');
            $gender=gg($user.'.gender');
            $ending1=($gender<>'ж') ? 'ен' : 'на';
            $pronoun1=($gender<>'ж') ? 'его' : 'её';
             say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." Ай Фон Ай Ди.",1);
        } else {
            say ("Не понятно на чей Ай Фон нужно отправить сигнал. Видимо я ".$user_to." пока не знаю!",1); 
        }
    break;
    
    // не понятно что
    default:
        say ("Тут какая-то ошибка с каналом отправки сообщения. ".$what." - такой вариант отправки мне не известен.",1);
endswitch;
 

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Вт сен 29, 2015 5:45 am
Amarok
А про $gender подробнее можно? Где и как используется?

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Вт сен 29, 2015 1:11 pm
Vovix
Amarok писал(а):А про $gender подробнее можно? Где и как используется?
Да конечно!
У меня просто используется это тут например:

Код: Выделить всё

$fullName=gg($user.'.fullName');
$gender=gg($user.'.gender');
$ending1=($gender<>'ж') ? 'ен' : 'на';
$pronoun1=($gender<>'ж') ? 'его' : 'её';
say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." электронном адресе.",1);
т.е. окончания и местоимения во фразе Алисы зависят от пола!

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Ср мар 30, 2016 12:34 pm
adzam
Я все делал согласно инструкции с первого поста

команду отсылаю
runScript('send_mes', array('to'=>'Vitalii','subj'=>$subj,'msg'=>$msg,'what'=>'Email'));

получаю в чат сообщение
12:29 Алиса: Отправляю e-mail. Кому: Vitalii. Текст письма: проверка связи. Получатель мне известен как: Vitalii

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

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Ср мар 30, 2016 5:29 pm
Vovix
adzam писал(а):Я все делал согласно инструкции с первого поста

команду отсылаю
runScript('send_mes', array('to'=>'Vitalii','subj'=>$subj,'msg'=>$msg,'what'=>'Email'));

получаю в чат сообщение
12:29 Алиса: Отправляю e-mail. Кому: Vitalii. Текст письма: проверка связи. Получатель мне известен как: Vitalii

и это все казалось бы сообщение должно уйти, но не уходит или не доходит.
Может еще надо добавить что-то библиотеку там или прогу какую-то подскажите пож. буду премного благодарен.
Проблема в неработающей по умолчанию функции SendMail!
над ней приходится шаманить! У меня реализовано через организацию почтового сервера непосредственно на localhost!
(как делал уже не помню, будет время посмотрю у себя)

Здесь в форумах можно найти варианты реанимации функции SendMail

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Вт апр 19, 2016 1:21 pm
adzam
Vovix писал(а):
adzam писал(а):Я все делал согласно инструкции с первого поста

команду отсылаю
runScript('send_mes', array('to'=>'Vitalii','subj'=>$subj,'msg'=>$msg,'what'=>'Email'));

получаю в чат сообщение
12:29 Алиса: Отправляю e-mail. Кому: Vitalii. Текст письма: проверка связи. Получатель мне известен как: Vitalii

и это все казалось бы сообщение должно уйти, но не уходит или не доходит.
Может еще надо добавить что-то библиотеку там или прогу какую-то подскажите пож. буду премного благодарен.
Проблема в неработающей по умолчанию функции SendMail!
над ней приходится шаманить! У меня реализовано через организацию почтового сервера непосредственно на localhost!
(как делал уже не помню, будет время посмотрю у себя)

Здесь в форумах можно найти варианты реанимации функции SendMail
Помогите мне оживить эту функцию, ну никак не запускается, уже весь мозг высушил и не могу победить ее!
Может кто обьяснит или какую-то инструкцию сделает ну типа для чайников?
Спасибо за любой ответ.

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Чт апр 21, 2016 8:32 am
ToteMeiSter
А чем телеграмм не устраивает, оперативно отправляет все согласно приоритету.

Отправлено с моего 2013023 через Tapatalk

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Добавлено: Ср авг 03, 2016 4:39 pm
kozsv
Отвечу я чем телеграм не устраивает, я как и тот кто написал пост в место платных сервисов смс использую почту мегафона для отправки себе на телефон смс через почту вида login@megafon.ru (примерно так), для случаев когда на телефоне нет интернете придёт смс оповещение о важном событии. Наверно по этому платят платным сервисам за смс. И мне тоже хочется чтоб это за работало щас попробую.