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

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

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

Postby Ilya » Thu, 23 Apr 2009, 00:36

logoff wrote:Пытаюсь отправлять файл через ADD-ATTACH, от файла приходит только 1 kb....
используется адрес на yandex.ru

Странно! Сейчас пару раз проверил - все ок!
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby kasik » Thu, 23 Apr 2009, 07:21

не от балды у меня просто версия плагинга без порта!
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby kasik » Thu, 23 Apr 2009, 08:14

а файлики небольшие...
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby Ilya » Thu, 23 Apr 2009, 09:49

kasik wrote:не от балды у меня просто версия плагинга без порта!

Если есть возможность, то попробуй проверить данную задачу через mail.ru, yandex.ru !
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby kasik » Thu, 23 Apr 2009, 10:32

возможности такой нет!
есть тока exchange в корпаративной сети!
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby Ilya » Fri, 24 Apr 2009, 09:39

kasik wrote:возможности такой нет!
есть тока exchange в корпаративной сети!

Поправил малёк плагин:
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 -- err ) - собственно сама отправка
\ adr n     - содержимое письма
\ adr1 n1   - тема письма
\ adr2 n2   - от кого
\ adr3 n3   - кому
\ adr4 n4   - пароль
\ adr5 n5   - адрес SMTP сервера
\ n6        - порт
\ err       - 0 - зер гуд, иначе код ошибки

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
    var vErr




DESTR: free
        vFrom @ ?free
        vTo @ ?free
        vSubj @ ?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 => vErr @
        p => Close
    p => Delete

ENDWITH
;

Теперь на выходе SMTP-SEND&ATTACH оставляет возможный код ошибки!!!
Проверь, может выскочит код ошибки!
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby kasik » Mon, 27 Apr 2009, 10:16

Как этот код снять?

Как вообще его использовать? пример пожалуйста
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby Ilya » Mon, 27 Apr 2009, 11:31

kasik wrote:Как этот код снять?

Как вообще его использовать? пример пожалуйста

Как и прежде! Только в данной версии на входе SMTP-SEND&ATTACH надо указать номер порта, а после его исполнения на стеке останется код ошибки или 0 при удачном выполнении отсылки.
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

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

Postby kasik » Mon, 27 Apr 2009, 13:13

Попробуйте мой плагин может он чем то отличается:
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

kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby kasik » Mon, 27 Apr 2009, 13:14

Code: Select all
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/html; 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/html;" 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: html/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
;

обе части надо рсоеденить!
kasik
 
Posts: 86
Joined: Fri, 14 Nov 2008, 10:29

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

Postby AlikasS » Mon, 27 Apr 2009, 14:33

AlikasS wrote:
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
)#

оно имеет место быть? чей порядок верный :-D
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby noob2k6 » Thu, 30 Apr 2009, 06:44

Только что проверил: всё работает как полагается при следующем порядке "кому" и "от кого":
Code: Select all
S" mail-to@mail.ru" \ кому !!!
S" mail-from@mail.ru" \ от кого !!!

(Если поменять порядок, то выдается ошибка 535.)

В общем, респект создателю плагина smtp_nncron.f - отличная вещь, однако! Надеюсь, плагин будет развиваться и дальше ;)
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

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

Postby MAN » Wed, 15 Jul 2009, 15:17

Отправляется, доходит, однако выходит сообщение <Ошибка стека в Action:>
задача по отправке выглядит так:
Code: Select all
#( ТЕСТ_ОТПРАВКИ_eMail
NoActive
Action:
\ Low-priority
\ Confirm-Reading
\ S" c:\Program Files\nncron\plugins\other\smtp_nncron.f" ADD-ATTACH
S" Вместо этих слов текст письма"
S" Вместо этих слов тема письма"
S" МылоПолучателя@rambler.ru" \ кому !!!
S" МылоОтправителя@rambler.ru" \ от кого !!!
S" ПарольМыльницыОтправителя" \ пароль
S" mail.rambler.ru" 25 \ адрес сервера и порт
SMTP-SEND&ATTACH
)#

Что, не так? Как избавиться от сообщения об ошибке?
User avatar
MAN
 
Posts: 145
Joined: Wed, 17 Jun 2009, 21:34

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

Postby Vitaly_st » Fri, 17 Jul 2009, 11:08

Помогите пожалуйста в реализации моей задачи...
Я создал smtp_nncron.f, привязал его в nncron.ini. Далее создал задачу.
Вопрос: где в задаче указывать путь к файлу, который я хочу отправлять?
В данном варианте кода задачи у меня выскакивает ошибка "Внутренняя ошибка. Error# -1073741819

Собственно... вот так выглядит задача:
Code: Select all
AsLoggedUser
WatchWinDestroy: "**.xlsx*"
Action:
Low-priority
Confirm-Reading
S" c:\Program Files\nncron\plugins\smtp_nncron.f" ADD-ATTACH
S" текст письма"
S" тема письма"
S" ;;;;;@mail.ru" \ кому !!!
S" *****@mail.ru" \ от кого !!!
S" *****" \ пароль
S" smtp.mail.ru" 25 \ адрес сервера и порт
SMTP-SEND&ATTACH


Спасибо откликнувшимся!
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby MAN » Fri, 17 Jul 2009, 11:50

Vitaly_st wrote: Помогите ...
Code: Select all
...
Confirm-Reading
S" c:\Program Files\nncron\plugins\smtp_nncron.f" ADD-ATTACH \ Это путь к файлу который желаешь прикрепить к письму
S" текст письма"
...


Примерно так.
В данном случае отсылается файл -> c:\Program Files\nncron\plugins\smtp_nncron.f
User avatar
MAN
 
Posts: 145
Joined: Wed, 17 Jun 2009, 21:34

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot] and 3 guests