Сеть - HTTP, POP3, и т.п.

User's plugins

Сеть - HTTP, POP3, и т.п.

Postby Ilya » Tue, 29 Apr 2008, 20:02

HTTP, POP3, ...
Last edited by Ilya on Mon, 05 May 2008, 00:07, edited 1 time in total.
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Восстановление подключения локальной сети

Postby Ilya » Tue, 29 Apr 2008, 20:11

Восстановление подключения локальной сети.
Автор: memberlist.php?mode=viewprofile&u=20462
Code: Select all
#( CLASSIC-TASK-#-Lan
AsLoggedUser
HyperActive
NoLog
NoActive
\ RunOnce NoDel
Action:
SWHide NormalPriority
\ проверяет существует ли папка
S" \\fileserver\eset\" EXIST? NOT
IF
\ если не существует, то "врубает" сеть утилитой devcon
START-APPW: devcon.exe enable PCI\VEN_8086&DEV*
\ ждет 10 секунд, а чтобы не досадно было и чтобы следующий раз руки не отключали сети, то мы "какашке" вырубаем компьютер... причем время установлено так, чтобы при старте системы не произошла перезагрузка до загрузки сети! Все продумано и работает Господа!
PAUSE: 10000
FORCE-REBOOT
THEN
)#
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Отправка почты (e-mail) средствами nnCron

Postby Ilya » Sun, 15 Feb 2009, 21:31

Обновлено 20.11.09г.!
"Частичная" реализация протокола SMTP для nnCrona.
Позволяет отправлять письма с аттачами.
Пример использования
Code: Select all
#( тест_отсылки
NoActive
Action:
   \ 1.пример без шифрованного логина и пароля
    Low-priority \ низкий приоритет
    Confirm-Reading \ подтверждение прочтения
    Confirm-Sending \ подтверждение доставки
    S" c:\Program Files\nncron\plugins\other\smtp_nncron.f" ADD-ATTACH \ прикрепить файл
    S" текст письма" \ текст
    S" тема письма" \ тема
    S" boss-pupkina@mailo.com" \ mail кому
\    S" boss-pupkina@mailo.com zam-pupkina@mailo.com 2boss-pupkina@mailo.com-pupkina@mailo.com" \ Можно указать несколько адресатов через пробел !
    S" pupkin@mailo.com" \ mail от кого
    S" pupkin-re" \ логин
    S" pass" \ пароль
    S" smtp.mailo.com" 25 \ адрес smtp сервера и порт
    SMTP-SEND&ATTACH ?DUP IF MSG: "ошибка отправки: %0 esPICK%" ELSE MSG: "ОК" THEN

    \ 2.пример с шифрованным логином и паролем
    SECLOGINON
    SECPASSON
    Low-priority \ низкий приоритет
    Confirm-Reading \ подтверждение прочтения
    Confirm-Sending \ подтверждение доставки
    S" c:\Program Files\nncron\plugins\other\smtp_nncron.f" ADD-ATTACH \ прикрепить файл
    S" текст письма" \ текст
    S" тема письма" \ тема
    S" boss-pupkina@mailo.com" \ mail кому
    S" pupkin@mailo.com" \ mail от кого
    S" hMa1f7qzQcOq" \ логин
    S" hLK4h1==" \ пароль
    S" smtp.mailo.com" 25 \ адрес smtp сервера и порт
    SMTP-SEND&ATTACH ?DUP IF MSG: "ошибка отправки: %0 esPICK%" ELSE MSG: "ОК" THEN
)#

Сам плагин
Code: Select all
\ smtp_nncron.f v 0.3 (адаптация под nnCron)
\ "Частичная" реализация протокола SMTP с возможностью аттача файлов

\ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список

\ приоритеты письма
\ High-priority - высокий приоритет
\ Norm-priority - нормальный приоритет (по умолчанию)
\ Low-priority - низкий приоритет

\ подтверждения доставки и прочтения
\ Confirm-Reading - запрос подтверждения прочтения
\ Non-Confirm-Reading - нет запроса подтверждения прочтения (по умолчанию)

\ Confirm-Sending - запрос подтверждения доставки
\ Non-Confirm-Sending - нет запроса подтверждения доставки (по умолчанию)

\ адрес для обратного ответа установлен = адресу отправителя

\ установлен идентификатор почтовой программы

\ опционально, использование "условно-зашифрованного" логина в adr3-1 n3-1
\ для получения которого -> nncron.exe с ключом -ep <ваш_логин>
\ SECLOGINON \ SECLOGINOFF ( по умолчанию выключен)

\ опционально, использование "условно-зашифрованного" пароля в adr4 n4
\ для получения которого -> nncron.exe с ключом -ep <ваш_пароль>
\ SECPASSON \ SECPASSOFF ( по умолчанию выключен)


\ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr3-1 n3-1 adr4 n4 adr5 n5 -- err ) - собственно сама отправка

\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - кому!!! (Через пробел можно указать нескольких адресатов )
\ adr3 n3   - от кого!!!
\ adr3-1 n3-1   - логин
\ adr4 n4   - пароль. Если пароль задать пустой строкой S" ", то аутентификация производится не будет (например для mail.ru)
\ adr5 n5   - адрес SMTP сервера
\ n6 - порт SMTP сервера
\ err       - 0 - зер гуд, иначе код ошибки


: CUR-DAY/TIME>S ( -- a u)
     GET-CUR-TIME
     Year@
     Mon@
     Day@
     Hour@
     Min@
     Sec@

    <#
       0 HOLD
       S" .eml" HOLDS
       S>D # # 2DROP
       S>D # # 2DROP
       S>D # # 2DROP
       S>D # # 2DROP
       S>D # # 2DROP
       S>D # # # #
\       ModuleDirName HOLDS
    #>
;
: CUR-DAY/TIME>S1 ( -- a u)
GET-CUR-TIME
     Day@
     Mon@
    Year@
     Hour@
     Min@
     Sec@

    <#
       \ 0 HOLD
       S" +0400" HOLDS
      BL HOLD
       S>D # # 2DROP
      S" :" HOLDS
       S>D # # 2DROP
      S" :" HOLDS
       S>D # # 2DROP
      BL HOLD
      S>D # # # # 2DROP
      BL HOLD
      1- 3 * MONNAMES 1+  + 3 HOLDS
      BL HOLD
       S>D # #
      BL HOLD
       [CHAR] , HOLD
       WDay@ 1- 3 * WDAYS 1+  + 3 HOLDS
      S" Date: " HOLDS
    #>
;

: SOURCE! ( c-addr u -- )
\ установить  c-addr u входным буфером (точнее, областью разбора - PARSE-AREA)
  #TIB ! TO TIB >IN 0!
;

FALSE VALUE SMTPLOGF
FALSE VALUE SECLOGIN

\ Логирование вкл/выкл
: SMTPLOGON TRUE TO SMTPLOGF ;
: SMTPLOGOFF FALSE TO SMTPLOGF ;


: SECLOGINON TRUE TO SECLOGIN ;
: SECLOGINOFF FALSE TO SECLOGIN ;

FALSE VALUE SECPASS
: SECPASSON TRUE TO SECPASS ;
: SECPASSOFF FALSE TO SECPASS ;

3  VALUE X-Priority
: High-priority 2 TO X-Priority ;
: Norm-priority 3 TO X-Priority ;
: Low-priority 4 TO X-Priority ;

FALSE VALUE X-Confirm-Reading-To
: Confirm-Reading TRUE TO X-Confirm-Reading-To ;
: Non-Confirm-Reading FALSE TO X-Confirm-Reading-To ;

FALSE VALUE Return-Receipt-To
: Confirm-Sending TRUE TO Return-Receipt-To ;
: Non-Confirm-Sending FALSE TO Return-Receipt-To ;

VARIABLE attList    \ Указатель на список прикрепляемых файлов

\ Добавить путь к файлу в список
: ADD-ATTACH
        S>ZALLOC attList AddNode
;



: ?free ?DUP IF FREE THROW THEN ;

CREATE vName 255 ALLOT

CLASS: SMTP <SUPER POP3
        var vLogin
        var vFrom
        var vTo
        var vSubj
        var vData
        var vAttach
        var vErr
        var vFB
        var vlfh
        1024 chars vBuf


DESTR: free
        vLogin @ ?free
        vFrom @ ?free
        vTo @ ?free
        vSubj @ ?free
        vlfh @ ?DUP IF CLOSE-FILE THROW THEN
        free
;

CONSTR: init
init
SMTPLOGF IF CUR-DAY/TIME>S R/W CREATE-FILE THROW vlfh ! THEN
;
M: Connect
vPort @ 0= IF 25 vPort ! THEN
Connect
;

M: smtpOK?
read DROP 3 S>NUM DUP
200 399 WITHIN IF DROP TRUE ELSE vErr ! FALSE THEN
;
M: Hello ( -- flag ) S" HELO localhost" write smtpOK? ;
M: Ehlo ( -- flag ) S" EHLO localhost" write HERE 1024 Read DROP  ( smtpOK?) TRUE ;
M: Auth ( -- flag )
S" AUTH LOGIN" write
read 2DROP
vLogin @ ASCIIZ>
SECLOGIN IF
        5 TO 64offset PAD debase64 2DUP + 0! 0 TO 64offset
THEN
HERE base64 write
read 2DROP
vPass @ ASCIIZ>
SECPASS IF
        5 TO 64offset PAD debase64 2DUP + 0! 0 TO 64offset
THEN
HERE base64 write
smtpOK?
;


M: Mail ( a n -- flag ) <# [CHAR] > HOLD vFrom @ ASCIIZ> HOLDS S" MAIL FROM: <" HOLDS 0#> write smtpOK? ;
\ M: Rcpt ( a n -- flag ) <# [CHAR] > HOLD vTo @ ASCIIZ> HOLDS S" RCPT TO: <" HOLDS 0#> write smtpOK? ;
M: Rcpt ( a n -- flag ) <# [CHAR] > HOLD HOLDS S" RCPT TO: <" HOLDS 0#> write smtpOK? ;

M: write 2DUP SELF ->CLASS POP3 write SMTPLOGF IF vlfh @ WRITE-LINE THROW ELSE 2DROP THEN ;
M: wrcrlf SELF ->CLASS Socket WriteCRLF SMTPLOGF IF LT LTL @ vlfh @ WRITE-FILE THROW THEN ;
M: sData ( adr n -- )   \ Начало передачи
S" DATA" write
smtpOK?
IF
        <# vFrom @ ASCIIZ> HOLDS S" From: " HOLDS 0#> write
        S" X-Priority: %X-Priority%" EVAL-SUBST write
        X-Confirm-Reading-To
        IF
                <# vFrom @ ASCIIZ> HOLDS S" X-Confirm-Reading-To: " HOLDS 0#> write
                <# vFrom @ ASCIIZ> HOLDS S" Disposition-Notification-To: " HOLDS 0#> write
        THEN

        Return-Receipt-To
        IF
                <# vFrom @ ASCIIZ> HOLDS S" Return-Receipt-To: " HOLDS 0#> write
        THEN

\ S" X-Mailer: nncron.exe v %VERSION%" EVAL-SUBST write    \ Для nnCron`
S" X-Mailer: nncron.exe v %SVERSION% (SPF v %VERSION%)" EVAL-SUBST write \ Для nnCron
\ <# VERSION 1000 / S>D # # [CHAR] . HOLD # S" X-Mailer: spf4.exe v: " HOLDS #> write \ Для SPF4


<# vFrom @ ASCIIZ> HOLDS S" Reply-To: " HOLDS 0#> write

<# vTo @ ASCIIZ> HOLDS S" To: " HOLDS 0#> write
<# vSubj @ ASCIIZ> HOLDS S" Subject: " HOLDS 0#> write
S" MIME-Version: 1.0" write
S" Content-Type: multipart/mixed; boundary=%QUOTE%bounds1%QUOTE%" EVAL-SUBST write
CUR-DAY/TIME>S1 write
S" --bounds1" write
S" Content-Type: text/plain; charset=windows-1251" write
S" Content-Transfer-Encoding: quoted-printable" write
wrcrlf

OVER + SWAP
?DO
   S" =" SELF ->CLASS Socket Write
   I C@  N>H SELF ->CLASS Socket Write
LOOP
        wrcrlf
ELSE 2DROP THEN
;

M: eData
S" --bounds1--" write
wrcrlf
S" ." write
wrcrlf
;

M: Data
sData eData
;

M: MyFILE \ { adr n --  adr1 n1 }
  R/O OPEN-FILE-SHARED IF DROP S" " EXIT THEN  >R
  R@ FILE-SIZE THROW D>S
  ?DUP IF
  DUP ALLOCATE THROW DUP vFB ! ( # a -- )
  DUP ROT R@ READ-FILE THROW
  ELSE
        S" "
  THEN
  R> CLOSE-FILE THROW
;

M: MyFILE-free
vFB @ ?DUP IF FREE THROW vFB 0! THEN
;


M: Data&Attach
sData
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
        MyFILE
        S" --bounds1" write
        S" Content-Type: text/plain;" write
        S"  name=%QUOTE%%vName ASCIIZ>%%QUOTE%" EVAL-SUBST write
        S" Content-transfer-encoding: base64" write
        S" Content-Disposition: attachment;" write
        S"  filename=%QUOTE%%vName ASCIIZ>%%QUOTE%" EVAL-SUBST write
        wrcrlf
        ?DUP IF
        OVER + SWAP
        ?DO
                I 57 ( 76 ) vBuf base64 write
                57 ( 76 )
        +LOOP
        ELSE
                DROP wrcrlf
        THEN
ELSE 2DROP THEN

eData
MyFILE-free
;

M: _writeOneAttach
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
        MyFILE
        S" --bounds1" write
        S" Content-Type: plain/text;" write
        S"  name=%QUOTE%%vName ASCIIZ>%%QUOTE%" EVAL-SUBST write
        S" Content-transfer-encoding: base64" write
        S" Content-Disposition: attachment;" write
        S"  filename=%QUOTE%%vName ASCIIZ>%%QUOTE%" EVAL-SUBST write
        wrcrlf
        ?DUP IF
        DUP ROT ROT
        OVER + SWAP
        ?DO

         DUP 57 > IF
                        I 57  vBuf base64 write

                ELSE
                        I SWAP vBuf base64 write LEAVE
                THEN
                57 ( 76 ) -
                57 ( 76 )
        +LOOP
        ELSE
                DROP wrcrlf
        THEN
ELSE 2DROP THEN
MyFILE-free
;

M: writeOneAttach NodeValue ASCIIZ> _writeOneAttach ;
M: free-node NodeValue FREE DROP ;

M: writeAttach
sData
   ['] writeOneAttach attList DoList
   ['] free-node attList DoList
   attList FreeList
eData
;

;CLASS



: SMTP-SEND&ATTACH { \ p fl -- }
SMTP NEW TO p

WITH SMTP
        p => vPort !
        p => Addr!
        S>ZALLOC p => vPass !
        S>ZALLOC p => vLogin !
        S>ZALLOC p => vFrom !
        S>ZALLOC p => vTo !
        S>ZALLOC p => vSubj !
[NONAME
        p => Create
        p => Connect
        p => read 2DROP
        p => vPass @ ASCIIZ> NIP
IF
        p => Ehlo
        p => Auth AND
ELSE
        p => Hello
THEN
IF
        p => Mail TO fl
\        p => Rcpt
        p => vTo @ ASCIIZ>
        <TIB
        0 >R
        BEGIN
                NextWord
                ?DUP IF R> 1+ >R THEN
                EndOfChunk
        UNTIL
        R>
        TIB>
        0 ?DO
           p => Rcpt fl OR TO fl
           LOOP

fl
IF p =>  writeAttach ELSE 2DROP 2DROP THEN
ELSE
    2DROP
THEN
NONAME] CATCH ?DUP IF p => vErr ! THEN
        p => Logout
        p => vErr @
        p => Delete
ENDWITH
;
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург


Return to Plugins

Who is online

Users browsing this forum: Bing [Bot] and 1 guest

cron