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

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

Postby Lynx » Thu, 03 Aug 2006, 14:56

Может будет проще архивнуть все файлы и послать архивом, а на той стороне обратно разпаковать?
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Postby zenik » Thu, 03 Aug 2006, 15:46

vetal_l wrote:...В общем менять этот бардак никто не хочет, а вот автоматизировать сборку результатов этого бардака я им зачем то предложил...

Автоматизируя бардак - получаем автоматизированный бардак.

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

Code: Select all
Dim omail
TargetFolder = "c:\Каталог_с_файлами"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder)
Set colItems = objFolder.Items
On Error Resume Next
Set omail = CreateObject("CDO.Message")
    omail.From = "Vasya Pupkin <pupkin@mail.ru>"
    omail.To = "Vasya Nepupkin <nepupkin@mail.ru>"
    omail.Subject = "Test cdo-mail with nnbackup.log"
    omail.Textbody = "It's first line of test mail" & vbCrLf &_
                     "It's second line of test mail" & vbCrLf &_
                     "-- " & vbCrLf & "WBR, your nnCron" & vbCrLf & Now
    omail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    omail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
            "*.*.*.*"
    omail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    omail.Configuration.Fields.Update
   For i = 0 to colItems.Count - 1
      omail.AddAttachment TargetFolder+colItems.Item(i)
   Next
    omail.Send
if Err<>0 Then Err.Clear
Set omail = Nothing
Wscript.Quit
zenik
 
Posts: 30
Joined: Thu, 25 May 2006, 12:23

Postby leopro » Fri, 18 Aug 2006, 08:10

zenik wrote:Автоматизируя бардак - получаем автоматизированный бардак.

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

Code: Select all
Dim omail
TargetFolder = "c:\Каталог_с_файлами"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder)
Set colItems = objFolder.Items
On Error Resume Next
Set omail = CreateObject("CDO.Message")
    omail.From = "Vasya Pupkin <pupkin@mail.ru>"
    omail.To = "Vasya Nepupkin <nepupkin@mail.ru>"
    omail.Subject = "Test cdo-mail with nnbackup.log"
    omail.Textbody = "It's first line of test mail" & vbCrLf &_
                     "It's second line of test mail" & vbCrLf &_
                     "-- " & vbCrLf & "WBR, your nnCron" & vbCrLf & Now
    omail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    omail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
            "*.*.*.*"
    omail.Configuration.Fields.Item _
        ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    omail.Configuration.Fields.Update
   For i = 0 to colItems.Count - 1
      omail.AddAttachment TargetFolder+colItems.Item(i)
   Next
    omail.Send
if Err<>0 Then Err.Clear
Set omail = Nothing
Wscript.Quit

не работает этот скрипт.
не цепляет файлы из каталога.

если цикл убрать и жёстко указывать имя одного файла, то он прикрепляется и отправляется. а с циклом не работает =((((

может исправить что надо!?
leopro
 
Posts: 2
Joined: Fri, 02 Dec 2005, 11:58

Postby zenik » Thu, 24 Aug 2006, 12:21

Вариантов два:
1. Не правильно указан каталог в строке TargetFolder = "C:\Temp\" (примерно так его и надо указывать)
2. Скрипт не работает с вложеными каталогами, т.е. вложенные в указанный каталог файлы - оправляются, каталоги - игнорируются.

з.ы. Сам скрипт только что еще раз проверил, у меня все отсылается, и мало того еще и до адресата доходит ;)
zenik
 
Posts: 30
Joined: Thu, 25 May 2006, 12:23

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

Postby SaMM » Sat, 26 Aug 2006, 14:23

D.Ilyin wrote:Как можно отправить письмо с помошью nnCron не используя сторонние утилиты?
Если в данный момент это не возможно, то планируется ли создание подобного плагина или же набора внутренних команд?


Случайно накнулся на интересную инфу - "Отправка почты через командную строку".
Думаю, это выход (Кроном формировать командную строку).

Смотреть здесь http://it.bakinity.biz/smart.php?cat=1&id=49
или вот еще http://www.sql.ru/forum/actualthread.aspx?tid=227411
SaMM
 
Posts: 236
Joined: Fri, 25 Aug 2006, 12:33

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

Postby Ilya » Sun, 23 Nov 2008, 17:10

Вот теперь стало возможным отправлять мыло ( с аттачами) средствами самого nnCron :D
Code: Select all
\ smtp_nncron.f (адаптация под nnCron)
\ "Частичная" реализация протокола SMTP с возможностью аттача файлов
\
\ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список
\
\ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr4 n4 adr5 n5 -- ) - собственно сама отправка
\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - от кого
\ adr3 n3   - кому
\ adr4 n4   - пароль. Если пароль задать пустой строкой S" ", то аутентификация производится не будет (например для mail.ru)
\ adr5 n5   - адрес SMTP сервера
\

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

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

: ?free ?DUP IF FREE THROW THEN ;

CREATE vName 255 ALLOT

CLASS: SMTP <SUPER POP3
    var vFrom
    var vTo
    var vSubj
    var vData
    var vAttach
    \ 128 chars vName

CONSTR: init init 25 vPort ! ;
DESTR: free
        vFrom @ ?free
        vTo @ ?free
        vSubj @ ?free

        \ vData @ ?free
        free
;


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
S" AUTH LOGIN" write
read 2DROP
vFrom @ ASCIIZ>  HERE base64 write
read 2DROP
vPass @ ASCIIZ> 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: sData ( adr n -- )   \ Начало передачи
S" DATA" write
smtpOK?

IF
 <# vFrom @ ASCIIZ> HOLDS S" From: " 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
S" --bounds1" write
S" Content-Type: text/plain; charset=windows-1251" write
S" Content-Transfer-Encoding: quoted-printable" write
WriteCRLF
OVER + SWAP
?DO
   S" =" Write
   I C@  N>H Write
LOOP
WriteCRLF
ELSE 2DROP THEN
;

M: eData
S" --bounds1--" write
\ vErr @ IF
WriteCRLF S" ." write WriteCRLF
\  THEN
;

M: Data
sData eData
;

M: Data&Attach
sData
2DUP
ONLYNAME
vName ZPLACE
2DUP FILE-EXIST
IF
FILE

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
WriteCRLF


      OVER + SWAP
      ?DO
         I 76
                  HERE base64 write
         76
      +LOOP
ELSE 2DROP THEN

eData
;

M: _writeOneAttach
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
FILE
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
WriteCRLF

DUP ROT ROT
      OVER + SWAP
      ?DO
         DUP 76 > IF I 76  HERE base64 write ELSE I SWAP HERE base64 write LEAVE THEN
         76 -
         76
      +LOOP
ELSE 2DROP THEN
;

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 -- }
SMTP NEW TO p
WITH SMTP
   p => Addr!
   p => Create
   S>ZALLOC p => vPass !
   S>ZALLOC p => vFrom !
        S>ZALLOC p => vTo !
        S>ZALLOC p => vSubj !
        p => Connect
        p => read 2DROP
        p => vPass @ ASCIIZ> NIP
        IF
            p => Ehlo
            p => Auth AND
         ELSE
            p => Hello
         THEN
        IF

        p => Mail
        p => Rcpt
        OR
        IF p =>  writeAttach ELSE 2DROP 2DROP THEN
        ELSE
            2DROP
        THEN
        \ p => vErr @ CR ." Err=" .
        p => Logout
        p => Close
    p => Delete

ENDWITH

;


Пример использования:
Code: Select all
#( tst-smtp
NoActive
Action:
S" c:\setup.log" ADD-ATTACH
S" c:\config.sys" ADD-ATTACH
S" c:\mdr.iss" ADD-ATTACH
S" c:\Program Files\nncron\plugins\smtp_cron.f" ADD-ATTACH
S" Отправлено при помощи плагина"
S" smtp plugin"
S" xxxx@mail.ru"
S" xxxx@nm.ru"
S" pass"
S" mail.pochta.ru"
SMTP-SEND&ATTACH
)#
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby AlikasS » Mon, 24 Nov 2008, 02:45

а номер порта можно вынести из плагина? для смены если необходимо :-)

добавил немного слов в плагин
Code: Select all
\ smtp_nncron.f (адаптация под nnCron)
\ "Частичная" реализация протокола SMTP с возможностью аттача файлов
\
\ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список
\
\ приоритеты письма
\ High-priority - высокий приоритет
\ Norm-priority - нормальный приоритет
\ Low-priority - низкий приоритет
\
\ подтверждения доставки и прочтения
\ Confirm-Reading - запрос подтверждения прочтения
\ Non-Confirm-Reading - нет запроса подтверждения прочтения (по умолчанию)
\
\ Confirm-Sending - запрос подтверждения доставки
\ Non-Confirm-Sending - нет запроса подтверждения доставки (по умолчанию)
\
\
\ адрес для обратного ответа установлен = адресу отправителя
\
\ установлен идентификатор почтовой программы
\
\
\ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr4 n4 adr5 n5 -- ) - собственно сама отправка
\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - от кого
\ adr3 n3   - кому
\ adr4 n4   - пароль. Если пароль задать пустой строкой S" ", то аутентификация производится не будет (например для mail.ru)
\ adr5 n5   - адрес SMTP сервера
\

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 vFrom
    var vTo
    var vSubj
    var vData
    var vAttach
    \ 128 chars vName

CONSTR: init init 25 vPort ! ;
DESTR: free
        vFrom @ ?free
        vTo @ ?free
        vSubj @ ?free

Norm-priority
Non-Confirm-Reading
Non-Confirm-Sending

        \ vData @ ?free
        free
;


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
S" AUTH LOGIN" write
read 2DROP
vFrom @ ASCIIZ>  HERE base64 write
read 2DROP
vPass @ ASCIIZ> 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: 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 %SVERSION%" 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
S" --bounds1" write
S" Content-Type: text/plain; charset=windows-1251" write
S" Content-Transfer-Encoding: quoted-printable" write
WriteCRLF
OVER + SWAP
?DO
   S" =" Write
   I C@  N>H Write
LOOP
WriteCRLF
ELSE 2DROP THEN
;

M: eData
S" --bounds1--" write
\ vErr @ IF
WriteCRLF S" ." write WriteCRLF
\  THEN
;

M: Data
sData eData
;

M: Data&Attach
sData
2DUP
ONLYNAME
vName ZPLACE
2DUP FILE-EXIST
IF
FILE

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
WriteCRLF


      OVER + SWAP
      ?DO
         I 76
                  HERE base64 write
         76
      +LOOP
ELSE 2DROP THEN

eData
;

M: _writeOneAttach
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
FILE
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
WriteCRLF

DUP ROT ROT
      OVER + SWAP
      ?DO
         DUP 76 > IF I 76  HERE base64 write ELSE I SWAP HERE base64 write LEAVE THEN
         76 -
         76
      +LOOP
ELSE 2DROP THEN
;

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 -- }
SMTP NEW TO p
WITH SMTP
   p => Addr!
   p => Create
   S>ZALLOC p => vPass !
   S>ZALLOC p => vFrom !
        S>ZALLOC p => vTo !
        S>ZALLOC p => vSubj !
        p => Connect
        p => read 2DROP
        p => vPass @ ASCIIZ> NIP
        IF
            p => Ehlo
            p => Auth AND
         ELSE
            p => Hello
         THEN
        IF

        p => Mail
        p => Rcpt
        OR
        IF p =>  writeAttach ELSE 2DROP 2DROP THEN
        ELSE
            2DROP
        THEN
        \ p => vErr @ CR ." Err=" .
        p => Logout
        p => Close
    p => Delete
ENDWITH
;

дополнения
\ приоритеты письма
\ High-priority - высокий приоритет
\ Norm-priority - нормальный приоритет
\ Low-priority - низкий приоритет
\
\ подтверждения доставки и прочтения
\ Confirm-Reading - запрос подтверждения прочтения
\ Non-Confirm-Reading - нет запроса подтверждения прочтения (по умолчанию)
\
\ Confirm-Sending - запрос подтверждения доставки
\ Non-Confirm-Sending - нет запроса подтверждения доставки (по умолчанию)
\
\ адрес для обратного ответа установлен = адресу отправителя
\
\ установлен идентификатор почтовой программы

пример
Code: Select all
#( tst-smtp
NoActive
Action:
High-priority
Confirm-Reading
Confirm-Sending
S" c:\setup.log" ADD-ATTACH
S" c:\config.sys" ADD-ATTACH
S" c:\mdr.iss" ADD-ATTACH
S" c:\Program Files\nncron\plugins\smtp_cron.f" ADD-ATTACH
S" Отправлено при помощи плагина"
S" smtp plugin"
S" xxxx@mail.ru"
S" xxxx@nm.ru"
S" pass"
S" mail.pochta.ru"
SMTP-SEND&ATTACH
)#
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby Ilya » Mon, 24 Nov 2008, 19:56

По просьбам трудящихся - Вынос порта наружу! :lol:
Code: Select all
    \ smtp_nncron.f (адаптация под nnCron)
    \ "Частичная" реализация протокола SMTP с возможностью аттача файлов
    \
    \ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список
    \
    \ приоритеты письма
    \ High-priority - высокий приоритет
    \ Norm-priority - нормальный приоритет
    \ Low-priority - низкий приоритет
    \
    \ подтверждения доставки и прочтения
    \ Confirm-Reading - запрос подтверждения прочтения
    \ Non-Confirm-Reading - нет запроса подтверждения прочтения (по умолчанию)
    \
    \ Confirm-Sending - запрос подтверждения доставки
    \ Non-Confirm-Sending - нет запроса подтверждения доставки (по умолчанию)
    \
    \
    \ адрес для обратного ответа установлен = адресу отправителя
    \
    \ установлен идентификатор почтовой программы
    \
    \
    \ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr4 n4 adr5 n5 -- ) - собственно сама отправка
    \ adr n     - содержимое письма
    \ adr1 n1   - тема письма
    \ adr2 n2   - от кого
    \ adr3 n3   - кому
    \ adr4 n4   - пароль. Если пароль задать пустой строкой S" ", то аутентификация производится не будет (например для mail.ru)
    \ adr5 n5   - адрес SMTP сервера
    \ n6        - порт 0 - 25 порт, отличное от 0 - ваш выбор.

    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 vFrom
        var vTo
        var vSubj
        var vData
        var vAttach
        \ 128 chars vName

    CONSTR: init init vPort @ 0= IF 25 vPort ! THEN ;
    DESTR: free
            vFrom @ ?free
            vTo @ ?free
            vSubj @ ?free

    Norm-priority
    Non-Confirm-Reading
    Non-Confirm-Sending

            \ vData @ ?free
            free
    ;


    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
    S" AUTH LOGIN" write
    read 2DROP
    vFrom @ ASCIIZ>  HERE base64 write
    read 2DROP
    vPass @ ASCIIZ> 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: 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 %SVERSION%" 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
    S" --bounds1" write
    S" Content-Type: text/plain; charset=windows-1251" write
    S" Content-Transfer-Encoding: quoted-printable" write
    WriteCRLF
    OVER + SWAP
    ?DO
       S" =" Write
       I C@  N>H Write
    LOOP
    WriteCRLF
    ELSE 2DROP THEN
    ;

    M: eData
    S" --bounds1--" write
    \ vErr @ IF
    WriteCRLF S" ." write WriteCRLF
    \  THEN
    ;

    M: Data
    sData eData
    ;

    M: Data&Attach
    sData
    2DUP
    ONLYNAME
    vName ZPLACE
    2DUP FILE-EXIST
    IF
    FILE

    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
    WriteCRLF


          OVER + SWAP
          ?DO
             I 76
                      HERE base64 write
             76
          +LOOP
    ELSE 2DROP THEN

    eData
    ;

    M: _writeOneAttach
    2DUP
    ONLYNAME
    vName ZPLACE
    2DUP EXIST?
    IF
    FILE
    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
    WriteCRLF

    DUP ROT ROT
          OVER + SWAP
          ?DO
             DUP 76 > IF I 76  HERE base64 write ELSE I SWAP HERE base64 write LEAVE THEN
             76 -
             76
          +LOOP
    ELSE 2DROP THEN
    ;

    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 -- }
    SMTP NEW TO p
    WITH SMTP
       p => Addr!
       p => Create
       S>ZALLOC p => vPass !
       S>ZALLOC p => vFrom !
            S>ZALLOC p => vTo !
            S>ZALLOC p => vSubj !
            p => Connect
            p => read 2DROP
            p => vPass @ ASCIIZ> NIP
            IF
                p => Ehlo
                p => Auth AND
             ELSE
                p => Hello
             THEN
            IF

            p => Mail
            p => Rcpt
            OR
            IF p =>  writeAttach ELSE 2DROP 2DROP THEN
            ELSE
                2DROP
            THEN
            \ p => vErr @ CR ." Err=" .
            p => Logout
            p => Close
        p => Delete
    ENDWITH
    ;

Пример:
Code: Select all
    #( tst-smtp
    NoActive
    Action:
    High-priority
    Confirm-Reading
    Confirm-Sending
    S" c:\setup.log" ADD-ATTACH
    S" c:\config.sys" ADD-ATTACH
    S" c:\mdr.iss" ADD-ATTACH
    S" c:\Program Files\nncron\plugins\smtp_cron.f" ADD-ATTACH
    S" Отправлено при помощи плагина"
    S" smtp plugin"
    S" xxxx@mail.ru"
    S" xxxx@nm.ru"
    S" pass"
    S" mail.pochta.ru" 0
    SMTP-SEND&ATTACH
    )#
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby AlikasS » Wed, 26 Nov 2008, 17:03

Ilya wrote:По просьбам трудящихся - Вынос порта наружу! :lol:
Code: Select all
....

чет не сработал вариант,
завел переменную для порта VALUE X-Port
все стало работать
Code: Select all
\ smtp_nncron.f (адаптация под nnCron)
\ "Частичная" реализация протокола SMTP с возможностью аттача файлов
\
\ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список
\
\ приоритеты письма
\ High-priority - высокий приоритет
\ Norm-priority - нормальный приоритет
\ Low-priority - низкий приоритет
\
\ подтверждения доставки и прочтения
\ Confirm-Reading - запрос подтверждения прочтения
\ Non-Confirm-Reading - нет запроса подтверждения прочтения (по умолчанию)
\
\ Confirm-Sending - запрос подтверждения доставки
\ Non-Confirm-Sending - нет запроса подтверждения доставки (по умолчанию)
\
\ адрес для обратного ответа установлен = адресу отправителя
\
\ установлен идентификатор почтовой программы
\
\ возможность смены порта для smtp сервера (для отличного от порта 25)
\ например
\ 24 TO X-Port
\
\ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr4 n4 adr5 n5 -- ) - собственно сама отправка
\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - от кого
\ adr3 n3   - кому
\ adr4 n4   - пароль. Если пароль задать пустой строкой S" ", то аутентификация производится не будет (например для mail.ru)
\ adr5 n5   - адрес SMTP сервера
\

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 ;

25 VALUE X-Port

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

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

: ?free ?DUP IF FREE THROW THEN ;

CREATE vName 255 ALLOT

CLASS: SMTP <SUPER POP3
    var vFrom
    var vTo
    var vSubj
    var vData
    var vAttach
    \ 128 chars vName

CONSTR: init init X-Port vPort ! ;
DESTR: free
        vFrom @ ?free
        vTo @ ?free
        vSubj @ ?free

Norm-priority
Non-Confirm-Reading
Non-Confirm-Sending

        \ vData @ ?free
        free
;


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
S" AUTH LOGIN" write
read 2DROP
vFrom @ ASCIIZ>  HERE base64 write
read 2DROP
vPass @ ASCIIZ> 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: 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 %SVERSION%" 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
S" --bounds1" write
S" Content-Type: text/plain; charset=windows-1251" write
S" Content-Transfer-Encoding: quoted-printable" write
WriteCRLF
OVER + SWAP
?DO
   S" =" Write
   I C@  N>H Write
LOOP
WriteCRLF
ELSE 2DROP THEN
;

M: eData
S" --bounds1--" write
\ vErr @ IF
WriteCRLF S" ." write WriteCRLF
\  THEN
;

M: Data
sData eData
;

M: Data&Attach
sData
2DUP
ONLYNAME
vName ZPLACE
2DUP FILE-EXIST
IF
FILE

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
WriteCRLF


      OVER + SWAP
      ?DO
         I 76
                  HERE base64 write
         76
      +LOOP
ELSE 2DROP THEN

eData
;

M: _writeOneAttach
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
FILE
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
WriteCRLF

DUP ROT ROT
      OVER + SWAP
      ?DO
         DUP 76 > IF I 76  HERE base64 write ELSE I SWAP HERE base64 write LEAVE THEN
         76 -
         76
      +LOOP
ELSE 2DROP THEN
;

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 -- }
SMTP NEW TO p
WITH SMTP
   p => Addr!
   p => Create
   S>ZALLOC p => vPass !
   S>ZALLOC p => vFrom !
        S>ZALLOC p => vTo !
        S>ZALLOC p => vSubj !
        p => Connect
        p => read 2DROP
        p => vPass @ ASCIIZ> NIP
        IF
            p => Ehlo
            p => Auth AND
         ELSE
            p => Hello
         THEN
        IF

        p => Mail
        p => Rcpt
        OR
        IF p =>  writeAttach ELSE 2DROP 2DROP THEN
        ELSE
            2DROP
        THEN
        \ p => vErr @ CR ." Err=" .
        p => Logout
        p => Close
    p => Delete
ENDWITH
;
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby Ilya » Wed, 26 Nov 2008, 19:06

AlikasS wrote:
Ilya wrote:По просьбам трудящихся - Вынос порта наружу! :lol:
чет не сработал вариант,

Виноват. :oops:
Поправил, проверил! :D
Code: Select all
\ smtp_nncron.f (адаптация под nnCron)
\ "Частичная" реализация протокола SMTP с возможностью аттача файлов
\
\ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список
\
\ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr4 n4 adr5 n5 -- ) - собственно сама отправка
\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - от кого
\ adr3 n3   - кому
\ adr4 n4   - пароль
\ adr5 n5   - адрес SMTP сервера
\ n6        - порт

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

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

: ?free ?DUP IF FREE THROW THEN ;

CREATE vName 255 ALLOT

CLASS: SMTP <SUPER POP3
    var vFrom
    var vTo
    var vSubj
    var vData
    var vAttach
    \ 128 chars vName


DESTR: free
        vFrom @ ?free
        vTo @ ?free
        vSubj @ ?free

        \ vData @ ?free
        free
;

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
S" AUTH LOGIN" write
read 2DROP
vFrom @ ASCIIZ>  HERE base64 write
read 2DROP
vPass @ ASCIIZ> 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: sData ( adr n -- )   \ Начало передачи
S" DATA" write
smtpOK?

IF
 <# vFrom @ ASCIIZ> HOLDS S" From: " 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
S" --bounds1" write
S" Content-Type: text/plain; charset=windows-1251" write
S" Content-Transfer-Encoding: quoted-printable" write
WriteCRLF
OVER + SWAP
?DO
   S" =" Write
   I C@  N>H Write
LOOP
WriteCRLF
ELSE 2DROP THEN
;

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

M: Data
sData eData
;

M: Data&Attach
sData
2DUP
ONLYNAME
vName ZPLACE
2DUP FILE-EXIST
IF
FILE

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
WriteCRLF


      OVER + SWAP
      ?DO
         I 76
                  HERE base64 write
         76
      +LOOP
ELSE 2DROP THEN

eData
;

M: _writeOneAttach
2DUP
ONLYNAME
vName ZPLACE
2DUP EXIST?
IF
FILE
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
WriteCRLF

DUP ROT ROT
      OVER + SWAP
      ?DO
         DUP 76 > IF I 76  HERE base64 write ELSE I SWAP HERE base64 write LEAVE THEN
         76 -
         76
      +LOOP
ELSE 2DROP THEN
;

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 -- }
SMTP NEW TO p
WITH SMTP
    p => vPort !
      p => Addr!
   p => Create
    S>ZALLOC p => vPass !
   S>ZALLOC p => vFrom !
        S>ZALLOC p => vTo !
        S>ZALLOC p => vSubj !
        p => Connect
        p => read 2DROP
        p => vPass @ ASCIIZ> NIP
        IF
            p => Ehlo
            p => Auth AND
         ELSE
            p => Hello
         THEN
        IF

        p => Mail
        p => Rcpt
        OR
        IF p =>  writeAttach ELSE 2DROP 2DROP THEN
        ELSE
            2DROP
        THEN
        p => Logout
        p => Close
    p => Delete

ENDWITH
;
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re:

Postby kasik » Thu, 27 Nov 2008, 16:40

Игорь wrote:Можно и без сторонних утилит. В папке system32 есть чудная cdosys.dll

Code: Select all
#( test_cdo_mail
NoActive
Action:
 <VBScript>
 Dim omail
 On Error Resume Next
 Set omail = CreateObject("CDO.Message")
     omail.From = "Vasya Pupkin <pupkin@mail.ru>"
     omail.To = "Vasya Nepupkin <nepupkin@mail.ru>"
     omail.Subject = "Test cdo-mail with nnbackup.log"
     omail.Textbody = "It's first line of test mail" & vbCrLf &_
                      "It's second line of test mail" & vbCrLf &_
                      "-- " & vbCrLf & "WBR, your nnCron" & vbCrLf & Now
     omail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
     omail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "mail.yourprovider.ru"
     omail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     omail.Configuration.Fields.Update
     omail.AddAttachment "C:\Progra~1\nnBackup\log\nnbackup.log"
     omail.Send
 if Err<>0 Then Err.Clear
 Set omail = Nothing
 Wscript.Quit
 </SCRIPT>
)#

Вместо pupkin@mail.ru и nepupkin@mail.ru соответственно адреса от кого и кому, вместо mail.youprovider.ru - smtp своего провайдера

У меня данный код не работает. Пишет ошибка стека...
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby kasik » Thu, 27 Nov 2008, 19:40

а данный плагин с html работает?
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby Ilya » Thu, 27 Nov 2008, 22:55

kasik wrote:а данный плагин с html работает?

Если ты имеешь html в самом теле письма, то замени в плагине "plain" на "html"
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby AlikasS » Fri, 28 Nov 2008, 02:40

Ilya wrote:Поправил, проверил! :D
Code: Select all
\ smtp_nncron.f (адаптация под nnCron)
\ "Частичная" реализация протокола SMTP с возможностью аттача файлов
\
\ ADD-ATTACH ( adr n -- ) - Добавить путь к файлу в список
\
\ SMTP-SEND&ATTACH ( adr n adr1 n1 adr2 n2 adr3 n3 adr4 n4 adr5 n5 -- ) - собственно сама отправка
\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - от кого
\ adr3 n3   - кому
\ adr4 n4   - пароль
\ adr5 n5   - адрес SMTP сервера
\ n6        - порт
....

Здесь немного напутал порядок :-D
Code: Select all
#( тест_отсылки
NoActive
Action:
\ Low-priority
\ Confirm-Reading
\ S" c:\Program Files\nncron\plugins\other\smtp_nncron.f" ADD-ATTACH
S" текст письма"
S" тема письма"
S" mail-to@mail.ru" \ кому !!!
S" mail-from@mail.ru" \ от кого !!!
S" pass" \ пароль
S" smtp.mail.ru" 25 \ адрес сервера и порт
SMTP-SEND&ATTACH
)#
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby kasik » Fri, 28 Nov 2008, 08:49

как изменить данный пример что бы использовать в теле письма несколько строк? я не оч силен в форте... :oops:
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest