1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Небольшая проблема с NodeJS

Тема в разделе "Техническая поддержка", создана пользователем Dmitron, 8 ноя 2020.

  1. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Не могу понять почему парсер отдает ошибку connection.app is not a function
    Я же прямо указал константу в виде connection

    Код:
        try {
            const connection = imaps.connect(config)
            connection.app(message.toString(), {mailbox: 'Draft'})
            connection.end()
        } catch(e) {
            results.status = e.message;
        }
    Что я могу делать не так?
     
  2. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    Скорей всего, connection - это метод какого-то модуля, возможно модуль не установлен, возможно неправильно подключен

    Надо на весь код смотреть
     
  3. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Код:
    const imaps = require('imap-simple');
    
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '0.1.40',
                results: {
                    flat: [
                        ['name', 'name'],
                    ]
                },
                results_format: '$status\\n',
                parsecodes: {
                    200: 1,
                },
                max_size: 200 * 1024,
            };
        }
    
        *parse(set, results) {
           
            this.logger.put("Starting...");
           
            const config = {
                imap: {
                user: "[email protected]",
                password: "password",
                host: "imap.mail.ru",
                port: 993,
                tls: true,
                authTimeout: 30000,
                tlsOptions: { rejectUnauthorized: false },
                    keepalive: false
                }
            };
           
            const message = `Content-Type: text/html; charset=UTF-8
    Mime-Version: 1.0
    To: <[email protected]>
    From: "Test" <[email protected]>
    Subject: test subject
    
    test body
    `;
    const connection = imaps.connect(config)
    
        try {
            connection.append(message.toString(), {mailbox: 'Inbox'})
            connection.end()
        } catch(e) {
            results.status = e.message;
        }
           
     
            results.success = 1;
    
            return results;
        }
    }
     
  4. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    Надо проверять правильность конфига и есть ли у mail.ru поддержка imap сервера и т.д
    у меня, с Вашими настройками вот такая ошибка

    [​IMG]
     
  5. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Конечно есть поддержка imap ))
    Ну так вставьте валидную почту mail.ru и всё будет отображаться без вашей ошибки.
     
  6. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
  7. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    [​IMG]
    вот с почтой и паролем которые Yandex::register регистрирует
    можете написать в чат с саппортом, проверю на Вашей валидной почте

    это проблема не с а-парсером, а с настройками модуля imap-simple-with-socks
    т.к в начале передается конфиг, а потом возвращается connection
    при ошибке в config, метод модуля не доступный
     
  8. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    Код:
    const imaps = require('imap-simple');
    let connection;
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '0.1.45',
                results: {
                    flat: [
                        ['name', 'name'],
                    ]
                },
                results_format: '$status\\n',
                parsecodes: {
                    200: 1,
                },
                max_size: 200 * 1024,
            };
        }
        async init() {
            const config = {
                imap: {
                    user: "",
                    password: "",
                    host: "imap.mail.ru",
                    port: 993,
                    tls: true,
                    authTimeout: 30000,
                    tlsOptions: { rejectUnauthorized: false },
                    keepalive: false
                }
            };
    
            connection = await imaps.connect(config);
    
        }
    
        async destroy() {
            if (connection)
                await connection.end()
        }
    
        async  *parse(set, results) {
    
            this.logger.put("Starting...");
    
    
            const message = `Content-Type: text/html; charset=UTF-8
            Mime-Version: 1.0
            To: <[email protected]>
            From: "Test" <[email protected]>
            Subject: test subject
    
            test body
            `;
            try {
    
                await connection.append(message.toString(), { mailbox: 'Inbox' })
                results.success = 1;
    
            } catch (e) {
              
                this.logger.put(e.message)
                results.success = 0;
    
            }
    
            return results;
        }
    }
    Добавил код для примера
    т.к connection возвращает promise, для удобства работы с ним, лучше использовать async/await
    + инициализацию connect лучше делать в методе init() т.к он выполняется при старте задания

    в методе destroy() можно закрыть соединение, он выполняется по завершению задания - этот метод доступен с версии 1.2.890
     
    #8 Support Artur, 8 ноя 2020
    Последнее редактирование: 8 ноя 2020
    Support и Dmitron нравится это.
  9. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Спасибо.
    Но почему ошибка не выводится в логе, а всплывает в апарсере?
     

    Вложения:

    • cda969b285.jpg
      cda969b285.jpg
      Размер файла:
      175,3 КБ
      Просмотров:
      4
  10. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    потому что она всплывает в методе init() на старте задания, а дальше задание не запускается
     
    #10 Support Artur, 8 ноя 2020
    Последнее редактирование: 8 ноя 2020
  11. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Мне нужно отлавливать ошибку при соединении, иначе все труды напрасны.
    Без try catch я и так знаю как сделать.
     
  12. Support Artur

    Support Artur A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    6 апр 2020
    Сообщения:
    172
    Симпатии:
    49
    Вот Ваша ошибка
    [​IMG]
     
  13. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Я знаю :)
    Мне нужно её вывести в лог апарсера и обработать в коде
     
  14. Dmitron

    Dmitron A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 май 2017
    Сообщения:
    143
    Симпатии:
    7
    Разобрался сам.
    Спасибо.
     

Поделиться этой страницей