| The Russian Electronic Developer Magazine | |
| Русский электронный журнал разработчика | |
/****** CONFIG BEGIN ******/ /* Расположение INI*/ ini='e:\weasel\weasel.ini' /* Subject для УДАЛЕНИЯ */ sDEL="DELETE" /* Subject для ИЗМЕНЕНИЯ */ sEDIT="EDIT" /* Subject для СОЗДАНИЯ НОВОГО */ sNEW="NEW" /* email "кому" разрешает администрировать */ emailedit='edit@weasel' /* список email "от кого" разрешается администрировать */ emailFromBase='emailedit.txt' /******* CONFIG END *******/и создать файл emailedit.txt вида:
; первая строка - комментарий you@domain.comс допущенными для администрирования e-mail по одному в каждой строке. Все эти настройки желательно никому не говорить :). Setup.exe из поставки Weasel "иногда" добавляет в конец значения MailRoot перевод строки, если в строке:
Call SysMkDir(MailRoot||email)
возникает ошибка, то это - оно. Я вылечил перенабором MailRoot в SETUP.EXE Weasel`а.
Письма должны быть plain/text, тело письма состоит из строк:
NAME: Vasya Pupkin EMAIL: pupkin PASS: suxx COMM: My Boss - Must Dieдля удаления, достаточно одного поля "EMAIL:". Если хотите использовать кирилицу, а потом еще и читать из setup.exe - письма надо отсылать в кодировке 866. И сообственно скрипт:
/* Администрирование Weasel с помощью писем*/
call rxfuncadd 'sysloadfuncs', 'rexxutil', 'sysloadfuncs';
call sysloadfuncs
PARSE ARG userargs
PARSE VAR userargs FileMSG userargs
PARSE VAR userargs EmailFile userargs
/****** CONFIG BEGIN ******/
/* Расположение INI*/
ini='e:\weasel\weasel.ini'
/* Subject для УДАЛЕНИЯ */
sDEL="DELETE"
/* Subject для ИЗМЕНЕНИЯ */
sEDIT="EDIT"
/* Subject для СОЗДАНИЯ НОВОГО */
sNEW="NEW"
/* email "кому" разрешает администрировать */
emailedit='edit@weasel'
/* список email "от кого" разрешается администрировать */
emailFromBase='emailedit.txt'
/******* CONFIG END *******/
EmailFrom=LineIn(EmailFile,1,1)
EmailTo=LineIn(EmailFile,,1)
EmailTo=STRIP(EmailTo,,'<')
EmailTo=STRIP(EmailTo,,'>')
EmailFrom=STRIP(EmailFrom,,'<')
EmailFrom=STRIP(EmailFrom,,'>')
/* проверка email-получателя */
if EmailTo = EmailEdit then
Do
rc=seekemail() /* проверка, имеет ли право отправитель администрировать*/
if rc \= 0 then
do
subj=subject() /* определяем поле Subject */
call inifield /* определяем поля EMAIL,NAME etc */
SELECT
when subj=sNEW
then
call newedit
when subj=sDEL
then
call dead
when subj=sEDIT
then
do
call dead
call newedit
end
otherwise
END
exit 2 /* письмо обработано - письмо уничтожить */
end
End
say Subj emailto Emailfrom
EXIT 0 /* письмо не относится к Администрированию - пропустить */
/* Удаление */
DEAD:
rc=SysIni(ini, email, 'DELETE:')
return
/* Новое */
NEWEDIT:
rc1=SysIni( ini, email, 'RealName', Name)
rc2=SysIni( ini, email, 'Password', Pass)
rc3=SysIni( ini, email, 'Comments' , Comm)
/* создаем каталог */
MailRoot=SysIni( ini, '$SYS', 'MailRoot')
Call SysMkDir(MailRoot||email)
return
/* Определение email realname password comments */
INIFIELD:
str=linein(FileMSG,1,1)
DO WHILE LINES(FileMSG)
str=STRIP(LINEIN(FileMSG,,1))
ePOS=POS('EMAIL:',str)
nPOS=POS('NAME:',str)
pPOS=POS('PASS:',str)
cPOS=POS('COMM:',str)
IF ePOS \= 0 THEN
email=STRIP(SUBSTR(str,7))
IF nPOS \= 0 THEN
name=STRIP(SUBSTR(str,6))
IF pPOS \= 0 THEN
pass=STRIP(SUBSTR(str,6))
IF cPOS \= 0 THEN
comm=STRIP(SUBSTR(str,6))
end
return
/* поиск Subject */
SUBJECT:
str=linein(FileMSG,1,1)
DO WHILE LINES(FileMSG)
str=LINEIN(FileMSG,,1)
IF POS('Subject:', STRIP(str)) \= 0 THEN
DO
PARSE VAR str scum str
PARSE VAR str subj str
LEAVE
END
end
/* возврат в UPPERCASE */
return translate(Strip(subj))
/* провека на допуск администрировать */
SEEKEMAIL:
str=linein(emailFromBase,1,1)
DO WHILE LINES(emailFromBase)
str=LINEIN(emailFromBase,,1)
IF SUBSTR(str,1,1) \= ';' THEN
do
emailBase=str
IF emailBase=emailFrom THEN
return 1 /* с этого email можно администрировать */
end
end
return 0 /* с этого email нельзя администрировать */
/**********/
Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов