Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.FIDONET.DIGEST
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.FIDONET.DIGEST с датами от 15 Jul 13 08:53:56 до 13 May 24 19:02:12, всего сообщений: 2398
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 1044 из 2398 ================================ RU.FIDONET.DIGEST =
От   : Vladimir Fyodorov                2:50/15            28 Jan 18 19:29:50
Кому : All                                                 28 Jan 18 19:29:50
Тема : RU.JNODE: Уведомления в Телеграм и отлов багов в JNODE
FGHI : area://RU.FIDONET.DIGEST?msgid=2:50/15+5a6dfa80
= Кодировка сообщения определена как: CP866 ==================================
==============================================================================

> Henri Laan написал для JNODE (нодовый мейлер-тоссер на JAVA) скрипт на
> PHP, который оповещает в Телеграм о новой почте. А также сообщил о
> найденном баге и предложил решение.

=============================================================================
* Area : RU.JNODE
* From : Vladimir Fyodorov, 2:50/15 (28 Января 2018 09:07)
* Subj : Уведомления в Телеграм
=============================================================================
Разнообразно приветствую тебя, All!

Может, кому-то интересно. Ну и в целях автокриэйта.

=============================================================================
* Area : HOBBIT.LOCAL
* From : Henri Laan, 2:46/49.1 (27 Января 2018 18:21)
* To   : Vladimir Fyodorov
* Subj : Re: ХОЧУ ОДУ. СОФТ АСТРОЕ. Е ЧАЙИК.
=============================================================================
[...]

HL>> Ну и тот же скрипт на пыхе озадачил сообщать о новой почте в телеграм.
VF> Можно про это поподробней. Глядишь, ещё кому-нибудь пригодится.

 Да не вопрос. Но скрипт простой, как три копейки:

 1. Делаем дополнительное поле:
 ALTER TABLE netmail ADD trigger_check TINYINT(1) NOT NULL DEFAULT '0';

 2. Скрипт берет весь нетмейл с trigger_check = 0, проверяет на нужные совпадения. Если найдено, то вставляет дубль с новым адресом. Потом апдейтит проверенное на trigger_check = 1

 trigger_check - это потому что сначала триггер хотел использовать, потом пленился, а название осталось.

 Кстати, точно по такому же принципу можно свою собственную карбонку сделать, только сканировать не netmail, а echomail. Или echomailawait, тут от конкретной логики уже зависеть будет.

 <?php

    $sqlhost = "localhost";
    $sqluser = "jnodeUser";
    $sqlpass = "jnodePassword";
    $sqldb = "jnode";
    $mysqli = @new mysqli($sqlhost, $sqluser, $sqlpass, $sqldb);

    $query = "select id, from_name, to_name, from_address, to_address, subject, text, date, send, attr, last_modified from netmail WHERE trigger_check = 0 order by id asc";
    if ($result = $mysqli->query($query)) {
        while ($row = $result->fetch_assoc()) {
            $id = (int)$row['id'];
            $from_name = $row['from_name'];
            $to_name = $row['to_name'];
            $from_address = $row['from_address'];
            $to_address = $row['to_address'];
            $notModify_address = $to_address;
            $notModify_subject = $row['subject'];
            $subject = "RWT: ".$notModify_subject;
            $text = $row['text'];
            $date = (double)$row['date'];
            $attr = $row['attr'];
            $last_modified = (double)$row['last_modified'];

            $route_via = 0;
            if ($to_address == '2:46/49.2') {
                $to_address = '2:46/49.1';
                $route_via = 1; // ID из таблицы links для 2:46/49.1
            } else if ($to_address == '2:46/49.1' || $to_address == '2:46/49') {
                $to_address = '2:46/49.2';
                $route_via = 4; //  ID из таблицы links для 2:46/49.2
            }
            if ($to_name == 'AreaFix') { $route_via = 0; }
            if ($from_name == 'AreaFix' || $from_name == 'Parma Tosser') { $route_via = 0; }
            if ($route_via > 0) {
                $stmt = $mysqli->prepare("INSERT INTO netmail (from_name, to_name, from_address, to_address, subject, text, date, route_via, send, attr, last_modified, trigger_check) values (?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, 1)");
                $stmt->bind_param('ssssssdiid', $from_name, $to_name, $from_address, $to_address, $subject, $text, $date, $route_via, $attr, $last_modified);
                $stmt->execute();
                $stmt->close();
                // ==============  TO TELEGRAM
                    $telegram_text = "<b>From:</b> $from_name, $from_address\r\n";
                    $telegram_text .= "<b>To:</b> $to_name, $notModify_address\r\n";
                    $telegram_text .= "<b>Subj:</b> $notModify_subject\r\n";

                    $telegram_data = array();
                    $telegram_data['chat_id'] = "11111111"; // Тут свой ID в telegram
                    $telegram_data['parse_mode'] = 'html';
                    $telegram_data['text'] = $telegram_text;

                    $telegram_data_string = json_encode($telegram_data);

                    $telegram_curl = curl_init('https://api.telegram.org/bot111111111:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx/sendMessage'); // это параметры, полученные у BotFather
                    curl_setopt($telegram_curl, CURLOPT_CUSTOMREQUEST, "POST");
                    curl_setopt($telegram_curl, CURLOPT_POSTFIELDS, $telegram_data_string);
                    curl_setopt($telegram_curl, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($telegram_curl, CURLOPT_HTTPHEADER, array(
                        'Content-Type: application/json')
                    );
                    $telegram_result = curl_exec($telegram_curl);
                    curl_close($telegram_curl);
                // ==============  TO TELEGRAM
            }
            $stmt = $mysqli->prepare("UPDATE netmail SET trigger_check = 1 WHERE id = ?");
            $stmt->bind_param('i', $id);
            $stmt->execute();
            $stmt->close();
        }
    }


[...]

Best regards, Henri Laan.
=============================================================================


=============================================================================
* Area : RU.JNODE
* From : Henri Laan, 2:46/49.1 (28 Января 2018 17:27)
* Subj : MySQL - ошибка в INSERT
=============================================================================
Отловил тут ошибку:

======================
28-01-18 00:19:46 [00000033] Echomail             SQL Exception in save: java.sql.SQLException: Unable to run insert stmt on object Echomail

......

    at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
    at com.j256.ormlite.stmt.mapped.MappedCreate.insert(MappedCreate.java:135)
    at com.j256.ormlite.stmt.StatementExecutor.create(StatementExecutor.java:450)
    at com.j256.ormlite.dao.BaseDaoImpl.create(BaseDaoImpl.java:310)
    at jnode.dao.GenericDAO.save(GenericDAO.java:335)
    at jnode.ftn.tosser.FtnTosser.tossEchomail(FtnTosser.java:177)
    at jnode.ftn.tosser.FtnTosser.tossInboundDirectory(FtnTosser.java:282)
    at jnode.main.threads.TosserQueue.toss(TosserQueue.java:49)
    at jnode.ftn.tosser.FtnTosser.tossIncoming(FtnTosser.java:209)
    at jnode.protocol.binkp.BinkpProtocolTools.forwardToTossing(BinkpProtocolTools.jav a:166)
    at jnode.protocol.binkp.connector.BinkpAbstractConnector.proccessFrame(BinkpAbstra ctConnector.java:254)
    at jnode.protocol.binkp.connector.BinkpAsyncConnector.run(BinkpAsyncConnector.java :158)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'message' at row 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4235)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2441)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2366)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2350)
    at com.j256.ormlite.jdbc.JdbcDatabaseConnection.insert(JdbcDatabaseConnection.java :170)
    at com.j256.ormlite.stmt.mapped.MappedCreate.insert(MappedCreate.java:91)
    ... 13 more
======================

Поле message в таблице echomail по-умолчанию создается с типом text.
При вставке некоторых сообщений этого явно не хватает.
Конкретно здесь идет вставка 71426 символов, при ограничении в 65535.

Т.е. такое решение может помочь:
ALTER TABLE echomail MODIFY message MEDIUMTEXT;
ну или LONGTEXT, не знаю, как лучше.

При этом, в таблице netmail поле text по-умолчанию идет с типом MEDIUMTEXT


Best regards, Henri Laan.
=============================================================================



--- GoldED+/W64-MSVC 1.1.5-b20170303
* Origin: Esquire Station (2:50/15)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.026089 секунды