Konstantin Ryabitsev <[email protected]> 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
        }

Reply via email to