Получение почты через TLS

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

Re: Получение почты через TLS

Postby Morituruz » Mon, 22 Sep 2014, 16:48

Так или иначе, она платная, а я уже на бесплатном почти настрогал костылей.
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Получение почты через TLS

Postby AlikasS » Tue, 07 Oct 2014, 07:02

Morituruz wrote:Так или иначе, она платная, а я уже на бесплатном почти настрогал костылей.

что сделал? поделись решением
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Получение почты через TLS

Postby Morituruz » Tue, 07 Oct 2014, 08:54

Оказалось, что недавно в curl добавили функционал по работе с IMAP.
Проверка ящика (нужно изменить curl_path на свой):
Code: Select all
fVAR mail_error_file_counter
: TEMP_FOLDER
\ временная папка
S" TEMP" ENV 2DUP DUP 1 - /STRING S" \" COMPARE
IF
   \ на случай, если в системной переменной нет обратной черты:
   S" \" S+
THEN
;
: MyPrevTempFile
\ предыдущий временный файл во временной папке
TEMP_FOLDER PrevTempFile S+
;
: curl_path S" c:\curl\bin\" ;   \ слеш на конце!


: mailbox_check { ua uu pa pu sa su \ ce -- ? }
\ 16:10 17.09.2014
\ ua uu - username
\ pa pu - password
\ sa su - imap server
\ возвращает количество писем

0
curl_path S" curl.exe --silent --ssl --ssl-reqd --retry 4 --user " S+ QUOTE S+ ua uu S+ S" :" S+ pa pu S+ QUOTE S+
S"  --request " S+ QUOTE S+ S" SELECT INBOX" S+ QUOTE S+
S"  -o " S+ QUOTE S+ TEMP_FOLDER S+ TempFile S+ QUOTE S+
S"  --url imap://" S+ sa su S+ S" /" S+
StartAppWait DROP
ExitCodeProc ?DUP
IF
   TO ce
   mail_error_file_counter S>NUM 1 + DUP N>S TO mail_error_file_counter   \ на стеке осталось числовое значение
   2 >
   IF
      ce curl_error_text ua uu S" : " S+ 2SWAP S+ 2DUP CR TYPE CR MsgBox
      0 EXIT
   THEN
ELSE
   S" 0" TO mail_error_file_counter
THEN
S" 0"   \ для дропа в RE-ALL
MyPrevTempFile FILE
S" /(\d+)\s+exists/i
RE-ALL
   2DROP $1
;RE-ALL
S>NUM
MyPrevTempFile FDELETE
;

User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Получение почты через TLS

Postby Morituruz » Tue, 07 Oct 2014, 09:11

Скачивание писем:
Code: Select all
: curl_error_text { exit_code -- error_text }
\ 16:20 19.09.2014
S" Текст ошибки не найден."
curl_path ONLYDIR ONLYDIR S" \Manual\curl.html" S+ FILE
S" />" exit_code N>S S+ S" <\/span>\s*<[^>]+>([^\r\n]+)/i" S+
RE-ALL
   2DROP $1
   EXIT
;RE-ALL
S"  (" S+ exit_code N>S S+ S" )" S+
;


VARIABLE mail_error_counter
VARIABLE mail_dl_counter
fVAR mail_counter

: mailbox_download { ua uu pa pu sa su da du fa fu -- }
\ 16:50 19.09.2014
\ ua uu - user
\ pa pu - password
\ sa su - imap server
\ da du - server «deleted» folder name
\ fa fu - folder to save messages
\ заполняет счётчик скачанных и ошибок: mail_dl_counter и mail_error_counter

\ сначала получаем количество писем в инбоксе:
ua uu pa pu sa su mailbox_check
?DUP NOT
IF
    EXIT
THEN
0 DO
   \ получение почты:
   0 curl_path S" curl.exe" S+
   S"  --silent --next --ssl --ssl-reqd --retry 4 --user " S+ QUOTE S+ ua uu S+ S" :" S+ pa pu S+ QUOTE S+
   S"  -o " S+ QUOTE S+ fa fu S+
   \ имя файла:
   mail_counter S+ \ S" _" S+ TempFile S+
   QUOTE S+
   S"  --url imap://" S+ sa su S+ S" /inbox/;UID=1" S+
   StartAppWait DROP
   ExitCodeProc ?DUP
   IF
      curl_error_text ua uu S" : " S+ 2SWAP S+ 2DUP CR TYPE CR CRON-LOG
      mail_error_counter 1+!
   ELSE
      \ увеличиваем счётчик:
      mail_counter S>NUM 1 + N>S TO mail_counter
      mail_dl_counter 1+!
      \ перемещаем в удалённые (yandex: &BCMENAQwBDsENQQ9BD0ESwQ1-):
      0 curl_path S" curl.exe" S+
      S"  --silent --next --ssl --ssl-reqd --retry 2 --user " S+ QUOTE S+ ua uu S+ S" :" S+ pa pu S+ QUOTE S+
      S"  --request " S+ QUOTE S+ S" MOVE 1 " S+ da du S+ QUOTE S+
      S"  --url imap://" S+ sa su S+ S" /inbox/" S+
      StartAppWait DROP
      ExitCodeProc ?DUP
      IF
         curl_error_text ua uu S" : " S+ 2SWAP S+ 2DUP CR TYPE CR CRON-LOG
         mail_error_counter 1+!
      THEN
   THEN
LOOP
;

Комментарии:
1. В Яндекс-почте папка с удалёнными файлами называется «&BCMENAQwBDsENQQ9BD0ESwQ1-»;
2. С помощью опции --next можно составить длинный паровозик для скачивания и перемещения писем в рамках одного вызова curl.exe, но это менее надёжно (если запрос на скачивание письма завершится неудачно, а последующий на перемещение в удалённые удачно, то получится, что мы удалили нескачанное письмо)
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Previous

Return to nnCron forum (Russian)

Who is online

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