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
}