Support for IMAP4rev2 and modern extensions

Đang mở
#12 7 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
20/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Đình trệ
Công nghệ
ruby
Lĩnh vực
networking

Hướng nghiên cứu

Bắt đầu bằng cách xem xét các mục RFC chưa được đánh dấu và các số issue được liên kết trong checklist này, sau đó xác định một khả năng có phạm vi được định rõ. Được xem là hoàn tất khi khả năng IMAP đã chọn được triển khai hoặc ghi lại tài liệu khi phù hợp, đồng thời trạng thái mục tương ứng trong checklist và issue liên quan được cập nhật.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

IMAP4rev1 IMAP4rev2

This is a meta-ticket to track support for IMAP capabilities. I'm also listing capabilities that are already supported by Net::IMAP as well as extensions that are obsolete or unsupported by IMAP servers, so that (when completed) the list will be exhaustive. Later, we can copy the list of supported RFCs and extensions into the rdoc.

This list hasn't been carefully audited yet. Some unchecked items can probably be checked off without any extra effort. As tickets and PRs are created for various features, I'll update this list to include them.

Basic protocol specifications

  • RFC3501 (2003): Internet Message Access Protocol - version 4rev1
    • support all basic IMAP4rev1 commands
    • #50
    • #49
      several extensions require this. e.g. non-synchronizing literals
    • #48
    • #30
      this can be a client option, to preserve backwards compatibility
  • #35
  • RFC9051 (2021): IMAP4rev2
    • Appendix E: Changes since RFC3501
      Only the relevant items are listed below. In some cases, all that we need do for Net::IMAP is add (or link to) documentation.
      • 1. Support for 64-bit message and body part sizes.
        Net::IMAP doesn't validate number or number64 size, and thus automatically supports the larger 64-bit sizes
      • 2. Folded in:
      • 3. Added STATUS SIZE RFC8438 and STATUS DELETED.
        These are both numeric status attributes and thus were already implicitly supported.
        #225 added explicit support and documented both.
      • 4. SEARCH command now requires to return the ESEARCH response (SEARCH response is now deprecated)
        #44
      • 7. Clarified that the COPYUID response code is returned for both MOVE and UID MOVE.
        #65
      • 14. For future extensibility, extended ABNF for tagged-ext-simple to allow for bare number64
        #35
      • 16. Mailbox names and message headers now allow for UTF-8. Support for modified UTF-7 in mailbox names is not required, unless compatibility with IMAP4rev1 is desired.
        #38
      • 20. IDLE command can now return updates not related to the currently selected mailbox state.
        Not applicable: Net::IMAP does not interpret unsolicited responses, and leaves this up to the library users.
      • 22. Clarified that client implementations MUST ignore response codes that they do not recognize. (Changed from a SHOULD to a MUST.)
      • 23. #110
      • 24. #109
      • #118
      • 26. Added warnings about use of ALERT response codes and PREAUTH response.
      • 27. Replaced DIGEST-MD5 SASL mechanism with SCRAM-SHA-256. DIGEST-MD5 was deprecated.
        • #54
    • Appendix F. Other Recommended IMAP Extensions
      • #106
      • #107
      • #39
  • RFC3501's official "updated by" RFCs:
    • #35
    • RFC4469 (2006): CATENATE
    • RFC4551 (2006): obsoleted by RFC7162 (2014): CONDSTORE
    • RFC5032 (2007): WITHIN
    • #42
    • RFC5738 (2010): obsoleted by RFC6855 (2013): UTF-8 support
    • RFC6186 (2011): SRV Records for Locating Email Services
      • updated by: RFC8314 (2018): Cleartext Obsolete: Use TLS for Email
      • updated by: [RFC8553] (2019): DNS AttrLeaf, fixing underscored node names
    • RFC6858 (2013): Simplified Downgrading for I18n Email
      • values simplicity of implementation over fidelity of representation, since implementing a high-fidelity downgrade algorithm... is likely more work than implementing proper UTF-8 support RFC6855.
    • RFC7817 (2016): Updated TLS Server Identity Check Procedure
    • RFC8314 (2018): Cleartext Obsolete: Use TLS for Email
    • RFC8437 (2018): UNAUTHENTICATE
    • #39

IANA registries

Registry references
Capabilities RFC3501
Mailbox attributes RFC3501
SASL Mechanisms RFC4422
LIST EXTENDED RFC5258
Response codes RFC5530
Keywords RFC5788, RFC8621

Commonly supported extensions

This is not an exhaustive list of all extensions, but an opinionated selection of the most important extensions that Net::IMAP should support. It is partially based on CAPABILITY data for hundreds of thousands of IMAP4 accounts, and partially based on subjective judgement. Additionally, any RFCs we already support, even if only partially, have been promoted to this list. Some extension behaviors are out-of-scope for Net::IMAP, so "support" simply means parsing and adding the necessary documentation for users of net-imap to implement the extension bevavior. Please comment below if you think something should be promoted to this list!

sorted by original RFC year

  • RFC2087 (1997): QUOTA
  • RFC2177 (1997): IDLE (included in IMAP4rev2)
  • RFC2342 (1998): #5 NAMESPACE (included in IMAP4rev2)
  • RFC2971 (2000): #4 ID
  • RFC3348 (2002): CHILDREN
    • MailboxList predicate methods
  • RFC3516 (2003): BINARY
    • #41
    • #535
  • #40
  • RFC4314 (2005): ACL
    • commands: GETACL, SETACL
    • response: ACL
    • commands: DELETEACL, LISTRIGHTS, MYRIGHTS
    • response: LISTRIGHTS, MYRIGHTS
  • #36
    • it is possible to manually extract the raw COPYUID data
  • #35
  • RFC4616 (2006): AUTH=PLAIN
  • RFC5256 (2008): SORT
  • #44
  • #34
  • #46
  • XOAUTH2 (2007): AUTH=XOAUTH2
  • GMAILext (2007): X-GM-EXT-1
    • XLIST deprecated for SPECIAL-USE
    • X-GM-RAW, X-GM-MSGID, X-GM-THRID, X-GM-LABELS
      n.b. GMail's non-standard extensions can almost be obsoleted by a combination of OBJECTID, SORT, THREAD, SEARCH=FUZZY, ESEARCH, ESORT, and AUTH=OAUTHBEARER. But GMail and other large email providers still haven't upgraded to use all of these new standards. Until such time as they are deprecated by GMail (and AUTH=XOAUTH2 is used by many providers), I think it's useful to add these to the standard library instead of installing a separate gem.
  • #33
  • #42
  • RFC5957 (2010): SORT=DISPLAY (only requires documentation)
  • #43
  • RFC5530 (2009): Response Codes (IANA registry) (included in IMAP4rev2)
  • #38
  • RFC5802 (2010): AUTH=SCRAM-*
    #54
  • #45
  • #108
    • Constants for the mailbox name attributes are added by #28
  • RFC6851 (2013): MOVE (included in IMAP4rev2)
  • #106 (obsoletes: RFC4551 2006)
  • #107 (obsoletes: RFC5162 2008)
  • #47
  • #537
  • #37
  • RFC7889 (2016): APPENDLIMIT
  • RFC8437 (2018): UNAUTHENTICATE
  • RFC8438 (2018): STATUS=SIZE (included in IMAP4rev2)
    • n.b. Net::IMAP imposes no restrictions on STATUS attributes and can parse any atom number extension in the response, so it automatically supports STATUS mbox (SIZE). It is the user's responsibility to check for the capability.
  • RFC8457 (2018): Keyword: $Important
    • n.b. Net::IMAP ignores keyword semantics, leaving that to the user. So "support" simply means that the attributes are parsed correctly.
  • RFC8457 (2018): Special-use attribute: \Important
  • #39
  • RFC8970 (2020): PREVIEW, Message Preview Generation
  • RFC9208 (2022): QUOTA (obsoletes RFC2087)
  • RFC9394 (2023): PARTIAL, for Paged SEARCH and FETCH
    #367
  • #366

Additional standard recommendations

  • RFC2180 - IMAP4 Multi-Accessed Mailbox Practice
  • RFC2595 - Using TLS with IMAP, POP3 and ACAP
  • RFC2683 (1999): IMAP4 Implementation Recommendations
    • mailbox listing, heirarchy, delimiters, NAMESPACE, etc
    • mailbox "\Noselect", "\Noinferiors", "[TRYCREATE]", "[READ-ONLY]"
    • UIDs and UIDVALIDITY
    • FETCH (any order, extra information, unsolicited)
    • "Clients must present ALERT text clearly to the user."
  • RFC4549 (2006): Synchronization Operations for Disconnected IMAP4 Clients
  • RFC5550 (2009): The Internet Email to Support Diverse Service Environments (Lemonade) Profile
    • obsoletes: [RFC4550] (2006)
  • RFC5598 (2009): Internet Email Architecture (Errata Exist)

Other extensions

Some of these are easy to add, and many of them would be very useful. I placed them down here instead of prioritizing them above mostly due to a quick and unscientific sampling of email accounts and server capabilities.

sorted by estimated current server support

By my estimation, the following are currently supported by relatively few email addresses. They are sorted by RFC number.

New specifications

Looking at recent standards and others that are still in draft form (as of 2021-10-19):

IETF "extra" WG (Email mailstore and eXtensions To Revise or Amend)

Deprecations?

We might want to remove obsolete authentication mechanisms from the default set of authenticators. For people who still need them, the code could be preserved in separate files, with explicit requires, e.g:

require "net/imap/sasl/cram-md5_authenticator"
require "net/imap/sasl/digest-md5_authenticator"
require "net/imap/sasl/login_authenticator"
  • #55
  • #62
    • LOGIN (only published as a draft. use AUTH PLAIN or LOGIN instead)
    • AUTH=CRAM-MD5
    • AUTH=DIGEST-MD5 - officially obsoleted by RFC6331 (2011)
Ngôn ngữ chính
Ruby
Star
121
Fork
47
Merge trung bình
19 giờ 25 phút
Pull request đã merge (30 ngày)
3

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ruby/net-imap

Tất cả issue của ruby/net-imap

Issue tương tự

Thêm issue về Ruby

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.