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

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

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

Postby Wyz » Wed, 29 Jul 2009, 00:12

Файлы корежатся при длине больше 76 байт (смотри ASCII_after), так как кодируемые _порции_ не кратны 3. 1-2 байтовые хвосты кодируются с дополнением до 4 байт: S" 1" HERE base64 TYPE CR S" 12" HERE base64 TYPE CR S" 123" HERE base64 TYPE CR S" 1231" HERE base64 TYPE CR S" 12312" HERE base64 TYPE CR S" 123123" HERE base64 TYPE CR.

Заменил везде 76 на 57 (57/3*4=76 - длина закодированных строк в других аттачах) - архивы ~7.5 мег и ~100 кил пришли нормально.
Wyz
 
Posts: 389
Joined: Tue, 11 Dec 2007, 01:42

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

Postby MAN » Wed, 29 Jul 2009, 10:05

Опубликуйте полный текст исправленного плагина, плиз.
Мы тоже хотим протестить :!:
User avatar
MAN
 
Posts: 145
Joined: Wed, 17 Jun 2009, 21:34

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

Postby Wyz » Wed, 29 Jul 2009, 10:13

Возьми последний плагин от автора и замени в нем все "76" на "57" (в шести местах).
Wyz
 
Posts: 389
Joined: Tue, 11 Dec 2007, 01:42

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

Postby Vitaly_st » Wed, 29 Jul 2009, 10:29

Wyz wrote:Возьми последний плагин от автора и замени в нем все "76" на "57" (в шести местах).


Для моего файла ничего не изменилось:

ушло 96485 байт, пришло 97119 байт, файл *.xlsx

Архив *.rar:

ушло 199704 байт, пришло 201018 байт.

Я вот думаю, не может ли это быть связано с тем, что пересылаемые файлы у меня именуются кириллицей и содержимое архивов - тоже в основном именуется исключительно кириллицей?
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby MAN » Wed, 29 Jul 2009, 10:50

Оп-ля, работает :supz:
Файло 50 kb пришло целенькое!
User avatar
MAN
 
Posts: 145
Joined: Wed, 17 Jun 2009, 21:34

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

Postby Vitaly_st » Wed, 29 Jul 2009, 11:02

MAN wrote:Оп-ля, работает :supz:
Файло 50 kb пришло целенькое!


Не знаю, что там у тебя сработало, я отправил igfxres.dll файл весом 180 224 байт, получил на входе 180 410 байт. К вопросу о моем предыдущем посте... кириллица тут не причем.
Last edited by Vitaly_st on Wed, 29 Jul 2009, 11:25, edited 1 time in total.
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby Wyz » Wed, 29 Jul 2009, 11:19

Перезапусти nnCron.
Если не помогло - слей с dump.ru мой архивчик, пошли себе файл ascii и залей на обменник пришедший файл.
Wyz
 
Posts: 389
Joined: Tue, 11 Dec 2007, 01:42

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

Postby Vitaly_st » Wed, 29 Jul 2009, 11:32

Wyz wrote:Перезапусти nnCron.
Если не помогло - слей с dump.ru мой архивчик, пошли себе файл ascii и залей на обменник пришедший файл.


Отлично! Заработало!!! :D :D :D Спасибо! :D Достаточно было перегрузить nnCron!

Есть теперь следующий вопрос: можно ли подцепить в параметр получателя файл со списком получателей? И если да, то как? :)
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby AlikasS » Wed, 29 Jul 2009, 15:44

немного исправленный плагин, Илье на согласование
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 - нет запроса подтверждения доставки (по умолчанию)

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

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

\ опционально, использование "условно-зашифрованного" логина в 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 - зер гуд, иначе код ошибки

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
    255 chars vBuf


DESTR: free
   vLogin @ ?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
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: 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
WriteCRLF S" ." write WriteCRLF
;

M: Data
sData eData
;

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

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


M: Data&Attach
sData
2DUP
ONLYNAME
vName ZPLACE
2DUP FILE-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
WriteCRLF


      OVER + SWAP
      ?DO
         I 57 ( 76 )
DUP 2* ALLOCATE THROW >R R@ base64 R> FREE DROP
\                  vBuf base64 write
\                  HERE base64 write
         57 ( 76 )
      +LOOP
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
WriteCRLF

DUP ROT ROT
      OVER + SWAP
      ?DO
DUP 57 ( 76 ) > IF I 57 ( 76 )  DUP 2* ALLOCATE THROW >R R@ base64 R> FREE DROP write ELSE I SWAP DUP 2* ALLOCATE THROW >R R@ base64 R> FREE DROP write LEAVE THEN
\         DUP 76 > IF I 76  vBuf base64 write ELSE I SWAP vBuf base64 write LEAVE THEN
\         DUP 76 > IF I 76  HERE base64 write ELSE I SWAP HERE base64 write LEAVE THEN
         57 ( 76 ) -
         57 ( 76 )
      +LOOP
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 -- }
SMTP NEW TO p
WITH SMTP
    p => vPort !
      p => Addr!
   p => Create
    S>ZALLOC p => vPass !
    S>ZALLOC p => vLogin !
   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
;

\EOF

\ 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" 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
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby Vitaly_st » Wed, 29 Jul 2009, 15:57

\ 1.пример без шифрованного логина и пароля
S" pupkin-re" \ логин
S" pass" \ пароль

\ 2.пример с шифрованным логином и паролем
SECLOGINON
SECPASSON
S" pupkin@mailo.com" \ mail от кого
S" hMa1f7qzQcOq" \ логин
S" hLK4h1==" \ пароль

А как этим пользоваться?
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby AlikasS » Wed, 29 Jul 2009, 16:01

SECLOGINON
использование "условно-зашифрованного" логина в adr3-1 n3-1
для получения которого -> nncron.exe -ep <ваш_логин>

SECPASSON
использование "условно-зашифрованного" пароля в adr4 n4
для получения которого -> nncron.exe -ep <ваш_пароль>
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby Vitaly_st » Wed, 29 Jul 2009, 16:25

AlikasS wrote:SECLOGINON
использование "условно-зашифрованного" логина в adr3-1 n3-1
для получения которого -> nncron.exe -ep <ваш_логин>

SECPASSON
использование "условно-зашифрованного" пароля в adr4 n4
для получения которого -> nncron.exe -ep <ваш_пароль>


Где мне прописать логин и пароль для его дальнейшего использования в задаче? или эти параметры явно задаются в самой задаче??
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby AlikasS » Wed, 29 Jul 2009, 16:35

Code: Select all
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


S" hMa1f7qzQcOq" \ логин
получен запуском
nncron.exe -ep pupkin-re

S" hLK4h1==" \ пароль
получен запуском
nncron.exe -ep pass
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

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

Postby Vitaly_st » Wed, 29 Jul 2009, 16:51

AlikasS wrote:
Code: Select all
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


S" hMa1f7qzQcOq" \ логин
получен запуском
nncron.exe -ep pupkin-re

S" hLK4h1==" \ пароль
получен запуском
nncron.exe -ep pass


Спасибо! Все ясно! :)
Vitaly_st
 
Posts: 24
Joined: Fri, 17 Jul 2009, 10:54

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

Postby AlikasS » Wed, 29 Jul 2009, 17:36

Vitaly_st wrote:Есть теперь следующий вопрос: можно ли подцепить в параметр получателя файл со списком получателей? И если да, то как? :)

попробуй
Code: Select all
S" re@re.re, re2@re2.com" \ mail кому
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Baidu [Spider], Bing [Bot] and 2 guests

cron