From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 2F1AF1F55F; Thu, 14 Sep 2023 00:38:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1694651908; bh=1qImqI0SRRrvVCe2MJPpvX9zsemJYqoN8Noe/C/6DJA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YIWBlGcE8QPgDMQqAY9ZacGerAau4HbZJ3IMBMMO9cYVKbNnL4XZt47KfsNS50K0s WqzFlh5+dTfqh6re9nqCmaGJJInRERRx6yQ06ESHyRfZf0XgWA5U04vsVrFfvhcA7o PP9SYzLC21vsVWPmATR7WDsTMzRtOcGzwqsbyhOY= Date: Thu, 14 Sep 2023 00:38:28 +0000 From: Eric Wong To: Konstantin Ryabitsev Cc: meta@public-inbox.org Subject: Re: [RFC] pop3: support `?limit=$NUM' parameter in mailbox name Message-ID: <20230914003828.M101484@dcvr> References: <20230912-impart-swinger-4c2434@meerkat> <20230912224034.M689061@dcvr> <20230913-tarot-monogamy-2f614c@meerkat> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20230913-tarot-monogamy-2f614c@meerkat> List-Id: Konstantin Ryabitsev wrote: > On Tue, Sep 12, 2023 at 10:40:34PM +0000, Eric Wong wrote: > > Perhaps 50K is too much? I figured clients would have a way to > > limit that, but I don't really pay attention to POP3 clients... > > The few clients I looked at didn't give any option to specify how many remote > messages I want to retrieve, so I think defaulting to 50,000 is not the right > approach. Maybe the default limit should be something "last 7 days or 1000 > messages, whichever is larger"? OK, 1K (or any other fixed limit) is fine and easiest. 7 days (or any other time window) could get flooded if there's a nasty spike of some sort. > My initial target for deploying POP3 support is to allow Gmail users to > pull-subscribe to mailing lists, since Gmail is the #1 provider that we have > trouble with message delivery due to their draconian threshold limits. > However, I think if the default behaviour results in dumping 50,000 messages > into people's inboxes, they wouldn't use it, which is why I think we should > have a default that is lighter both on the server side and on the users. OK, I think this could work (goes on top of my previous limit patch): -----------8<----------- Subject: [PATCH] pop3: limit default mailbox to 1K messages This is probably friendlier to webmail providers which support importing mail from POP3. --- lib/PublicInbox/POP3.pm | 7 ++++--- lib/PublicInbox/WwwText.pm | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/POP3.pm b/lib/PublicInbox/POP3.pm index 4a21ef5e..f97eccfd 100644 --- a/lib/PublicInbox/POP3.pm +++ b/lib/PublicInbox/POP3.pm @@ -72,7 +72,7 @@ sub cmd_user ($$) { $user =~ tr/-//d; # most have dashes, some (dbus-uuidgen) don't $user =~ m!\A[a-f0-9]{32}\z!i or return \"-ERR user has no UUID\r\n"; - my $limit = UID_SLICE; + my $limit; $mailbox =~ s/\?limit=([0-9]+)\z// and $limit = $1 > UID_SLICE ? UID_SLICE : $1; @@ -86,10 +86,11 @@ sub cmd_user ($$) { my $tip = "$mailbox.$max"; return \"-ERR $mailbox.$slice does not exist ($tip does)\r\n" if $slice > $max; + $limit //= UID_SLICE; $self->{uid_base} = ($slice * UID_SLICE) + UID_SLICE - $limit; $self->{slice} = $slice; - } else { # latest $limit messages - my $base = $uidmax - $limit; + } else { # latest $limit messages, 1k if unspecified + my $base = $uidmax - ($limit // 1000); $self->{uid_base} = $base < 0 ? 0 : $base; $self->{slice} = -1; } diff --git a/lib/PublicInbox/WwwText.pm b/lib/PublicInbox/WwwText.pm index c31a7f86..f4508b3f 100644 --- a/lib/PublicInbox/WwwText.pm +++ b/lib/PublicInbox/WwwText.pm @@ -293,6 +293,9 @@ The POP3 password is: anonymous The POP3 username is: \$(uuidgen)\@$ctx->{ibx}->{newsgroup} where \$(uuidgen) in the output of the `uuidgen' command on your system. The UUID in the username functions as a private cookie (don't share it). +By default, only 1000 messages are retrieved. You may download more +by appending `?limit=NUM' (without quotes) to the username, where +`NUM' is an integer between 1 and 50000. Idle accounts will expire periodically. EOM }