Search code examples
goimap

Any better way to watch imap email box update?


I have tried IMAP idle way, which works in most time, but:

  1. Sometimes it's missing event... the status updated which IDLE watched it's a delayed message, make my script confused.
  2. The email ISP sometimes close the imap conneciton, connection maybe just last serveral minutes.
  3. When lots email rush in, such as one email per seconds. IDLE status missing lot's event.

I know this is maybe mostly should blame email ISP, but is there a better way I can get email notification in time and reliable.

or I just use hard way, long loop check email?


Solution

  • IDLE doesn't tell you that there is one new message, it tells you that something happened. It may be one new message, or ten, it may be one message being deleted, or ten, or it may be another change. It's up to you to check. (If you want to test how your code handles it, you can cause large changes using UID COPY and EXPUNGE.)

    Connections being closed is also your problem to solve. The IMAP server can close a connection (for good or bad reasons), but usually it's done by a NAT middlebox belonging to the customer. Only the client can reconnect to solve the NAT problem, and solving the NAT problem solves the server problem too, as a side effect.