• PyGate Has been released

    From Stephen Walsh@3:633/280 to Sean Rima on Wed Jan 28 22:54:48 2026
    Hello Sean,

    Instead of beating a old horse that is soupgate/spoon, how about trying something that has been recently written and
    released to the public.



    PyGate - Python FidoNet-NNTP Gateway, has been released to the public.

    PyGate is a Python-based gateway system that bridges FidoNet echomail and NNTP newsgroups, allowing seamless message
    exchange between the two networks.

    Version: 1.5.6
    Author: Stephen Walsh
    Contact: vk3heg@gmail.com | FidoNet 3:633/280 | FSXNet 21:1/195 | Amiganet 39:901/280
    Based on: SoupGate by Tom Torfs

    https://github.com/vk3heg/pygate


    Features
    Core Functionality

    Bidirectional Gateway: Messages flow seamlessly between FidoNet and NNTP
    Flexible Deployment Modes: Full gateway mode or client-only mode
    Area Mapping: Flexible mapping between FidoNet areas and NNTP newsgroups
    Message Hold System: Manual review and approval of messages
    Spam Filtering: Advanced regex-based filtering with built-in patterns
    Netmail Notifications: Automatic notifications for held messages
    Areafix Support: Dynamic area management via netmail with wildcard protection
    Character Set Handling: Proper encoding conversion per FTS standards

    Advanced Features

    Message Deduplication: Prevents duplicate messages
    Cross-posting Control: Configurable limits on cross-posted messages
    Timezone Support: Proper timezone handling (TZUTC)
    Message Threading: Preserves reply chains and references
    Administrative Panel: Admin panel interface for message review of held messages, filter management, newsrc
    management, newsgroups list viewing.

    Requirements

    Python 3.7 or higher
    NNTP server access
    FidoNet mailer (binkd recommended)
    Required Python packages:
    configparser
    pathlib
    logging
    datetime
    uuid
    json
    paramiko (for SSH/remote ctlinnd on Windows deployments)
    psutil (for automation script process management)


    Deployment Modes

    PyGate supports two deployment modes:
    Full Gateway Mode (Default)

    In this mode, PyGate manages both the NNTP connection and the server configuration:

    Updates local newsrc file when areas are added/removed
    Executes ctlinnd commands to create/remove newsgroups on NNTP server
    Requires server administrative privileges or SSH access
    Best for deployments where PyGate runs on or manages the news server

    [Gateway]
    client_mode = false # or omit this line (false is default)

    Client-Only Mode

    In this mode, PyGate operates as a standard NNTP client without server management:

    Updates local newsrc file when areas are added/removed
    Does NOT execute ctlinnd commands
    Assumes newsgroups already exist on the remote NNTP server
    Does not require server administrative privileges
    Best for connecting to external/remote news servers you don't control

    [Gateway]
    client_mode = true

    When to use client-only mode:

    Connecting to a remote news server you don't administer
    Using a commercial or third-party news provider
    Testing PyGate without affecting server configuration
    Security-restricted environments where ctlinnd access is unavailable

    Note: In client-only mode, areafix operations will still update your local newsrc file, but you must ensure the
    corresponding newsgroups exist on the NNTP
    server before subscribing to them.


    Message Hold System

    The hold system allows manual review of messages before they are gated, providing control over message flow. When
    areas are remapped to fidonet echomail
    areas. This is mainly to protect fidonet from usenet spam.

    Configuration

    Enable holding in pygate.cfg:

    [Arearemap]
    Hold = yes
    notify_sysop = yes

    How It Works

    Message Evaluation: Each message is checked against area mappings
    Hold Decision: Messages in mapped areas are held for review
    Notification: Netmail sent to sysop (once per hour maximum)
    Review Process: Admin reviews messages via admin panel
    Action: Messages are approved, rejected, or archived

    Notification System

    When messages are held:

    Netmail sent to sysop at linked_address
    Rate Limited: Maximum one notification per hour
    Comprehensive: Lists all areas with pending messages
    Tracking: State saved in hold/notifications.json





    Stephen



    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Sean Rima@2:263/1 to Stephen Walsh on Wed Jan 28 12:30:03 2026
    Hello Stephen!

    28 Jan 26 22:54, you wrote to me:

    Hello Sean,

    Instead of beating a old horse that is soupgate/spoon, how about
    trying something that has been recently written and released to the public.

    I have been a long time user of soupgate and prefer it.

    Sean


    ... TCOB1: binkd only binkd.rima.ie
    --- FMail-lnx 2.3.2.6-B20251227
    * Origin: TCOB1 A Mail Only System (2:263/1)
  • From Sean Rima@2:263/1 to Stephen Walsh on Wed Jan 28 12:47:07 2026
    Hello Stephen!

    28 Jan 26 22:54, you wrote to me:

    Hello Sean,

    Instead of beating a old horse that is soupgate/spoon, how about
    trying something that has been recently written and released to the public.



    PyGate - Python FidoNet-NNTP Gateway, has been released to the public.

    PyGate is a Python-based gateway system that bridges FidoNet echomail
    and NNTP newsgroups, allowing seamless message exchange between the
    two networks.

    In fairness I almost went down the python route. I will give PyGate a try :) Sean


    ... TCOB1: binkd only binkd.rima.ie
    --- FMail-lnx 2.3.2.6-B20251227
    * Origin: TCOB1 A Mail Only System (2:263/1)
  • From Stephen Walsh@3:633/280 to Sean Rima on Thu Jan 29 10:17:40 2026
    Hello Sean!

    28 Jan 26 12:30, you wrote to me:

    Instead of beating a old horse that is soupgate/spoon, how about
    trying something that has been recently written and released to
    the public.

    I have been a long time user of soupgate and prefer it.

    I got frustrated with it's quirks and the way things worked.

    PyGate was the result. It's actually gone further then what I initially planed.



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Stephen Walsh@3:633/280 to Sean Rima on Thu Jan 29 10:19:34 2026
    Hello Sean!

    28 Jan 26 12:47, you wrote to me:

    PyGate is a Python-based gateway system that bridges FidoNet
    echomail and NNTP newsgroups, allowing seamless message exchange
    between the two networks.

    In fairness I almost went down the python route. I will give PyGate a
    try :) Sean

    On my news server it runs every half an hour and the run time is 2-4 seconds to go through over 400 news groups.



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Stephen Walsh@3:633/280 to Sean Rima on Thu Jan 29 10:25:46 2026
    Hello Sean!

    28 Jan 26 12:47, you wrote to me:

    PyGate is a Python-based gateway system that bridges FidoNet
    echomail and NNTP newsgroups, allowing seamless message exchange
    between the two networks.

    In fairness I almost went down the python route. I will give PyGate a
    try :) Sean

    On my news server it runs every half an hour and the run time is 2-4 seconds to go through 443 news groups.
    Of course the more often it's run the less work that needs to happen. #-)

    Tommi has it setup, and provided feedback on couple of things, that got fixed/added.




    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Tommi Koivula@2:221/1 to Stephen Walsh on Thu Jan 29 13:29:54 2026
    Hi Stephen.

    29 Jan 26 10:25, you wrote to Sean Rima:

    On my news server it runs every half an hour and the run time is 2-4 seconds to
    go through 443 news groups. Of course the more often it's run the less work
    that needs to happen. #-)

    Tommi has it setup, and provided feedback on couple of things, that got fixed/added.

    Yep. :)

    I'm thinking about one feature of Soupgate. It will reject dupes, "own" fido messages coming back from usenet by checking "Organization" field. I have these lines in my soupgate config:

    Organization RBBSG
    OwnOrgAction move
    OwnOrgArea RBB.NEWS.OWN

    I know that PyGate will adjust the message count by one every time it sends a message to news server but it is possible "own" messages to come back other route.

    Maybe a filter would fix this. Like:

    ^X-Organization:.*RBBSG
    Organization:.*RBBSG
    ^From:.*fidonet.fi

    One more thing I like in PyGate is Areafix, and that it can command INN. :-)

    'Tommi

    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: nntps://news.fidonet.fi (2:221/1)
  • From Tommi Koivula@2:221/1 to Stephen Walsh on Thu Jan 29 14:09:00 2026
    Hi Stephen,

    I see these ERRORs when PyGate is trying to post to INN:

    29-Jan-26 00:30:01 - INFO - Processing packet: /bbs/pygate/inbound/697a8dc9.pkt 29-Jan-26 00:30:01 - INFO - Parsed 1 messages from /bbs/pygate/inbound/697a8dc9.pkt
    29-Jan-26 00:30:01 - INFO - Loaded 10 areas from config/newsrc
    29-Jan-26 00:30:01 - INFO - Connecting to NNTP server 192.168.10.2:119 29-Jan-26 00:30:01 - INFO - Posting message to fidotest: Re: Test
    29-Jan-26 00:30:01 - ERROR - Failed to post message: 441 Can't parse Message-ID header field body
    29-Jan-26 00:30:01 - INFO - Area FIDOTEST: 0 gated, 0 filtered, 1 failed 29-Jan-26 00:30:01 - INFO - Processing packet: /bbs/pygate/inbound/697a8d5d.pkt 29-Jan-26 00:30:01 - INFO - Parsed 1 messages from /bbs/pygate/inbound/697a8d5d.pkt
    29-Jan-26 00:30:01 - INFO - Loaded 10 areas from config/newsrc
    29-Jan-26 00:30:01 - INFO - Posting message to fidotest: Re: Test
    29-Jan-26 00:30:01 - ERROR - Failed to post message: 441 Can't parse Message-ID header field body
    29-Jan-26 00:30:01 - INFO - Area FIDOTEST: 0 gated, 0 filtered, 1 failed 29-Jan-26 00:30:01 - INFO - Import complete: 2 packets processed


    If I check the saved .PKT's there are Syncronet-style MSGID's:

    MSGID: 5036.fidonet_fidotest@1:135/205 2ddfd6b0
    MSGID: 2022.fidonet_fidotest@1:218/601 2ddfcb0d

    'Tommi

    ---
    * Origin: ------------------- (2:221/1)
  • From Richard Menedetter@2:310/31 to Stephen Walsh on Thu Jan 29 14:34:50 2026
    Hi Stephen!

    28 Jan 2026 22:54, from Stephen Walsh -> Sean Rima:

    Instead of beating a old horse that is soupgate/spoon, how about
    trying something that has been recently written and released to the public.

    Interesting

    PyGate - Python FidoNet-NNTP Gateway, has been released to the public.

    I wanted to play around with the mail capabilities.

    Stephen

    CU, Ricsi

    ... Engineering is the art of making what you want from things you can get.
    --- GoldED+/LNX
    * Origin: Advice is usually worth what it cost. (2:310/31)
  • From Sean Rima@2:263/1 to Stephen Walsh on Thu Jan 29 18:04:50 2026
    Hello Stephen!

    29 Jan 26 10:17, you wrote to me:


    Instead of beating a old horse that is soupgate/spoon, how about
    trying something that has been recently written and released to
    the public.

    I have been a long time user of soupgate and prefer it.

    I got frustrated with it's quirks and the way things worked.

    PyGate was the result. It's actually gone further then what I
    initially planed.

    Yeah well that is what we all do I guess. I am still considering a Python version of my own. I tried yours and it won't link to my nntp server, god knows why

    Sean


    ... TCOB1: binkd only binkd.rima.ie
    --- FMail-lnx 2.3.2.6-B20251227
    * Origin: TCOB1 A Mail Only System (2:263/1)
  • From Sean Rima@2:263/1 to Stephen Walsh on Thu Jan 29 18:06:00 2026
    Hello Stephen!

    29 Jan 26 10:19, you wrote to me:


    PyGate is a Python-based gateway system that bridges FidoNet
    echomail and NNTP newsgroups, allowing seamless message exchange
    between the two networks.

    In fairness I almost went down the python route. I will give
    PyGate a try :) Sean

    On my news server it runs every half an hour and the run time is 2-4 seconds to go through over 400 news groups.

    Python is very swift that way alright

    Sean


    ... TCOB1: binkd only binkd.rima.ie
    --- FMail-lnx 2.3.2.6-B20251227
    * Origin: TCOB1 A Mail Only System (2:263/1)
  • From Sean Rima@2:263/1 to Stephen Walsh on Thu Jan 29 18:07:03 2026
    Hello Stephen!

    29 Jan 26 10:25, you wrote to me:


    PyGate is a Python-based gateway system that bridges FidoNet
    echomail and NNTP newsgroups, allowing seamless message exchange
    between the two networks.

    In fairness I almost went down the python route. I will give
    PyGate a try :) Sean

    On my news server it runs every half an hour and the run time is 2-4 seconds to go through 443 news groups. Of course the more often it's
    run the less work that needs to happen. #-)

    Tommi has it setup, and provided feedback on couple of things, that
    got fixed/added.

    One of the additions I did to spoon was to add multiple nntp servers and newsrc files. Currently working with 3 different nntp servers for stuff I like

    Sean


    ... TCOB1: binkd only binkd.rima.ie
    --- FMail-lnx 2.3.2.6-B20251227
    * Origin: TCOB1 A Mail Only System (2:263/1)
  • From Stephen Walsh@3:633/280 to Tommi Koivula on Fri Jan 30 10:55:02 2026
    Hello Tommi!

    29 Jan 26 13:29, you wrote to me:

    I know that PyGate will adjust the message count by one every time it sends a message to news server but it is possible "own" messages to
    come back other route.

    INN should take care of that, but adding rules to the filter.cfg file will also work.

    Maybe a filter would fix this. Like:

    ^X-Organization:.*RBBSG
    Organization:.*RBBSG
    ^From:.*fidonet.fi

    These would be the one's I'd use to do that.

    ^Organization:(?i).rbbsg
    ^Injection-Info:(?i)news\.rbbsg\.net
    ^NNTP-Posting-Host:(?i)news\.rbbsg\.net


    One more thing I like in PyGate is Areafix, and that it can command
    INN. :-)

    Yeah. I initially started coding pygate as a areafix module for soupgate, then got annoyed at all the steps that the
    soupgate system took.. It was also prone to one step failing in my testing.

    So pygate morphed into what it is now, and the ability to run on the INN news server or remotely.



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Stephen Walsh@3:633/280 to Richard Menedetter on Fri Jan 30 11:26:38 2026
    Hello Richard!

    29 Jan 26 14:34, you wrote to me:

    PyGate - Python FidoNet-NNTP Gateway, has been released to the
    public.

    I wanted to play around with the mail capabilities.

    Pygate don't do email's and isn't something I'm wanting it to do.



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Stephen Walsh@3:633/280 to Sean Rima on Fri Jan 30 11:30:58 2026
    Hello Sean!

    29 Jan 26 18:04, you wrote to me:

    PyGate was the result. It's actually gone further then what I
    initially planed.

    Yeah well that is what we all do I guess. I am still considering a
    Python version of my own. I tried yours and it won't link to my nntp server, god knows why

    Send me the logfile and your config (Change any passwords to password).



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Stephen Walsh@3:633/280 to Tommi Koivula on Fri Jan 30 11:32:12 2026
    Hello Tommi!

    29 Jan 26 14:09, you wrote to me:

    29-Jan-26 00:30:01 - INFO - Processing packet:
    [...]
    failed 29-Jan-26 00:30:01 - INFO - Import complete: 2 packets
    processed

    If I check the saved .PKT's there are Syncronet-style MSGID's:

    MSGID: 5036.fidonet_fidotest@1:135/205 2ddfd6b0
    MSGID: 2022.fidonet_fidotest@1:218/601 2ddfcb0d

    I did add support for Syncronet-style MSGID's, can yo drop the packets into my system, and I'll have a look.
    zip them up as syncpkt.zip please.


    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)