Отсылка письма средствами nnCron

Обсуждение программ nnCron и nnCron LITE

Re: Отсылка письма средствами nnCron

Postby nebajitel » Thu, 03 Mar 2011, 12:28

Вот такой вопрос возник...
использую данный скрипт для СМС оповещения. СМС приходит по событию
теперь о главном:
Как правильно сделать паузу после выполнения скрипта, т.к. проверка идёт каждые 5 минут и если сервис не поднимется - СМС меня засыпят!
    -----------------------
    S" smtp.bk.ru" 25 \ адрес smtp сервера и порт
    SMTP-SEND&ATTACH \ ?DUP
    IF MSG: "ошибка отправки: %0 esPICK%"
    ELSE
    PAUSE: "00:20" THEN
Сожалею если это уже где то было - я честно искал.
nebajitel
 
Posts: 1
Joined: Thu, 03 Mar 2011, 05:27

Re: Отсылка письма средствами nnCron

Postby revda » Mon, 21 Mar 2011, 03:43

Здравствуйте!!!
Вопрос следующего содержания
Обработка SMTP и POP3 превратилась таки в плагин или еще в состоянии имбриона?
revda
 
Posts: 1
Joined: Fri, 21 Jan 2011, 08:01

Re: Отсылка письма средствами nnCron

Postby registration » Mon, 21 Mar 2011, 09:46

revda wrote:Вопрос следующего содержания
Обработка SMTP и POP3 превратилась таки в плагин или еще в состоянии имбриона?

+1 как говориться. Хотя код плагина, есть парой страниц ранее, только вложенные файлы битые после отправки. А если без вложений то вроде работает
registration
 
Posts: 26
Joined: Mon, 24 Jan 2011, 14:25

Re: Отсылка письма средствами nnCron

Postby AlikasS » Fri, 01 Apr 2011, 06:37

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

\ Modified: 2011 03 22 17 06 +1000 AlikasS,
\  почищен код от неиспользуемых фрагментов
\  кое где добавлены в обработку переносы строк (не видно было в письме-логе вложенных файлов, проверялось на TheBat)
\  некоторые правки кода при использовании слова SMTPLOGON (не сохранялся текст письма в письмо-лог)
\  добавлено вычисление времени UTC в строку с датой создания письма
\  письмо-лог, изменен формат наименования
\  идентификатор программы в теле письма изменен, что бы было видно дату модификации плагина
\ Modified: 2011 03 28 09 18 +1100 AlikasS,
\ изменено вычисление времени UTC в строку с датой создания письма (учет перевода часов)



\ дата внесения изменений в плагин, используется в идентификаторе программы в теле письма
: mod+ S" , smtp plugin v 0.3 mod 2011.03.28 09:18" S+ ;


\ 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 ( по умолчанию выключен)

\ Логирование вкл/выкл в письмо-лог
\ SMTPLOGON \ SMTPLOGOFF ( по умолчанию выключено)

\ 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" -" HOLDS
S>D # # 2DROP
S" -" HOLDS
S>D # # 2DROP
S" -" HOLDS
S>D # # 2DROP
S" -" HOLDS
S>D # # 2DROP
S" -" HOLDS
S>D # # # #
#>
;

CREATE UTCTIME /SYSTEMTIME ALLOT
WINAPI: GetSystemTime KERNEL32.DLL
WINAPI: SetSystemTime kernel32.dll
: GET-UTC-TIME UTCTIME GetSystemTime DROP ; \ принудительное обновление системного времени
: UTCMin@ GET-UTC-TIME UTCTIME wMinute W@ ;
: UTCHour@ GET-UTC-TIME UTCTIME wHour W@ ;
: UTCSec@ GET-UTC-TIME UTCTIME wSecond W@ ;
: UTCDay@ GET-UTC-TIME UTCTIME wDay W@ ;
: UTCMon@ GET-UTC-TIME UTCTIME wMonth W@ ;
: UTCYear@ GET-UTC-TIME UTCTIME wYear W@ ;
: UTCWDay@ GET-UTC-TIME UTCTIME wDayOfWeek W@ ?DUP 0= IF 7 THEN ;

: ~MYTIMELINE ( -- )
GET-UTC-TIME
UTCYear@ UTCMon@ UTCDay@ UTCHour@ UTCMin@ 0 YMDHMS>FT
FT-CUR FT- FT>MIN
;

: MYTIMELINE
~MYTIMELINE ( TIME-ZONE-BIAS ) -1 * DUP 0< IF S" -" ELSE S" +" THEN
2>R 60 /MOD ABS S>D <# # # #> 2R> 2SWAP S+
ROT ABS S>D <# # # #> S+
;

: CUR-DAY/TIME>S1 ( -- a u)
GET-CUR-TIME
Day@ Mon@ Year@ Hour@ Min@ Sec@
<#
0 HOLD
S"  " HOLDS
MYTIMELINE 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
#>
2- \ вот не понятный момент,
\ в строку добавлялось еще два нуля,
\ пришлось ее посто обрезать на два символа
;

FALSE VALUE SMTPLOGF
: SMTPLOGON TRUE TO SMTPLOGF ;
: SMTPLOGOFF FALSE TO SMTPLOGF ;

FALSE VALUE SECLOGIN
: 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 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 -- )  { \ tempalloc -- } \ Начало передачи
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 %SVERSION% " mod+ EVAL-SUBST write
<# 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
wrcrlf
S" --bounds1" write
S" Content-Type: text/plain; charset=windows-1251" write
S" Content-Transfer-Encoding: quoted-printable" write
wrcrlf

OVER + SWAP
2DUP - ?DUP NOT IF 1 THEN 4 * ALLOCATE THROW TO tempalloc \ по идее один символ отправляется как 3, но взял с запасом (4)
?DO
   S" =" 2DUP SELF ->CLASS Socket Write tempalloc  +ZPLACE
   I C@  N>H 2DUP SELF ->CLASS Socket Write tempalloc  +ZPLACE
LOOP

tempalloc  ASCIIZ> SMTPLOGF IF vlfh @ WRITE-LINE THROW ELSE 2DROP THEN \ запись в письмо-лог
tempalloc  FREE THROW

        wrcrlf
ELSE 2DROP THEN
;

M: eData S" --bounds1--" write wrcrlf S" ." write wrcrlf ; \ а на фига здесь точка?

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: _writeOneAttach
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
wrcrlf
        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 => 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
;
тестировалось на
nncron.exe v 1.93b10 Build 1141 03.12.2009
tm.exe v 1.93b10 Build 569 03.12.2009
Directory: C:\WINDOWS.0\system32\config\SYSTEM~1\AppData\Roaming\nnCron
Windows XP (5.1.2600) Service Pack 3
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Отсылка письма средствами nnCron

Postby Ilya » Fri, 22 Apr 2011, 07:59

registration wrote:нет вложенного файла в сообщении посланном плагином smtp_nncron.f v 0.3 (адаптация под nnCron)

[КУСЬ]
Что у меня не так с плагином или заданием, и как это исправить?


И для тех у кого бьются вложения!!!

Можно попробовать сделать небольшую затычку в коде плагина.
Находим метод _writeOneAttach и после слова ?DO вставляем строчку 50 PAUSE . Вместо 50 можно поставить и большее значение.
Возможно происходит наложение данных в исходящем буфере.
Если поможет, то будем вносить более "правильные" изменения в код плагина.
Ilya
 
Posts: 445
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Отсылка письма средствами nnCron

Postby Aveiro » Thu, 07 Jul 2011, 23:12

Подскажите как отправить такое сообщение:
День года (перевод строки)
время (перевод строки)
сообщение из буфера обмена.
Делаю так:
Code: Select all
S" %DD%/%MM%/%YYYY%%crlf%%hh%:%mm%:%ss%%crlf%%CLIPBOARD%" EVAL-SUBST               \ текст

Вместо перевода строки печатается большая буква А... Видимо перевод строки тоже разворачивается EVAL-SUBST.
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Отсылка письма средствами nnCron

Postby VoidVolker » Sat, 09 Jul 2011, 11:41

Aveiro wrote:Вместо перевода строки печатается большая буква А...

Где именно печатается?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Отсылка письма средствами nnCron

Postby Aveiro » Sat, 09 Jul 2011, 12:29

VoidVolker wrote:Где именно печатается?

Мне приходят смс такого вида :
Code: Select all
7/07/2011A13:24:53AТекст из буфера обмена.

А хотелось-бы:
Code: Select all
7/07/2011
13:24:53
Текст из буфера обмена.

Впрочем если сложно,ладно оставим,можно и так читать....
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Отсылка письма средствами nnCron

Postby VoidVolker » Sat, 09 Jul 2011, 13:19

Ну это либо программа отправки смс виновата, либо в смс в качестве перевода строки другие символы/символ используется.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Отсылка письма средствами nnCron

Postby Aveiro » Sat, 09 Jul 2011, 14:22

VoidVolker wrote:Ну это либо программа отправки смс виновата, либо в смс в качестве перевода строки другие символы/символ используется.

Да нет, в данном случае отсылка идет средствами nnCron ( плагин этой темы ) через почту.С почты далее через гейт оператора мне на мобильник.
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Отсылка письма средствами nnCron

Postby AlikasS » Sat, 09 Jul 2011, 15:58

Aveiro wrote:Подскажите как отправить такое сообщение:
День года (перевод строки)
время (перевод строки)
сообщение из буфера обмена.
Делаю так:
Code: Select all
S" %DD%/%MM%/%YYYY%%crlf%%hh%:%mm%:%ss%%crlf%%CLIPBOARD%" EVAL-SUBST               \ текст

Вместо перевода строки печатается большая буква А... Видимо перевод строки тоже разворачивается EVAL-SUBST.

в консоли твоего крона что выдаст?
Code: Select all
S" %DD%/%MM%/%YYYY%%crlf%%hh%:%mm%:%ss%%crlf%%CLIPBOARD%" EVAL-SUBST   TYPE
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Отсылка письма средствами nnCron

Postby Aveiro » Sat, 09 Jul 2011, 19:01

AlikasS wrote:в консоли твоего крона что выдаст?
Code: Select all
S" %DD%/%MM%/%YYYY%%crlf%%hh%:%mm%:%ss%%crlf%%CLIPBOARD%" EVAL-SUBST   TYPE

C консолью опыта работы нет.Но вот что я попытался сделать :
Добавил такую задачу:
Code: Select all
#( Тестовая_задача
NoActive
Action:
S" %DD%/%MM%/%YYYY%%crlf%%hh%:%mm%:%ss%%crlf%%CLIPBOARD%" EVAL-SUBST TYPE
)#

Написал в блокноте "Тестовое сообщение" ,скопировал, запустил консоль,запустил задачу...
Скрин тестов,буквы А нет,но и задача не печатает текст из буфера почему-то. :?
Image
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Отсылка письма средствами nnCron

Postby elos » Sat, 09 Jul 2011, 19:20

В реальности у тебя в буфере может быть нечто, что не будет являться в чистом виде текстом (то есть будут встречаться коды типа табуляции/звонка/т.д.). Вот как в этом случае будет реагировать evaluate - это вопрос... Вот такой случай и надо проверить (посмотреть исходники, например).

А без %CLIPBOARD% всё отрабатывает на ура. Вместо TYPE подставь MsgBox - так вернее будет.
elos
 
Posts: 667
Joined: Tue, 25 Apr 2006, 11:15

Re: Отсылка письма средствами nnCron

Postby VoidVolker » Sat, 09 Jul 2011, 19:35

EVALUATE тут не при делах. Да и без разницы какой текст в буфере - TYPE спокойно "разпознает" всю эту шушеру. Как вариант можно попробовать Autostrings.spf:
Code: Select all
" %DD%/%MM%/%YYYY%|n%hh%:%mm%:%ss%|n%CLIPBOARD%"
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Отсылка письма средствами nnCron

Postby Aveiro » Sat, 09 Jul 2011, 19:47

Значицо так...
Попробовал сейчас вариант предложенный elos .
Задачу изменил :
Code: Select all
#( Тестовая_задача
NoActive
Action:
CLIPBOARD: "Вот что я показываю ..."
S" %DD%/%MM%/%YYYY%%crlf%%hh%:%mm%:%ss%%crlf%%CLIPBOARD%" EVAL-SUBST MsgBox
)#

Все отрабатывает как надо. Есть перевод строки,нет букв А ,текст из буфера правильно показан в MsgBox.
Вернулся и сного заменил MsgBox на TYPE. Не печатается текст из буфера....видимо не в табуляции и т.п дело. :?
Сейчас попробую вариант VoidVolker
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest