Full Code of jstedfast/MailKit for AI

master 8967eebe1abe cached
1080 files
19.0 MB
5.0M tokens
5201 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (20,110K chars total). Download the full file to get everything.
Repository: jstedfast/MailKit
Branch: master
Commit: 8967eebe1abe
Files: 1080
Total size: 19.0 MB

Directory structure:
gitextract_1og2imlt/

├── .config/
│   └── dotnet-tools.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── aot-compatibility.yml
│       ├── codeql.yml
│       └── main.yml
├── .gitignore
├── .gitmodules
├── AotCompatibility/
│   ├── AotCompatibility.csproj
│   └── Program.cs
├── Documentation/
│   ├── Content/
│   │   ├── Creating-Messages.aml
│   │   ├── Frequently-Asked-Questions.aml
│   │   ├── Getting-Started.aml
│   │   ├── Introduction.aml
│   │   ├── License.aml
│   │   ├── Parsing-Messages.aml
│   │   ├── Working-With-Messages.aml
│   │   ├── Working-With-OpenPGP.aml
│   │   └── Working-With-SMime.aml
│   ├── ContentLayout.content
│   ├── Documentation.shfbproj
│   └── Examples/
│       ├── ArcSignerExample.cs
│       ├── ArcVerifierExample.cs
│       ├── AttachmentExamples.cs
│       ├── BodyBuilder.cs
│       ├── CreateMultipartAlternative.cs
│       ├── CreateMultipartMixed.cs
│       ├── CreateSimpleMessage.cs
│       ├── DecodingContent.cs
│       ├── DkimExamples.cs
│       ├── DkimVerifierExample.cs
│       ├── ForwardExamples.cs
│       ├── ImapBodyPartExamples.cs
│       ├── ImapExamples.cs
│       ├── ImapIdleExample.cs
│       ├── InlinePGPExample.txt
│       ├── MessageDeliveryStatusExamples.cs
│       ├── MimeIterator.cs
│       ├── MimeMessageLoad.cs
│       ├── MimeParserExamples.cs
│       ├── MimeVisitorExamples.cs
│       ├── MultipartFormDataExamples.cs
│       ├── OAuth2ExchangeExample.cs
│       ├── OAuth2GMailExample.cs
│       ├── OpenPGPExamples.cs
│       ├── OpeningContent.cs
│       ├── ParameterExamples.cs
│       ├── Pop3Examples.cs
│       ├── ProxyExamples.cs
│       ├── RecursivelyTraverse.cs
│       ├── SMimeExamples.cs
│       ├── SmtpExamples.cs
│       ├── SslCertificateValidation.cs
│       └── VerifySignature.cs
├── ExchangeOAuth2.md
├── FAQ.md
├── GMailOAuth2.md
├── LICENSE
├── MailKit/
│   ├── AccessControl.cs
│   ├── AccessControlList.cs
│   ├── AccessRight.cs
│   ├── AccessRights.cs
│   ├── AlertEventArgs.cs
│   ├── Annotation.cs
│   ├── AnnotationAccess.cs
│   ├── AnnotationAttribute.cs
│   ├── AnnotationEntry.cs
│   ├── AnnotationScope.cs
│   ├── AnnotationsChangedEventArgs.cs
│   ├── AppendRequest.cs
│   ├── AuthenticatedEventArgs.cs
│   ├── BodyPart.cs
│   ├── BodyPartBasic.cs
│   ├── BodyPartCollection.cs
│   ├── BodyPartMessage.cs
│   ├── BodyPartMultipart.cs
│   ├── BodyPartText.cs
│   ├── BodyPartVisitor.cs
│   ├── ByteArrayBuilder.cs
│   ├── CommandException.cs
│   ├── CompressedStream.cs
│   ├── ConnectedEventArgs.cs
│   ├── DeliveryStatusNotification.cs
│   ├── DeliveryStatusNotificationType.cs
│   ├── DisconnectedEventArgs.cs
│   ├── DuplexStream.cs
│   ├── Envelope.cs
│   ├── FetchRequest.cs
│   ├── FolderAccess.cs
│   ├── FolderAttributes.cs
│   ├── FolderCreatedEventArgs.cs
│   ├── FolderFeature.cs
│   ├── FolderNamespace.cs
│   ├── FolderNamespaceCollection.cs
│   ├── FolderNotFoundException.cs
│   ├── FolderNotOpenException.cs
│   ├── FolderQuota.cs
│   ├── FolderRenamedEventArgs.cs
│   ├── HeaderSet.cs
│   ├── IAppendRequest.cs
│   ├── IAuthenticationSecretDetector.cs
│   ├── IFetchRequest.cs
│   ├── IMailFolder.cs
│   ├── IMailFolderAppendExtensions.cs
│   ├── IMailFolderFetchExtensions.cs
│   ├── IMailFolderStoreExtensions.cs
│   ├── IMailService.cs
│   ├── IMailSpool.cs
│   ├── IMailStore.cs
│   ├── IMailTransport.cs
│   ├── IMessageSummary.cs
│   ├── IProtocolLogger.cs
│   ├── IReplaceRequest.cs
│   ├── IStoreFlagsRequest.cs
│   ├── IStoreLabelsRequest.cs
│   ├── IStoreRequest.cs
│   ├── ITransferProgress.cs
│   ├── MailFolder.cs
│   ├── MailKit.csproj
│   ├── MailKitLite.csproj
│   ├── MailService.cs
│   ├── MailSpool.cs
│   ├── MailStore.cs
│   ├── MailTransport.cs
│   ├── MessageEventArgs.cs
│   ├── MessageFlags.cs
│   ├── MessageFlagsChangedEventArgs.cs
│   ├── MessageLabelsChangedEventArgs.cs
│   ├── MessageNotFoundException.cs
│   ├── MessageSentEventArgs.cs
│   ├── MessageSorter.cs
│   ├── MessageSummary.cs
│   ├── MessageSummaryFetchedEventArgs.cs
│   ├── MessageSummaryItems.cs
│   ├── MessageThread.cs
│   ├── MessageThreader.cs
│   ├── MessagesVanishedEventArgs.cs
│   ├── Metadata.cs
│   ├── MetadataChangedEventArgs.cs
│   ├── MetadataCollection.cs
│   ├── MetadataOptions.cs
│   ├── MetadataTag.cs
│   ├── ModSeqChangedEventArgs.cs
│   ├── Net/
│   │   ├── ClientMetrics.cs
│   │   ├── IChannelBindingContext.cs
│   │   ├── Imap/
│   │   │   ├── AsyncImapClient.cs
│   │   │   ├── IImapClient.cs
│   │   │   ├── IImapFolder.cs
│   │   │   ├── ImapAuthenticationSecretDetector.cs
│   │   │   ├── ImapCallbacks.cs
│   │   │   ├── ImapCapabilities.cs
│   │   │   ├── ImapClient.cs
│   │   │   ├── ImapCommand.cs
│   │   │   ├── ImapCommandException.cs
│   │   │   ├── ImapCommandResponse.cs
│   │   │   ├── ImapCommandStatus.cs
│   │   │   ├── ImapEncoding.cs
│   │   │   ├── ImapEngine.cs
│   │   │   ├── ImapEventGroup.cs
│   │   │   ├── ImapFolder.cs
│   │   │   ├── ImapFolderAnnotations.cs
│   │   │   ├── ImapFolderConstructorArgs.cs
│   │   │   ├── ImapFolderFetch.cs
│   │   │   ├── ImapFolderFlags.cs
│   │   │   ├── ImapFolderSearch.cs
│   │   │   ├── ImapIdleContext.cs
│   │   │   ├── ImapImplementation.cs
│   │   │   ├── ImapLiteral.cs
│   │   │   ├── ImapProtocolException.cs
│   │   │   ├── ImapResponseCode.cs
│   │   │   ├── ImapSearchQueryOptimizer.cs
│   │   │   ├── ImapStream.cs
│   │   │   ├── ImapToken.cs
│   │   │   └── ImapUtils.cs
│   │   ├── NetworkOperation.cs
│   │   ├── NetworkStream.cs
│   │   ├── Pop3/
│   │   │   ├── AsyncPop3Client.cs
│   │   │   ├── IPop3Client.cs
│   │   │   ├── Pop3AuthenticationSecretDetector.cs
│   │   │   ├── Pop3Capabilities.cs
│   │   │   ├── Pop3Client.cs
│   │   │   ├── Pop3Command.cs
│   │   │   ├── Pop3CommandException.cs
│   │   │   ├── Pop3Engine.cs
│   │   │   ├── Pop3Language.cs
│   │   │   ├── Pop3ProtocolException.cs
│   │   │   └── Pop3Stream.cs
│   │   ├── Proxy/
│   │   │   ├── HttpProxyClient.cs
│   │   │   ├── HttpsProxyClient.cs
│   │   │   ├── IProxyClient.cs
│   │   │   ├── ProxyClient.cs
│   │   │   ├── ProxyProtocolException.cs
│   │   │   ├── Socks4Client.cs
│   │   │   ├── Socks4aClient.cs
│   │   │   ├── Socks5Client.cs
│   │   │   ├── SocksClient.cs
│   │   │   └── WebProxyClient.cs
│   │   ├── SelectMode.cs
│   │   ├── Smtp/
│   │   │   ├── AsyncSmtpClient.cs
│   │   │   ├── ISmtpClient.cs
│   │   │   ├── SmtpAuthenticationSecretDetector.cs
│   │   │   ├── SmtpCapabilities.cs
│   │   │   ├── SmtpClient.cs
│   │   │   ├── SmtpCommandException.cs
│   │   │   ├── SmtpDataFilter.cs
│   │   │   ├── SmtpErrorCode.cs
│   │   │   ├── SmtpProtocolException.cs
│   │   │   ├── SmtpResponse.cs
│   │   │   ├── SmtpStatusCode.cs
│   │   │   └── SmtpStream.cs
│   │   ├── SocketMetrics.cs
│   │   ├── SocketUtils.cs
│   │   └── SslStream.cs
│   ├── NullProtocolLogger.cs
│   ├── PreviewOptions.cs
│   ├── ProgressStream.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ProtocolException.cs
│   ├── ProtocolLogger.cs
│   ├── ReplaceRequest.cs
│   ├── Search/
│   │   ├── AnnotationSearchQuery.cs
│   │   ├── BinarySearchQuery.cs
│   │   ├── DateSearchQuery.cs
│   │   ├── FilterSearchQuery.cs
│   │   ├── HeaderSearchQuery.cs
│   │   ├── ISearchQueryOptimizer.cs
│   │   ├── NumericSearchQuery.cs
│   │   ├── OrderBy.cs
│   │   ├── OrderByAnnotation.cs
│   │   ├── OrderByType.cs
│   │   ├── SearchOptions.cs
│   │   ├── SearchQuery.cs
│   │   ├── SearchResults.cs
│   │   ├── SearchTerm.cs
│   │   ├── SortOrder.cs
│   │   ├── TextSearchQuery.cs
│   │   ├── UidSearchQuery.cs
│   │   └── UnarySearchQuery.cs
│   ├── Security/
│   │   ├── AuthenticationException.cs
│   │   ├── KeyedHashAlgorithm.cs
│   │   ├── Ntlm/
│   │   │   ├── BitConverterLE.cs
│   │   │   ├── DES.cs
│   │   │   ├── HMACMD5.cs
│   │   │   ├── MD4.cs
│   │   │   ├── NtlmAttribute.cs
│   │   │   ├── NtlmAttributeValuePair.cs
│   │   │   ├── NtlmAuthenticateMessage.cs
│   │   │   ├── NtlmChallengeMessage.cs
│   │   │   ├── NtlmFlags.cs
│   │   │   ├── NtlmMessageBase.cs
│   │   │   ├── NtlmNegotiateMessage.cs
│   │   │   ├── NtlmSingleHostData.cs
│   │   │   ├── NtlmTargetInfo.cs
│   │   │   ├── NtlmUtils.cs
│   │   │   └── RC4.cs
│   │   ├── RandomNumberGenerator.cs
│   │   ├── SaslException.cs
│   │   ├── SaslMechanism.cs
│   │   ├── SaslMechanismAnonymous.cs
│   │   ├── SaslMechanismCramMd5.cs
│   │   ├── SaslMechanismDigestMd5.cs
│   │   ├── SaslMechanismGssapi.cs
│   │   ├── SaslMechanismLogin.cs
│   │   ├── SaslMechanismNegotiateBase.cs
│   │   ├── SaslMechanismNtlm.cs
│   │   ├── SaslMechanismNtlmNative.cs
│   │   ├── SaslMechanismOAuth2.cs
│   │   ├── SaslMechanismOAuthBearer.cs
│   │   ├── SaslMechanismPlain.cs
│   │   ├── SaslMechanismScramBase.cs
│   │   ├── SaslMechanismScramSha1.cs
│   │   ├── SaslMechanismScramSha256.cs
│   │   ├── SaslMechanismScramSha512.cs
│   │   ├── SecureSocketOptions.cs
│   │   └── SslHandshakeException.cs
│   ├── ServiceNotAuthenticatedException.cs
│   ├── ServiceNotConnectedException.cs
│   ├── SpecialFolder.cs
│   ├── StatusItems.cs
│   ├── StoreAction.cs
│   ├── StoreFlagsRequest.cs
│   ├── StoreLabelsRequest.cs
│   ├── Telemetry.cs
│   ├── TextEncodings.cs
│   ├── ThreadingAlgorithm.cs
│   ├── UniqueId.cs
│   ├── UniqueIdMap.cs
│   ├── UniqueIdRange.cs
│   ├── UniqueIdSet.cs
│   ├── UriExtensions.cs
│   ├── WebAlertEventArgs.cs
│   └── mailkit.snk
├── MailKit.Coverity.sln
├── MailKit.Documentation.sln
├── MailKit.sln
├── MailKitLite.sln
├── README.md
├── RFCs.md
├── ReleaseNotes.md
├── SECURITY.md
├── TODO.md
├── Telemetry.md
├── UnitTests/
│   ├── AccessControlListTests.cs
│   ├── AnnotationAttributeTests.cs
│   ├── AnnotationEntryTests.cs
│   ├── AnnotationTests.cs
│   ├── AppendRequestTests.cs
│   ├── ArgumentExceptionTests.cs
│   ├── BodyPartTests.cs
│   ├── CompressedStreamTests.cs
│   ├── DuplexStreamTests.cs
│   ├── EnvelopeTests.cs
│   ├── EventArgsTests.cs
│   ├── ExceptionTests.cs
│   ├── ExceptionalProtocolLogger.cs
│   ├── FolderNamespaceTests.cs
│   ├── HeaderSetTests.cs
│   ├── MailServiceTests.cs
│   ├── MessageSortingTests.cs
│   ├── MessageSummaryTests.cs
│   ├── MessageThreadingTests.cs
│   ├── MetadataTests.cs
│   ├── Net/
│   │   ├── DummyNetworkStream.cs
│   │   ├── Imap/
│   │   │   ├── ImapAuthenticationSecretDetectorTests.cs
│   │   │   ├── ImapClientTests.cs
│   │   │   ├── ImapCommandExceptionTests.cs
│   │   │   ├── ImapCommandTests.cs
│   │   │   ├── ImapEncodingTests.cs
│   │   │   ├── ImapEngineTests.cs
│   │   │   ├── ImapEventGroupTests.cs
│   │   │   ├── ImapFolderAnnotationsTests.cs
│   │   │   ├── ImapFolderFetchTests.cs
│   │   │   ├── ImapFolderFlagsTests.cs
│   │   │   ├── ImapFolderSearchTests.cs
│   │   │   ├── ImapFolderTests.cs
│   │   │   ├── ImapImplementationTests.cs
│   │   │   ├── ImapReplayStream.cs
│   │   │   ├── ImapSearchQueryOptimizerTests.cs
│   │   │   ├── ImapStreamTests.cs
│   │   │   ├── ImapUtilsTests.cs
│   │   │   └── Resources/
│   │   │       ├── acl/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── getacl.txt
│   │   │       │   ├── listrights.txt
│   │   │       │   └── myrights.txt
│   │   │       ├── common/
│   │   │       │   ├── basic-greeting.txt
│   │   │       │   ├── capability-greeting.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── fetch-annotations.txt
│   │   │       │   ├── getquota-no-root.txt
│   │   │       │   ├── getquota.txt
│   │   │       │   ├── id.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── list-literal-subfolders.txt
│   │   │       │   ├── list-namespace.txt
│   │   │       │   ├── list-nil-folder-delim.txt
│   │   │       │   ├── message.0.msg
│   │   │       │   ├── message.1.msg
│   │   │       │   ├── message.10.msg
│   │   │       │   ├── message.11.msg
│   │   │       │   ├── message.12.msg
│   │   │       │   ├── message.13.msg
│   │   │       │   ├── message.14.msg
│   │   │       │   ├── message.15.msg
│   │   │       │   ├── message.16.msg
│   │   │       │   ├── message.17.msg
│   │   │       │   ├── message.18.msg
│   │   │       │   ├── message.19.msg
│   │   │       │   ├── message.2.msg
│   │   │       │   ├── message.20.msg
│   │   │       │   ├── message.21.msg
│   │   │       │   ├── message.22.msg
│   │   │       │   ├── message.23.msg
│   │   │       │   ├── message.24.msg
│   │   │       │   ├── message.25.msg
│   │   │       │   ├── message.26.msg
│   │   │       │   ├── message.27.msg
│   │   │       │   ├── message.28.msg
│   │   │       │   ├── message.29.msg
│   │   │       │   ├── message.3.msg
│   │   │       │   ├── message.30.msg
│   │   │       │   ├── message.31.msg
│   │   │       │   ├── message.32.msg
│   │   │       │   ├── message.33.msg
│   │   │       │   ├── message.34.msg
│   │   │       │   ├── message.35.msg
│   │   │       │   ├── message.36.msg
│   │   │       │   ├── message.37.msg
│   │   │       │   ├── message.38.msg
│   │   │       │   ├── message.39.msg
│   │   │       │   ├── message.4.msg
│   │   │       │   ├── message.40.msg
│   │   │       │   ├── message.41.msg
│   │   │       │   ├── message.42.msg
│   │   │       │   ├── message.43.msg
│   │   │       │   ├── message.44.msg
│   │   │       │   ├── message.45.msg
│   │   │       │   ├── message.46.msg
│   │   │       │   ├── message.47.msg
│   │   │       │   ├── message.48.msg
│   │   │       │   ├── message.49.msg
│   │   │       │   ├── message.5.msg
│   │   │       │   ├── message.6.msg
│   │   │       │   ├── message.7.msg
│   │   │       │   ├── message.8.msg
│   │   │       │   ├── message.9.msg
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── preauth-capability-greeting.txt
│   │   │       │   ├── preauth-greeting.txt
│   │   │       │   ├── select-inbox-annotate-no-modseq.txt
│   │   │       │   ├── select-inbox-annotate-none.txt
│   │   │       │   ├── select-inbox-annotate-readonly.txt
│   │   │       │   ├── select-inbox-annotate.txt
│   │   │       │   ├── select-inbox-no-modseq.txt
│   │   │       │   ├── select-inbox.txt
│   │   │       │   ├── setquota.txt
│   │   │       │   └── status-literal-folder.txt
│   │   │       ├── courier/
│   │   │       │   ├── capability.txt
│   │   │       │   └── greeting.txt
│   │   │       ├── cyrus/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   └── greeting.txt
│   │   │       ├── domino/
│   │   │       │   ├── capability.txt
│   │   │       │   ├── fetch-extra-parens.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   └── namespace.txt
│   │   │       ├── dovecot/
│   │   │       │   ├── append.1.txt
│   │   │       │   ├── append.2.txt
│   │   │       │   ├── append.3.txt
│   │   │       │   ├── append.4.txt
│   │   │       │   ├── append.5.txt
│   │   │       │   ├── append.6.txt
│   │   │       │   ├── append.7.txt
│   │   │       │   ├── append.8.txt
│   │   │       │   ├── authenticate+annotate+replace.txt
│   │   │       │   ├── authenticate+annotate.txt
│   │   │       │   ├── authenticate+filters.txt
│   │   │       │   ├── authenticate+fuzzy.txt
│   │   │       │   ├── authenticate+gmail-capabilities.txt
│   │   │       │   ├── authenticate+replace.txt
│   │   │       │   ├── authenticate+savedate.txt
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── copy.txt
│   │   │       │   ├── enable-qresync.txt
│   │   │       │   ├── examine-folder.txt
│   │   │       │   ├── expunge.txt
│   │   │       │   ├── fetch1.txt
│   │   │       │   ├── fetch2.txt
│   │   │       │   ├── fetch3.txt
│   │   │       │   ├── fetch4.txt
│   │   │       │   ├── getbodypart.txt
│   │   │       │   ├── getbodypart1.txt
│   │   │       │   ├── getbodypartheaders.txt
│   │   │       │   ├── getmessageheaders.txt
│   │   │       │   ├── getstream-section.txt
│   │   │       │   ├── getstream-section2.txt
│   │   │       │   ├── getstream.txt
│   │   │       │   ├── getstream2.txt
│   │   │       │   ├── getstreams1.txt
│   │   │       │   ├── getstreams2.txt
│   │   │       │   ├── greeting-preauth.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-folder.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── list-personal.txt
│   │   │       │   ├── list-special-use.txt
│   │   │       │   ├── list-unittests-destination.txt
│   │   │       │   ├── list-unittests-messages.txt
│   │   │       │   ├── list-unittests.txt
│   │   │       │   ├── move.txt
│   │   │       │   ├── multiappend.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── noop+alert.txt
│   │   │       │   ├── notify-idle-done.txt
│   │   │       │   ├── notify-idle.txt
│   │   │       │   ├── notify-list-personal.txt
│   │   │       │   ├── notify.txt
│   │   │       │   ├── optimized-search.txt
│   │   │       │   ├── search-all.txt
│   │   │       │   ├── search-changed-since.txt
│   │   │       │   ├── search-raw.txt
│   │   │       │   ├── search-uids-options.txt
│   │   │       │   ├── search-uids.txt
│   │   │       │   ├── select-unittests-destination.txt
│   │   │       │   ├── select-unittests-messages-qresync.txt
│   │   │       │   ├── select-unittests-messages.txt
│   │   │       │   ├── setflags-unchangedsince.txt
│   │   │       │   ├── sort-by-date.txt
│   │   │       │   ├── sort-by-strings.txt
│   │   │       │   ├── sort-raw.txt
│   │   │       │   ├── sort-reverse-arrival.txt
│   │   │       │   ├── sort-uids-options.txt
│   │   │       │   ├── status-unittests-destination.txt
│   │   │       │   ├── store-answered.txt
│   │   │       │   ├── store-deleted-custom.txt
│   │   │       │   ├── store-deleted.txt
│   │   │       │   ├── store-seen.txt
│   │   │       │   ├── thread-orderedsubject.txt
│   │   │       │   ├── thread-references.txt
│   │   │       │   └── uid-expunge.txt
│   │   │       ├── exchange/
│   │   │       │   ├── capability-postauth.txt
│   │   │       │   ├── capability-preauth.txt
│   │   │       │   ├── greeting-2003.txt
│   │   │       │   ├── greeting-2007.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   └── issue115.txt
│   │   │       ├── gmail/
│   │   │       │   ├── add-flags.txt
│   │   │       │   ├── add-labels.txt
│   │   │       │   ├── append.1.txt
│   │   │       │   ├── append.10.txt
│   │   │       │   ├── append.11.txt
│   │   │       │   ├── append.12.txt
│   │   │       │   ├── append.13.txt
│   │   │       │   ├── append.14.txt
│   │   │       │   ├── append.15.txt
│   │   │       │   ├── append.16.txt
│   │   │       │   ├── append.17.txt
│   │   │       │   ├── append.18.txt
│   │   │       │   ├── append.19.txt
│   │   │       │   ├── append.2.txt
│   │   │       │   ├── append.20.txt
│   │   │       │   ├── append.21.txt
│   │   │       │   ├── append.22.txt
│   │   │       │   ├── append.23.txt
│   │   │       │   ├── append.24.txt
│   │   │       │   ├── append.25.txt
│   │   │       │   ├── append.26.txt
│   │   │       │   ├── append.27.txt
│   │   │       │   ├── append.28.txt
│   │   │       │   ├── append.29.txt
│   │   │       │   ├── append.3.txt
│   │   │       │   ├── append.30.txt
│   │   │       │   ├── append.31.txt
│   │   │       │   ├── append.32.txt
│   │   │       │   ├── append.33.txt
│   │   │       │   ├── append.34.txt
│   │   │       │   ├── append.35.txt
│   │   │       │   ├── append.36.txt
│   │   │       │   ├── append.37.txt
│   │   │       │   ├── append.38.txt
│   │   │       │   ├── append.39.txt
│   │   │       │   ├── append.4.txt
│   │   │       │   ├── append.40.txt
│   │   │       │   ├── append.41.txt
│   │   │       │   ├── append.42.txt
│   │   │       │   ├── append.43.txt
│   │   │       │   ├── append.44.txt
│   │   │       │   ├── append.45.txt
│   │   │       │   ├── append.46.txt
│   │   │       │   ├── append.47.txt
│   │   │       │   ├── append.48.txt
│   │   │       │   ├── append.49.txt
│   │   │       │   ├── append.5.txt
│   │   │       │   ├── append.50.txt
│   │   │       │   ├── append.6.txt
│   │   │       │   ├── append.7.txt
│   │   │       │   ├── append.8.txt
│   │   │       │   ├── append.9.txt
│   │   │       │   ├── authenticate+annotate.txt
│   │   │       │   ├── authenticate+create-special-use.txt
│   │   │       │   ├── authenticate+preview.txt
│   │   │       │   ├── authenticate+savedate.txt
│   │   │       │   ├── authenticate+statussize+objectid.txt
│   │   │       │   ├── authenticate+webalert.txt
│   │   │       │   ├── authenticate-no-appendlimit-value.txt
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability+login.txt
│   │   │       │   ├── capability+logindisabled.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── count-explicit.noop.txt
│   │   │       │   ├── count-implicit.noop.txt
│   │   │       │   ├── count.examine.txt
│   │   │       │   ├── create-mailboxid.txt
│   │   │       │   ├── examine-inbox.txt
│   │   │       │   ├── expunge-during-fetch.txt
│   │   │       │   ├── expunge.txt
│   │   │       │   ├── fetch-all-headers.txt
│   │   │       │   ├── fetch-invalid-headers.txt
│   │   │       │   ├── fetch-korean-previewtext-bodystructure.txt
│   │   │       │   ├── fetch-korean-previewtext-peek-text-only.txt
│   │   │       │   ├── fetch-nil-bodystructure.txt
│   │   │       │   ├── fetch-nil.txt
│   │   │       │   ├── fetch-objectid.txt
│   │   │       │   ├── fetch-preview.txt
│   │   │       │   ├── fetch-previewtext-bodystructure.txt
│   │   │       │   ├── fetch-previewtext-peek-html-only.txt
│   │   │       │   ├── fetch-previewtext-peek-text-alternative.txt
│   │   │       │   ├── fetch-previewtext-peek-text-only.txt
│   │   │       │   ├── fetch-quoted-string-bodystructure.txt
│   │   │       │   ├── fetch-quoted-string.txt
│   │   │       │   ├── fetch-savedate.txt
│   │   │       │   ├── fetch.1+unsolicited-info.txt
│   │   │       │   ├── fetch.1.txt
│   │   │       │   ├── fetch.11.txt
│   │   │       │   ├── fetch.12.txt
│   │   │       │   ├── fetch.13.txt
│   │   │       │   ├── fetch.14.txt
│   │   │       │   ├── fetch.2.txt
│   │   │       │   ├── fetch.26.txt
│   │   │       │   ├── fetch.27.txt
│   │   │       │   ├── fetch.28.txt
│   │   │       │   ├── fetch.29.txt
│   │   │       │   ├── fetch.3.txt
│   │   │       │   ├── fetch.31.txt
│   │   │       │   ├── fetch.34.txt
│   │   │       │   ├── fetch.41.txt
│   │   │       │   ├── fetch.42.txt
│   │   │       │   ├── fetch.43.txt
│   │   │       │   ├── fetch.5.txt
│   │   │       │   ├── fetch.50.txt
│   │   │       │   ├── fetch.7.txt
│   │   │       │   ├── fetch.8.txt
│   │   │       │   ├── fetch.9.txt
│   │   │       │   ├── get-indexes.txt
│   │   │       │   ├── go-ahead.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── headers.1+unsolicited-info.txt
│   │   │       │   ├── idle-done.txt
│   │   │       │   ├── idle.txt
│   │   │       │   ├── list-all-no-status.txt
│   │   │       │   ├── list-all.txt
│   │   │       │   ├── list-archived-messages.txt
│   │   │       │   ├── list-archives.txt
│   │   │       │   ├── list-flagged.txt
│   │   │       │   ├── list-gmail-subfolders-no-status.txt
│   │   │       │   ├── list-gmail-subfolders.txt
│   │   │       │   ├── list-gmail.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── list-level1.txt
│   │   │       │   ├── list-level2.txt
│   │   │       │   ├── list-level3.txt
│   │   │       │   ├── list-personal-status-appendlimit.txt
│   │   │       │   ├── list-personal.txt
│   │   │       │   ├── list-sublevel1.txt
│   │   │       │   ├── list-sublevel2.txt
│   │   │       │   ├── list-toplevel1.txt
│   │   │       │   ├── list-toplevel2.txt
│   │   │       │   ├── list-unittests-dummy.txt
│   │   │       │   ├── list-unittests.txt
│   │   │       │   ├── logout.txt
│   │   │       │   ├── lsub-all.txt
│   │   │       │   ├── lsub-personal.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── precise-pangolin-message.txt
│   │   │       │   ├── rename-unittests.txt
│   │   │       │   ├── search-deleted-not-1-3.txt
│   │   │       │   ├── search-summary.txt
│   │   │       │   ├── search.txt
│   │   │       │   ├── select-inbox.txt
│   │   │       │   ├── select-sublevel1.txt
│   │   │       │   ├── select-sublevel2.txt
│   │   │       │   ├── select-toplevel.txt
│   │   │       │   ├── select-unittests.txt
│   │   │       │   ├── set-flags.txt
│   │   │       │   ├── set-labels.txt
│   │   │       │   ├── status-+folder.txt
│   │   │       │   ├── status-all-mail.txt
│   │   │       │   ├── status-drafts.txt
│   │   │       │   ├── status-important.txt
│   │   │       │   ├── status-inbox-appendlimit-nil.txt
│   │   │       │   ├── status-inbox-appendlimit.txt
│   │   │       │   ├── status-inbox.txt
│   │   │       │   ├── status-sent-mail.txt
│   │   │       │   ├── status-spam.txt
│   │   │       │   ├── status-starred.txt
│   │   │       │   ├── status-trash.txt
│   │   │       │   ├── uid-copy.txt
│   │   │       │   ├── uid-expunge.txt
│   │   │       │   ├── uid-move.txt
│   │   │       │   ├── utf8accept.txt
│   │   │       │   └── xlist.txt
│   │   │       ├── icloud/
│   │   │       │   ├── authenticate-plain.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── enable-qresync.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   └── namespace.txt
│   │   │       ├── lowercase/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   └── list.txt
│   │   │       ├── metadata/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── getmetadata-multi.txt
│   │   │       │   ├── getmetadata-options.txt
│   │   │       │   ├── getmetadata.txt
│   │   │       │   ├── inbox-getmetadata-multi.txt
│   │   │       │   ├── inbox-getmetadata-options.txt
│   │   │       │   ├── inbox-getmetadata.txt
│   │   │       │   ├── inbox-setmetadata-maxsize.txt
│   │   │       │   ├── inbox-setmetadata-noprivate.txt
│   │   │       │   ├── inbox-setmetadata-toomany.txt
│   │   │       │   ├── setmetadata-maxsize.txt
│   │   │       │   ├── setmetadata-noprivate.txt
│   │   │       │   └── setmetadata-toomany.txt
│   │   │       ├── protonmail/
│   │   │       │   ├── capability.txt
│   │   │       │   └── greeting.txt
│   │   │       ├── qqmail/
│   │   │       │   └── greeting.txt
│   │   │       ├── smartermail/
│   │   │       │   └── greeting.txt
│   │   │       ├── strato.de/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   └── xlist.txt
│   │   │       ├── uw/
│   │   │       │   ├── greeting.txt
│   │   │       │   └── preauth-greeting.txt
│   │   │       ├── yahoo/
│   │   │       │   ├── capabilities.txt
│   │   │       │   ├── examine-inbox.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   └── search.txt
│   │   │       ├── yandex/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── getbodypart-missing-content.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── select-inbox.txt
│   │   │       │   └── xlist.txt
│   │   │       └── zoho/
│   │   │           ├── authenticate.txt
│   │   │           ├── capability.txt
│   │   │           ├── examine-gesendet.txt
│   │   │           ├── fetch-negative-modseq-values.txt
│   │   │           ├── greeting.txt
│   │   │           ├── list-inbox.txt
│   │   │           ├── namespace.txt
│   │   │           └── xlist.txt
│   │   ├── NetworkStreamTests.cs
│   │   ├── Pop3/
│   │   │   ├── Pop3AuthenticationSecretDetectorTests.cs
│   │   │   ├── Pop3ClientTests.cs
│   │   │   ├── Pop3CommandExceptionTests.cs
│   │   │   ├── Pop3ReplayStream.cs
│   │   │   ├── Pop3StreamTests.cs
│   │   │   └── Resources/
│   │   │       ├── comcast/
│   │   │       │   ├── capa1.txt
│   │   │       │   ├── capa2.txt
│   │   │       │   ├── err.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-error1.txt
│   │   │       │   ├── list-error2.txt
│   │   │       │   ├── list-error3.txt
│   │   │       │   ├── list.txt
│   │   │       │   ├── list1-error1.txt
│   │   │       │   ├── list1-error2.txt
│   │   │       │   ├── list1-error3.txt
│   │   │       │   ├── list1.txt
│   │   │       │   ├── ok.txt
│   │   │       │   ├── quit.txt
│   │   │       │   ├── retr1.txt
│   │   │       │   ├── stat-error1.txt
│   │   │       │   ├── stat-error2.txt
│   │   │       │   ├── stat-error3.txt
│   │   │       │   └── stat.txt
│   │   │       ├── common/
│   │   │       │   ├── err-greeting.txt
│   │   │       │   └── ok-greeting.txt
│   │   │       ├── exchange/
│   │   │       │   ├── auth.txt
│   │   │       │   ├── capa.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── plus.txt
│   │   │       │   ├── quit.txt
│   │   │       │   ├── retr1.txt
│   │   │       │   ├── stat.txt
│   │   │       │   └── uidl.txt
│   │   │       ├── gmail/
│   │   │       │   ├── auth.txt
│   │   │       │   ├── capa1.txt
│   │   │       │   ├── capa2.txt
│   │   │       │   ├── dele.txt
│   │   │       │   ├── dele123.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list.txt
│   │   │       │   ├── list1.txt
│   │   │       │   ├── list2.txt
│   │   │       │   ├── list3.txt
│   │   │       │   ├── noop.txt
│   │   │       │   ├── plus.txt
│   │   │       │   ├── quit.txt
│   │   │       │   ├── retr1-parse-error.txt
│   │   │       │   ├── retr1.txt
│   │   │       │   ├── retr123.txt
│   │   │       │   ├── rset.txt
│   │   │       │   ├── stat.txt
│   │   │       │   ├── top.txt
│   │   │       │   ├── top123.txt
│   │   │       │   ├── uidl-error1.txt
│   │   │       │   ├── uidl-error2.txt
│   │   │       │   ├── uidl.txt
│   │   │       │   ├── uidl1-error1.txt
│   │   │       │   ├── uidl1-error2.txt
│   │   │       │   ├── uidl1.txt
│   │   │       │   ├── uidl2.txt
│   │   │       │   └── uidl3.txt
│   │   │       └── lang/
│   │   │           ├── auth.txt
│   │   │           ├── capa1.txt
│   │   │           ├── capa2.txt
│   │   │           ├── getlang.txt
│   │   │           ├── greeting.txt
│   │   │           ├── quit.txt
│   │   │           ├── setlang.txt
│   │   │           ├── stat.txt
│   │   │           └── utf8.txt
│   │   ├── Proxy/
│   │   │   ├── HttpProxyClientTests.cs
│   │   │   ├── HttpProxyListener.cs
│   │   │   ├── HttpsProxyClientTests.cs
│   │   │   ├── ProxyListener.cs
│   │   │   ├── ProxyProtocolExceptionTests.cs
│   │   │   ├── Socks4ClientTests.cs
│   │   │   ├── Socks4ProxyListener.cs
│   │   │   ├── Socks4aClientTests.cs
│   │   │   ├── Socks4aProxyListener.cs
│   │   │   ├── Socks5ClientTests.cs
│   │   │   ├── Socks5ProxyListener.cs
│   │   │   └── WebProxyClientTests.cs
│   │   ├── Smtp/
│   │   │   ├── Resources/
│   │   │   │   ├── auth-failed.txt
│   │   │   │   ├── auth-required.txt
│   │   │   │   ├── auth-successful.txt
│   │   │   │   ├── auth-too-weak.txt
│   │   │   │   ├── bad-command-sequence.txt
│   │   │   │   ├── comcast-auth-digest-md5-reset.txt
│   │   │   │   ├── comcast-auth-digest-md5-response.txt
│   │   │   │   ├── comcast-auth-digest-md5.txt
│   │   │   │   ├── comcast-auth-login-password.txt
│   │   │   │   ├── comcast-auth-login-username.txt
│   │   │   │   ├── comcast-auth-login.txt
│   │   │   │   ├── comcast-auth-plain.txt
│   │   │   │   ├── comcast-data-done.txt
│   │   │   │   ├── comcast-data.txt
│   │   │   │   ├── comcast-ehlo+binarymime.txt
│   │   │   │   ├── comcast-ehlo+digest-md5.txt
│   │   │   │   ├── comcast-ehlo+dsn.txt
│   │   │   │   ├── comcast-ehlo+pipelining.txt
│   │   │   │   ├── comcast-ehlo+requiretls.txt
│   │   │   │   ├── comcast-ehlo+smtputf8.txt
│   │   │   │   ├── comcast-ehlo+x-exps.txt
│   │   │   │   ├── comcast-ehlo.txt
│   │   │   │   ├── comcast-greeting.txt
│   │   │   │   ├── comcast-mail-from.txt
│   │   │   │   ├── comcast-noop.txt
│   │   │   │   ├── comcast-quit.txt
│   │   │   │   ├── comcast-rcpt-to.txt
│   │   │   │   ├── comcast-rset.txt
│   │   │   │   ├── ehlo-failed.txt
│   │   │   │   ├── greeting-not-ready.txt
│   │   │   │   ├── helo.txt
│   │   │   │   ├── mailbox-unavailable.txt
│   │   │   │   ├── pipelined-mail-from-rcpt-to.txt
│   │   │   │   ├── pipelined-mailbox-unavailable.txt
│   │   │   │   ├── rfc0821-expn.txt
│   │   │   │   └── rfc0821-vrfy.txt
│   │   │   ├── SmtpAuthenticationSecretDetectorTests.cs
│   │   │   ├── SmtpClientTests.cs
│   │   │   ├── SmtpCommandExceptionTests.cs
│   │   │   ├── SmtpDataFilterTests.cs
│   │   │   ├── SmtpProtocolExceptionTests.cs
│   │   │   ├── SmtpReplayStream.cs
│   │   │   └── SmtpStreamTests.cs
│   │   └── SocketUtilsTests.cs
│   ├── ProgressStreamTests.cs
│   ├── ProtocolLoggerTests.cs
│   ├── ReplaceRequestTests.cs
│   ├── Search/
│   │   └── SearchQueryTests.cs
│   ├── Security/
│   │   ├── AuthenticationExceptionTests.cs
│   │   ├── ChannelBindingContext.cs
│   │   ├── Ntlm/
│   │   │   ├── MD4Tests.cs
│   │   │   ├── NtlmAuthenticateMessageTests.cs
│   │   │   ├── NtlmChallengeMessageTests.cs
│   │   │   ├── NtlmNegotiateMessageTests.cs
│   │   │   ├── NtlmSingleHostDataTests.cs
│   │   │   ├── NtlmTargetInfoTests.cs
│   │   │   └── RC4Tests.cs
│   │   ├── SaslExceptionTests.cs
│   │   ├── SaslMechanismAnonymousTests.cs
│   │   ├── SaslMechanismCramMd5Tests.cs
│   │   ├── SaslMechanismDigestMd5Tests.cs
│   │   ├── SaslMechanismLoginTests.cs
│   │   ├── SaslMechanismNtlmTests.cs
│   │   ├── SaslMechanismOAuth2Tests.cs
│   │   ├── SaslMechanismOAuthBearerTests.cs
│   │   ├── SaslMechanismPlainTests.cs
│   │   ├── SaslMechanismScramSha1Tests.cs
│   │   ├── SaslMechanismScramSha256Tests.cs
│   │   ├── SaslMechanismScramSha512Tests.cs
│   │   ├── SaslMechanismTests.cs
│   │   └── SslHandshakeExceptionTests.cs
│   ├── StoreFlagsRequestTests.cs
│   ├── StoreLabelsRequestTests.cs
│   ├── TestHelper.cs
│   ├── UniqueIdMapTests.cs
│   ├── UniqueIdRangeTests.cs
│   ├── UniqueIdSetTests.cs
│   ├── UniqueIdTests.cs
│   ├── UnitTests.csproj
│   └── UriExtensionTests.cs
├── cov-build.bat
├── nuget/
│   ├── GettingStarted.md
│   ├── MailKit.nuspec
│   └── MailKitLite.nuspec
├── rfc/
│   ├── SOCKS4.protocol
│   ├── draft-murchison-sasl-login-00.txt
│   ├── rfc0821.txt
│   ├── rfc1652.txt
│   ├── rfc1730.txt
│   ├── rfc1731.txt
│   ├── rfc1734.txt
│   ├── rfc1854.txt
│   ├── rfc1870.txt
│   ├── rfc1891.txt
│   ├── rfc1928.txt
│   ├── rfc1929.txt
│   ├── rfc1939.txt
│   ├── rfc1961.txt
│   ├── rfc2034.txt
│   ├── rfc2060.txt
│   ├── rfc2086.txt
│   ├── rfc2087.txt
│   ├── rfc2088.txt
│   ├── rfc2177.txt
│   ├── rfc2193.txt
│   ├── rfc2195.txt
│   ├── rfc2197.txt
│   ├── rfc2221.txt
│   ├── rfc2222.txt
│   ├── rfc2245.txt
│   ├── rfc2342.txt
│   ├── rfc2359.txt
│   ├── rfc2449.txt
│   ├── rfc2487.txt
│   ├── rfc2554.txt
│   ├── rfc2595.txt
│   ├── rfc2683.txt
│   ├── rfc2821.txt
│   ├── rfc2831.txt
│   ├── rfc2920.txt
│   ├── rfc2971.txt
│   ├── rfc3030.txt
│   ├── rfc3207.txt
│   ├── rfc3348.txt
│   ├── rfc3461.txt
│   ├── rfc3501.txt
│   ├── rfc3502.txt
│   ├── rfc3516.txt
│   ├── rfc3691.txt
│   ├── rfc4013.txt
│   ├── rfc4314.txt
│   ├── rfc4315.txt
│   ├── rfc4466.txt
│   ├── rfc4469.txt
│   ├── rfc4505.txt
│   ├── rfc4551.txt
│   ├── rfc4616.txt
│   ├── rfc4731.txt
│   ├── rfc4959.txt
│   ├── rfc4978.txt
│   ├── rfc5032.txt
│   ├── rfc5161.txt
│   ├── rfc5162.txt
│   ├── rfc5182.txt
│   ├── rfc5255.txt
│   ├── rfc5256.txt
│   ├── rfc5257.txt
│   ├── rfc5258.txt
│   ├── rfc5259.txt
│   ├── rfc5267.txt
│   ├── rfc5321.txt
│   ├── rfc5464.txt
│   ├── rfc5465.txt
│   ├── rfc5466.txt
│   ├── rfc5530.txt
│   ├── rfc5788.txt
│   ├── rfc5801.txt
│   ├── rfc5802.txt
│   ├── rfc5819.txt
│   ├── rfc5957.txt
│   ├── rfc6154.txt
│   ├── rfc6203.txt
│   ├── rfc6237.txt
│   ├── rfc6531.txt
│   ├── rfc6851.txt
│   ├── rfc6855.txt
│   ├── rfc6856.txt
│   ├── rfc7162.txt
│   ├── rfc7377.txt
│   ├── rfc7628.txt
│   ├── rfc7677.txt
│   ├── rfc7888.txt
│   ├── rfc7889.txt
│   ├── rfc8437.txt
│   ├── rfc8438.txt
│   ├── rfc8440.txt
│   ├── rfc8457.txt
│   ├── rfc8474.txt
│   ├── rfc8508.txt
│   ├── rfc8514.txt
│   ├── rfc8689.txt
│   ├── rfc8970.txt
│   ├── rfc9051.txt
│   ├── rfc9208.txt
│   └── rfc9394.txt
├── samples/
│   ├── ImapClientDemo/
│   │   ├── .gitignore
│   │   ├── ImapClientDemo/
│   │   │   ├── App.config
│   │   │   ├── AuthenticationFailedEventArgs.cs
│   │   │   ├── ClientCommand.cs
│   │   │   ├── ClientCommandPipeline.cs
│   │   │   ├── ClientConnection.cs
│   │   │   ├── ClientConnections.cs
│   │   │   ├── CommandFailedEventArgs.cs
│   │   │   ├── ConnectionFailedEventArgs.cs
│   │   │   ├── CustomTaskScheduler.cs
│   │   │   ├── FolderNameComparer.cs
│   │   │   ├── FolderSelectedEventArgs.cs
│   │   │   ├── FolderTreeView.cs
│   │   │   ├── ImapClientDemo.csproj
│   │   │   ├── LoginWindow.Designer.cs
│   │   │   ├── LoginWindow.cs
│   │   │   ├── LoginWindow.resx
│   │   │   ├── MainWindow.Designer.cs
│   │   │   ├── MainWindow.cs
│   │   │   ├── MainWindow.resx
│   │   │   ├── MessageInfo.cs
│   │   │   ├── MessageList.cs
│   │   │   ├── MessageSelectedEventArgs.cs
│   │   │   ├── MultipartRelatedImageContext.cs
│   │   │   ├── Program.cs
│   │   │   └── Properties/
│   │   │       ├── AssemblyInfo.cs
│   │   │       ├── Resources.Designer.cs
│   │   │       ├── Resources.resx
│   │   │       ├── Settings.Designer.cs
│   │   │       └── Settings.settings
│   │   └── ImapClientDemo.sln
│   ├── ImapClientDemo.Android/
│   │   ├── ImapClientDemo.Android/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── FoldersActivity.cs
│   │   │   ├── ImapClientDemo.Android.csproj
│   │   │   ├── LoginActivity.cs
│   │   │   ├── Mail.cs
│   │   │   ├── MainActivity.cs
│   │   │   ├── MessageListActivity.cs
│   │   │   ├── MessageViewActivity.cs
│   │   │   └── Resources/
│   │   │       ├── AboutResources.txt
│   │   │       ├── Resource.designer.cs
│   │   │       ├── layout/
│   │   │       │   ├── FoldersLayout.xml
│   │   │       │   ├── LoginLayout.xml
│   │   │       │   ├── Main.xml
│   │   │       │   ├── MessageListItemLayout.xml
│   │   │       │   ├── MessagesLayout.xml
│   │   │       │   └── ViewMessageLayout.xml
│   │   │       ├── mipmap-anydpi-v26/
│   │   │       │   ├── appicon.xml
│   │   │       │   └── appicon_round.xml
│   │   │       └── values/
│   │   │           ├── Strings.xml
│   │   │           └── themes.xml
│   │   └── ImapClientDemo.Android.sln
│   ├── ImapClientDemo.iOS/
│   │   ├── ImapClientDemo.iOS/
│   │   │   ├── AppDelegate.cs
│   │   │   ├── Assets.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Entitlements.plist
│   │   │   ├── FoldersViewController.cs
│   │   │   ├── ImapClientDemo.iOS.csproj
│   │   │   ├── Info.plist
│   │   │   ├── LaunchScreen.storyboard
│   │   │   ├── LoginViewController.cs
│   │   │   ├── Mail.cs
│   │   │   ├── Main.cs
│   │   │   ├── MessageListViewController.cs
│   │   │   ├── MessageViewController.cs
│   │   │   ├── MultipartRelatedUrlCache.cs
│   │   │   ├── Resources/
│   │   │   │   └── LaunchScreen.xib
│   │   │   └── SceneDelegate.cs
│   │   └── ImapClientDemo.iOS.sln
│   └── ImapIdle/
│       ├── .gitignore
│       ├── ImapIdle/
│       │   ├── IdleClient.cs
│       │   ├── ImapIdle.csproj
│       │   └── Program.cs
│       └── ImapIdle.sln
└── scripts/
    ├── coveralls.ps1
    ├── test-aot-compatibility.ps1
    ├── test.ps1
    └── update-version.ps1

================================================
FILE CONTENTS
================================================

================================================
FILE: .config/dotnet-tools.json
================================================
{
  "version": 1,
  "isRoot": true,
  "tools": {
    "altcover.global": {
      "version": "9.0.102",
      "commands": [
        "altcover"
      ],
      "rollForward": false
    },
    "coveralls.net": {
      "version": "4.0.1",
      "commands": [
        "csmacnz.Coveralls"
      ],
      "rollForward": false
    },
    "nunit.consolerunner.netcore": {
      "version": "3.22.0",
      "commands": [
        "nunit"
      ],
      "rollForward": false
    }
  }
}

================================================
FILE: .editorconfig
================================================
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true

# C# files
[*.cs]

#### Core EditorConfig Options ####

# Indentation and spacing
indent_size = 4
indent_style = tab
tab_width = 4

# New line preferences
end_of_line = crlf
insert_final_newline = true

#### .NET Coding Conventions ####

# Organize usings
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true
file_header_template = unset

# this. and Me. preferences
dotnet_style_qualification_for_event = false:silent
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_property = false:silent

# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent

# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent

# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent

# Expression-level preferences
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_object_initializer = true:suggestion
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion

# Field preferences
dotnet_style_readonly_field = true:suggestion

# Parameter preferences
dotnet_code_quality_unused_parameters = all:suggestion

#### C# Coding Conventions ####

# var preferences
csharp_style_var_elsewhere = false:silent
csharp_style_var_for_built_in_types = false:silent
csharp_style_var_when_type_is_apparent = false:silent

# Expression-bodied members
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent

# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_prefer_switch_expression = true:suggestion

# Null-checking preferences
csharp_style_conditional_delegate_call = true:suggestion

# Modifier preferences
csharp_prefer_static_local_function = true:suggestion
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent

# Code-block preferences
csharp_prefer_braces = true:silent
csharp_prefer_simple_using_statement = true:suggestion

# Expression-level preferences
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent

# 'using' directive preferences
csharp_using_directive_placement = outside_namespace:silent

#### C# Formatting Rules ####

# New line preferences
csharp_new_line_before_catch = false
csharp_new_line_before_else = false
csharp_new_line_before_finally = false
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = methods,types
csharp_new_line_between_query_expression_clauses = true

# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = false

# Space preferences
csharp_space_after_cast = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = true
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = true
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false

# Wrapping preferences
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true

#### Naming styles ####

# Naming rules

dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i

dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case

dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case

# Symbol specifications

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers = 

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers = 

dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers = 

# Naming styles

dotnet_naming_style.pascal_case.required_prefix = 
dotnet_naming_style.pascal_case.required_suffix = 
dotnet_naming_style.pascal_case.word_separator = 
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix = 
dotnet_naming_style.begins_with_i.word_separator = 
dotnet_naming_style.begins_with_i.capitalization = pascal_case


================================================
FILE: .gitattributes
================================================
*.csproj text
*.nuspec text
*.sln eol=crlf
*.msg text
*.txt text
*.yml text
*.cs text
*.md text


================================================
FILE: .github/FUNDING.yml
================================================
github: jstedfast


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve

---

**Describe the bug**
A clear and concise description of what the bug is.

**Platform (please complete the following information):**
 - OS: [e.g. Windows, Linux, MacOS, iOS, Android, Windows Phone, etc.]
 - .NET Runtime: [e.g. CoreCLR, Mono]
 - .NET Framework: [e.g. .Net Core, .NET 4.5, UWP, etc.]
 - MailKit Version: 

**Exception**
If you got an exception, please include the exception Message *and* StackTrace.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Code Snippets**
If applicable, add code snippets to help explain your problem.

```csharp
// Add your code snippet here.
```

**Protocol Logs**
Please include a protocol log (scrubbed of any authentication data), especially
if you got an exception such as `Syntax error in XYZ. Unexpected token: ...`.

To get a protocol log, follow one of the following code snippets:

```csharp
// log to a file called 'imap.log'
var client = new ImapClient (new ProtocolLogger ("imap.log"));
```

```csharp
// log to a file called 'pop3.log'
var client = new Pop3Client (new ProtocolLogger ("pop3.log"));
```

```csharp
// log to a file called 'smtp.log'
var client = new SmtpClient (new ProtocolLogger ("smtp.log"));
```

Note: if the protocol log contains sensitive information, feel free to email it to me at
jestedfa@microsoft.com instead of including it in the GitHub issue.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/dependabot.yml
================================================
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
  - package-ecosystem: "nuget"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
      time: "08:00"
      timezone: "America/New_York"


================================================
FILE: .github/workflows/aot-compatibility.yml
================================================
name: AOT Compatibility

on:
  push:
    branches: [ 'master' ]
    paths-ignore:
    - '**.md'
  pull_request:
    branches: [ 'master' ]
    paths-ignore:
    - '**.md'

jobs:
  aot-test:
    strategy:
      fail-fast: false  # ensures the entire test matrix is run, even if one permutation fails
      matrix:
        os: [ windows-latest ]
        mailkitlite: [ true ]

    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0 # fetching all
        submodules: true

    - name: Setup dotnet
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: 8.0.x

    - name: publish AOT testApp, assert static analysis warning count, and run the app
      shell: pwsh
      run: .\scripts\test-aot-compatibility.ps1 ${{ matrix.mailkitlite }}


================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
  schedule:
    - cron: '38 12 * * 1'

jobs:
  analyze:
    name: Analyze
    # Runner size impacts CodeQL analysis time. To learn more, please see:
    #   - https://gh.io/recommended-hardware-resources-for-running-codeql
    #   - https://gh.io/supported-runners-and-hardware-resources
    #   - https://gh.io/using-larger-runners
    # Consider using larger runners for possible analysis time improvements.
    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
    timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'csharp' ]

    steps:
    - name: Setup/Install the .NET 8 SDK
      uses: actions/setup-dotnet@v4
      with:
          dotnet-version: 8.0.x
    
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
          token: ${{ secrets.GITHUB_TOKEN }}
          submodules: recursive
          fetch-depth: 0

    - name: Run .NET restore
      shell: pwsh
      run: |
          dotnet restore MailKit.sln

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.

        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality

    - name: Build
      continue-on-error: false
      shell: pwsh
      run: |
          dotnet msbuild MailKit.sln -property:Platform="Any CPU" -property:Configuration=Release

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
      with:
        category: "/language:${{matrix.language}}"


================================================
FILE: .github/workflows/main.yml
================================================
name: Build

on: [push, pull_request, workflow_dispatch]

jobs:
  ci:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ windows-latest, ubuntu-latest ]
        build-configuration: [ Debug, Release ]
    outputs:
      latest-version: ${{ steps.semantic_version.outputs.version_num }}
    environment: ci
    env:
      SOLUTION_PATH: MailKit.sln
      BUILD_PLATFORM: Any CPU
      BUILD_CONFIGURATION: ${{ matrix.build-configuration }}
      GENERATE_CODE_COVERAGE: ${{ matrix.os == 'windows-latest' && matrix.build-configuration == 'Debug' }}
      MONO_RUNTIME: ${{ matrix.os != 'windows-latest' }}
      PUBLISH: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.os == 'windows-latest' && matrix.build-configuration == 'Release' }}

    steps:
      - name: Setup/Install the .NET 8 SDK
        id: install-netsdk8
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: 8.0.x

      - name: Setup/Install the .NET 10 SDK
        id: install-netsdk
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: 10.0.x

      - if: runner.os == 'Windows'
        name: Setup MSBuild
        id: setup_msbuild
        uses: microsoft/setup-msbuild@v2

      - name: Checkout repository
        id: checkout_repo
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          submodules: recursive
          fetch-depth: 0

      - name: Get semantic version from csproj
        id: semantic_version
        shell: pwsh
        run: |
          $xml = [xml](gc MailKit/MailKit.csproj)
          $SEMANTIC_VERSION_NUMBER = $xml.Project.PropertyGroup.VersionPrefix
          $VERSION_NUM = $SEMANTIC_VERSION_NUMBER[0].Trim()
          Write-Host "version_num=${VERSION_NUM}"
          [IO.File]::AppendAllText($env:GITHUB_OUTPUT, "version_num=${VERSION_NUM}$([Environment]::NewLine)")

      - if: ${{ env.PUBLISH == 'true' }}
        name: Get latest tag
        id: get_latest_tag
        shell: pwsh
        run: |
          $LATEST_TAG = git -c 'versionsort.suffix=-' ls-remote --exit-code --refs --sort='version:refname' --tags "https://github.com/$env:GIT_URL.git" '*.*.*' | tail --lines=1 | cut --delimiter='/' --fields=3
          Write-Host "tag=$LATEST_TAG"
          [IO.File]::AppendAllText($env:GITHUB_OUTPUT, "tag=${LATEST_TAG}$([Environment]::NewLine)")
        env:
          GIT_URL: ${{ github.repository }}

      - if: ${{ env.PUBLISH == 'true' && steps.semantic_version.outputs.version_num != steps.get_latest_tag.outputs.tag }}
        name: Add new tag to repo
        id: add_new_tag_to_repo
        continue-on-error: true
        shell: pwsh
        run: |
          git config --global user.name $env:GIT_USER_NAME
          git config --global user.email $env:GIT_USER_EMAIL
          git tag -a -m "Tagged for $env:NEW_VERSION_NUM" $env:NEW_VERSION_NUM
          git push --follow-tags
        env:
          GIT_USER_NAME: ${{ github.event.head_commit.author.username }}
          GIT_USER_EMAIL: ${{ github.event.head_commit.author.email }}
          NEW_VERSION_NUM: ${{ steps.semantic_version.outputs.version_num }}

      - name: Run .NET restore
        shell: pwsh
        run: |
          dotnet restore $env:SOLUTION_PATH

      - name: Run .NET tool restore
        shell: pwsh
        run: |
          dotnet tool restore

      - name: Build solution
        id: build_solution
        continue-on-error: true
        shell: pwsh
        run: |
          dotnet msbuild $env:SOLUTION_PATH -property:Platform=$env:BUILD_PLATFORM -property:Configuration=$env:BUILD_CONFIGURATION -property:MonoRuntime=$env:MONO_RUNTIME

      - name: Run unit tests
        id: run_unit_tests
        continue-on-error: true
        shell: pwsh
        run: |
          & ./scripts/test.ps1 -Configuration:$env:BUILD_CONFIGURATION -GenerateCodeCoverage:$env:GENERATE_CODE_COVERAGE

      - name: Upload unit test results
        id: upload_test_results
        continue-on-error: true
        uses: actions/upload-artifact@v4
        with:
          name: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}-${{ matrix.os }}-${{ matrix.build-configuration }}-TestResults.xml
          path: TestResult.xml

      - if: ${{ env.GENERATE_CODE_COVERAGE == 'true' }}
        name: Upload code coverage data to coveralls.io
        id: upload_to_coveralls
        shell: pwsh
        run: |
          & ./scripts/coveralls.ps1
        env:
          COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
          GIT_COMMIT_SHA: ${{ github.sha }}
          GIT_REF: ${{ github.ref }}
          GIT_ACTOR: ${{ github.event.head_commit.author.username }}
          GIT_ACTOR_EMAIL: ${{ github.event.head_commit.author.email }}
          GIT_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
          COVERALLS_JOB_ID: ${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}

      - if: ${{ env.PUBLISH == 'true' }}
        name: Create NuGet package
        id: create_nuget_package
        shell: pwsh
        run: |
          nuget pack nuget/MailKit.nuspec -Version "$env:LATEST_VERSION.$env:GITHUB_RUN_NUMBER"
        env:
          LATEST_VERSION: ${{ steps.semantic_version.outputs.version_num }}

      - if: ${{ env.PUBLISH == 'true' }}
        name: Push NuGet package to MyGet
        id: push_nuget_package
        shell: pwsh
        run: |
          nuget push $env:NUGET_PKG_PATH -ApiKey $env:MYGET_API_KEY -Source https://www.myget.org/F/mimekit/api/v3/index.json
        env:
          NUGET_PKG_PATH: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}.nupkg
          MYGET_API_KEY: ${{ secrets.MYGET_API_KEY }}

      - if: ${{ env.PUBLISH == 'true' }}
        name: Upload NuGet package as artifact
        id: upload_nuget_package
        uses: actions/upload-artifact@v4
        with:
          name: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}.nupkg
          path: MailKit.${{ steps.semantic_version.outputs.version_num }}.${{ github.run_number }}.nupkg

# Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)


================================================
FILE: .gitignore
================================================
MailKit/Resources/Resource.designer.cs
*.csproj.nuget.dgspec.json
*.csproj.nuget.cache
*project.lock.json
*.userprefs
*.user
*.suo
*~
test-results
packages
obj
bin
.vs
*.patch
*.tree
*.zip
.idea
.DS_Store


================================================
FILE: .gitmodules
================================================
[submodule "submodules/MimeKit"]
	path = submodules/MimeKit
	url = https://github.com/jstedfast/MimeKit.git


================================================
FILE: AotCompatibility/AotCompatibility.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
    <TrimmerSingleWarn>false</TrimmerSingleWarn>
    <SelfContained>true</SelfContained>
    <InvariantGlobalization>true</InvariantGlobalization>
    <UseMailKitLite Condition=" '$(UseMailKitLite)' == '' ">false</UseMailKitLite>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\MailKit\MailKit.csproj" Condition=" '$(UseMailKitLite)' == 'false' " />
    <ProjectReference Include="..\submodules\MimeKit\MimeKit.csproj" Condition=" '$(UseMailKitLite)' == 'false' " />
    <TrimmerRootAssembly Include="MailKit" Path="..\MailKit\MailKit.csproj" Condition=" '$(UseMailKitLite)' == 'false' " />
    <TrimmerRootAssembly Include="MimeKit" Path="..\submodules\MimeKit\MimeKit.csproj" Condition=" '$(UseMailKitLite)' == 'false' " />

    <ProjectReference Include="..\MailKit\MailKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
    <ProjectReference Include="..\submodules\MimeKit\MimeKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
    <TrimmerRootAssembly Include="MailKitLite" Path="..\MailKit\MailKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
    <TrimmerRootAssembly Include="MimeKitLite" Path="..\submodules\MimeKit\MimeKitLite.csproj" Condition=" '$(UseMailKitLite)' == 'true' " />
  </ItemGroup>

</Project>


================================================
FILE: AotCompatibility/Program.cs
================================================
//
// Program.cs
//
// Author: Jeffrey Stedfast <jestedfa@microsoft.com>
//
// Copyright (c) 2013-2024 .NET Foundation and Contributors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//

using System.Text;

using MimeKit;
using MailKit;
using MailKit.Net;
using MailKit.Net.Imap;
using MailKit.Net.Pop3;
using MailKit.Net.Smtp;

namespace AotCompatibility {
    class Program
    {
        static int Main (string[] args)
        {
            try {
                Encoding.RegisterProvider (CodePagesEncodingProvider.Instance);

                var message = new MimeMessage ();

                using (var imap = new ImapClient ()) {}
                using (var pop3 = new Pop3Client ()) {}
                using (var smtp = new SmtpClient ()) {}

                return 0;
            } catch (Exception ex) {
                Console.WriteLine (ex);
                return -1;
            }
        }
    }
}

================================================
FILE: Documentation/Content/Creating-Messages.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Creating-Messages" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <para>MimeKit provides a number of ways to create messages.</para>
      <autoOutline />
    </introduction>

    <section address="CreatingSimpleMessage">
      <title>Creating a Simple Message</title>
      <content>
        <para>
          Creating MIME messages using MimeKit is really trivial.
        </para>
        <code language="c#" source="Examples\CreateSimpleMessage.cs"/>
        <para>
          A <codeEntityReference>T:MimeKit.TextPart</codeEntityReference> is a leaf-node
          MIME part with a text media-type. The first argument to the TextPart constructor
          specifies the media-subtype, in this case, <literal>plain</literal>. Another
          media subtype you are probably familiar with is the <literal>html</literal>
          subtype. Some other examples include <literal>enriched</literal>,
          <literal>rtf</literal>, and <literal>xml</literal>.
        </para>
        <para>
          The <codeEntityReference>P:MimeKit.TextPart.Text</codeEntityReference> property
          is the easiest way to both get and set the string content of the MIME part.
        </para>
      </content>
    </section>

    <section address="CreateMessageWithAttachments">
      <title>Creating a Message with Attachments</title>
      <content>
        <para>
          Attachments are just like any other
          <codeEntityReference>T:MimeKit.MimePart</codeEntityReference>, the only difference
          is that they typically have a <literal>Content-Disposition</literal> header with a
          value of <literal>attachment</literal> instead of <literal>inline</literal> or no
          <literal>Content-Disposition</literal> header at all.
        </para>
        <code language="c#" source="Examples\CreateMultipartMixed.cs"/>
        <para>
          Of course, that is just a simple example. A lot of modern mail clients such as Outlook
          or Thunderbird will send out both a <literal>text/html</literal> and a
          <literal>text/plain</literal> version of the message text. To do this, you'd create a
          <codeEntityReference>T:MimeKit.TextPart</codeEntityReference> for each part and then
          add them to a <literal>multipart/alternative</literal> like so:
        </para>
        <code language="c#" source="Examples\CreateMultipartAlternative.cs"/>
      </content>
    </section>

    <section address="UsingBodyBuilder">
      <title>Using a BodyBuilder</title>
      <content>
        <para>
          If you are used to <codeEntityReference>N:System.Net.Mail</codeEntityReference>'s API
          for creating messages, you will probably find using a
          <codeEntityReference>T:MimeKit.BodyBuilder</codeEntityReference> much more friendly
          than manually creating the tree of MIME parts. Here's how you could create a message
          body using a <codeEntityReference>T:MimeKit.BodyBuilder</codeEntityReference>:
        </para>
        <code language="c#" source="Examples\BodyBuilder.cs" region="Complex"/>
      </content>
    </section>

    <section address="SystemNetMail">
      <title>Importing from System.Net.Mail</title>
      <content>
        <para>
          To make things even simpler still, MimeKit allows you to explicitly cast
          a <codeEntityReference>T:System.Net.Mail.MailMessage</codeEntityReference>
          to a <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>.
        </para>
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Parsing-Messages"/>
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Frequently-Asked-Questions.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Frequently-Asked-Questions" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <autoOutline />
    </introduction>

    <section address="CompletelyFree">
      <title>Are MimeKit and MailKit completely free? Can I use them in my proprietary product(s)?</title>
      <content>
        <para>
          Yes. MimeKit and MailKit are both completely free and open source. They are both covered under
          the
          <externalLink>
            <linkText>MIT</linkText>
            <linkUri>https://opensource.org/licenses/MIT</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> license.
        </para>
      </content>
    </section>

    <section address="CodePages">
      <title>Why do I get "NotSupportedException: No data is available for encoding ######."?</title>
      <content>
        <para>
          In .NET Core, Microsoft decided to split out the non-Unicode text encodings into a separate NuGet package called
          <externalLink>
            <linkText>System.Text.Encoding.CodePages</linkText>
              <linkUri>https://www.nuget.org/packages/System.Text.Encoding.CodePages</linkUri>
              <linkTarget>_blank</linkTarget>
            </externalLink>.
          </para>
          <para>
            MimeKit already pulls in a reference to this NuGet package, so you shouldn't need to add a reference to it in
            your project. That said, you will still need to register the encoding provider. It is recommended that you add
            the following line of code to your program initialization (e.g. the beginning of your program's Main() method):
          </para>
          <code language="c#">
            System.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);
          </code>
      </content>
    </section>

    <section address="GarbledText">
      <title>Why does text show up garbled in my ASP.NET Core / .NET Core / .NET 5+ app?</title>
      <content>
        <para>
          .NET Core (and ASP.NET Core by extension) and .NET 5 (and later) only provide the Unicode encodings, ASCII and ISO-8859-1 by default.
          Other text encodings are not available to your application unless your application
          <externalLink>
            <linkText>registers</linkText>
            <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.registerprovider?view=net-5.0</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> the encoding
          provider that provides all of the additional encodings.
        </para>
        <para>
          First, add a package reference for the
          <externalLink>
            <linkText>System.Text.Encoding.CodePages</linkText>
            <linkUri>https://www.nuget.org/packages/System.Text.Encoding.CodePages</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> nuget package to your project and then register the additional text encodings using the following code snippet:
        </para>
        <code language="c#">
          System.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);
        </code>
        <para>
          Note: The above code snippet should be safe to call in .NET Framework versions >= 4.6 as well.
        </para>
      </content>
    </section>

    <section address="TypeLoadException">
      <title>Why do I get a TypeLoadException when I try to create a new MimeMessage?</title>
      <content>
        <para>
          This only seems to happen in cases where the application is built for .NET Framework (v4.x) and seems to be most
          common for ASP.NET web applications that were built using Visual Studio 2019 (it is unclear whether this happens
          with Visual Studio 2022 as well).
        </para>
        <para>
          The issue is that some (older?) versions of MSBuild do not correctly generate <literal>*.dll.config</literal>,
          <literal>app.config</literal> and/or <literal>web.config</literal> files with proper assembly version binding
          redirects.
        </para>
        <para>
          If this problem is happening to you, make sure to use MimeKit and MailKit >= v4.0 which include <literal>MimeKit.dll.config</literal>
          and <literal>MailKit.dll.config</literal>.
        </para>
        <para>
          The next step is to manually edit your application's <literal>app.config</literal> (or <literal>web.config</literal>) to add a
          binding redirect for <literal>System.Runtime.CompilerServices.Unsafe</literal>:
        </para>
        <code language="xml">
          &lt;configuration&gt;
            &lt;runtime&gt;
              &lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt;
                &lt;dependentAssembly&gt;
                  &lt;assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/&gt;
                  &lt;bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /&gt;
                &lt;/dependentAssembly&gt;
              &lt;/assemblyBinding&gt;
            &lt;/runtime&gt;
          &lt;/configuration&gt;
        </code>
      </content>
    </section>

    <section address="SslHandshakeException">
      <title>Why do I get "An error occurred while attempting to establish an SSL or TLS connection." when I try to Connect?</title>
      <content>
        <para>
          When you get an exception with that error message, it usually means that you are encountering
          one of the following scenarios:
        </para>
        <list class="ordered">
          <listItem>
            <para>The mail server does not support SSL on the specified port.</para>
            <para>
              There are 2 different ways to use SSL/TLS encryption with mail servers.
            </para>
            <para>
              The first way is to enable SSL/TLS encryption immediately upon connecting to the
              SMTP, POP3 or IMAP server. This method requires an "SSL port" because the standard
              port defined for the protocol is meant for plain-text communication.
            </para>
            <para>
              The second way is via a <literal>STARTTLS</literal> command (aka <literal>STLS</literal> for POP3) that is
              <legacyItalic>optionally</legacyItalic> supported by the server.
            </para>
            <para>
              Below is a table of the protocols supported by MailKit and the standard plain-text ports
              (which either do not support any SSL/TLS encryption at all or only via the <literal>STARTTLS</literal>
              command extension) and the SSL ports which require SSL/TLS encryption immediately upon a
              successful connection to the remote host.
            </para>
            <table>
              <tableHeader>
                <row>
                  <entry>
                    <para>Protocol</para>
                  </entry>
                  <entry>
                    <para>Standard Port</para>
                  </entry>
                  <entry>
                    <para>SSL Port</para>
                  </entry>
                </row>
              </tableHeader>
              <row>
                <entry>
                  <para>SMTP</para>
                </entry>
                <entry>
                  <para>25 or 587</para>
                </entry>
                <entry>
                  <para>465</para>
                </entry>
              </row>
              <row>
                <entry>
                  <para>POP3</para>
                </entry>
                <entry>
                  <para>110</para>
                </entry>
                <entry>
                  <para>995</para>
                </entry>
              </row>
              <row>
                <entry>
                  <para>IMAP</para>
                </entry>
                <entry>
                  <para>143</para>
                </entry>
                <entry>
                  <para>993</para>
                </entry>
              </row>
            </table>
            <para>
              It is important to use the correct <codeEntityReference>T:MailKit.Security.SecureSocketOptions</codeEntityReference> for
              the port that you are connecting to.
            </para>
            <para>
              If you are connecting to one of the standard ports above, you will need to use <literal>SecureSocketOptions.None</literal>,
              <literal>SecureSocketOptions.StartTls</literal> or <literal>SecureSocketOptions.StartTlsWhenAvailable</literal>.
            </para>
            <para>
              If you are connecting to one of the SSL ports, you will need to use <literal>SecureSocketOptions.SslOnConnect</literal>.
            </para>
            <para>
              You could also try using <literal>SecureSocketOptions.Auto</literal> which works by choosing the appropriate option to use
              by comparing the specified port to the ports in the above table.
            </para>
          </listItem>
          <listItem>
            <para>The mail server that you are connecting to is using an expired (or otherwise untrusted) SSL certificate.</para>
            <para>
              Often times, mail servers will use self-signed certificates instead of using a certificate that
              has been signed by a trusted Certificate Authority. Another potential pitfall is when locally
              installed anti-virus software replaces the certificate in order to scan web traffic for viruses.
            </para>
            <para>
              When your system is unable to validate the mail server's certificate because it is not signed
              by a known and trusted Certificate Authority, the above error will occur.
            </para>
            <para>
              You can work around this problem by supplying a custom
              <externalLink>
                <linkText>RemoteServerCertificateValidationCallback</linkText>
                <linkUri>https://msdn.microsoft.com/en-us/library/ms145054</linkUri>
                <linkTarget>_blank</linkTarget>
              </externalLink>
              and setting it on the client's <codeEntityReference>P:MailKit.MailService.ServerCertificateValidationCallback</codeEntityReference>
              property.
            </para>
            <para>
              In the simplest example, you could do something like this (although I would strongly recommend against it in
              production use):
            </para>
            <code language="c#">
              using (var client = new SmtpClient ()) {
                  client.ServerCertificateValidationCallback = (s,c,h,e) => true;

                  client.Connect (hostName, port, SecureSocketOptions.Auto);

                  // ...
              }
            </code>
            <para>
              A better solution might be to compare the certificate's common name, issuer, serial number, and fingerprint
              to known values to make sure that the certificate can be trusted. Take the following code snippet as an
              example of how to do this:
            </para>
            <code language="c#">
              bool MyServerCertificateValidationCallback (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
              {
                  if (sslPolicyErrors == SslPolicyErrors.None)
                      return true;

                  // Note: The following code casts to an X509Certificate2 because it's easier to get the
                  // values for comparison, but it's possible to get them from an X509Certificate as well.
                  if (certificate is X509Certificate2 certificate2) {
                      var cn = certificate2.GetNameInfo (X509NameType.SimpleName, false);
                      var fingerprint = certificate2.Thumbprint;
                      var serial = certificate2.SerialNumber;
                      var issuer = certificate2.Issuer;

                      return cn == "imap.gmail.com" &amp;&amp; issuer == "CN=GTS CA 1O1, O=Google Trust Services, C=US" &amp;&amp;
                          serial == "00BABE95B167C9ECAF08000000006065B6" &amp;&amp;
                          fingerprint == "E79A011EF55EEC72D2B7E391D193761372796836";
                  }

                  return false;
              }
            </code>
            <para>
              The downside of the above example is that it requires hard-coding known values for "trusted" mail server
              certificates which can quickly become unwieldy to deal with if your program is meant to be used with
              a wide range of mail servers.
            </para>
            <para>
              The best approach would be to prompt the user with a dialog explaining that the certificate is
              not trusted for the reasons enumerated by the
              <externalLink>
                <linkText>SslPolicyErrors</linkText>
                <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslpolicyerrors?view=netframework-4.8</linkUri>
                <linkTarget>_blank</linkTarget>
              </externalLink>
              argument as well as potentially the errors provided in the
              <externalLink>
                <linkText>X509Chain</linkText>
                <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.x509chain?view=netframework-4.8</linkUri>
                <linkTarget>_blank</linkTarget>
              </externalLink>
              If the user wishes to accept the risks of trusting the certificate, your program could then <literal>return true</literal>.
            </para>
            <para>
              For more details on writing a custom SSL certificate validation callback, it may be worth checking out the
              <externalLink>
                <linkText>SslCertificateValidation.cs</linkText>
                <linkUri>https://github.com/jstedfast/MailKit/blob/master/Documentation/Examples/SslCertificateValidation.cs</linkUri>
                <linkTarget>_blank</linkTarget>
              </externalLink>
              example.
            </para>
          </listItem>
          <listItem>
            <para>A Certificate Authority CRL server for one or more of the certificates in the chain is temporarily unavailable.</para>
            <para>
              Most Certificate Authorities are probably pretty good at keeping their CRL and/or OCSP servers up 24/7, but occasionally
              they <legacyItalic>do</legacyItalic> go down or are otherwise unreachable due to other network problems between you and the
              server. When this happens, it becomes impossible to check the revocation status of one or more of the certificates in the chain.
            </para>
            <para>
              To ignore revocation checks, you can set the
              <codeEntityReference>P:MailKit.MailService.CheckCertificateRevocation</codeEntityReference>
              property of the IMAP, POP3 or SMTP client to <literal>false</literal> before you connect:
            </para>
            <code language="c#">
              using (var client = new SmtpClient ()) {
                  client.CheckCertificateRevocation = false;

                  client.Connect (hostName, port, SecureSocketOptions.Auto);

                  // ...
              }
            </code>
          </listItem>
          <listItem>
            <para>The server does not support the same set of SSL/TLS protocols that the client is configured to use.</para>
            <para>
              MailKit attempts to keep up with the latest security recommendations and so is continuously removing older SSL and TLS
              protocols that are no longer considered secure from the default configuration. This often means that MailKit's SMTP,
              POP3 and IMAP clients will fail to connect to servers that are still using older SSL and TLS protocols. Currently,
              the SSL and TLS protocols that are not supported by default are: SSL v2.0, SSL v3.0, TLS v1.0 and TLS v1.1.
            </para>
            <para>
              You can override MailKit's default set of supported
              <externalLink>
                <linkText>SSL and TLS protocols</linkText>
                <linkUri>https://docs.microsoft.com/en-us/dotnet/api/system.security.authentication.sslprotocols?view=netframework-4.8</linkUri>
                <linkTarget>_blank</linkTarget>
              </externalLink>
              by setting the value of the <codeEntityReference>P:MailKit.MailService.SslProtocols</codeEntityReference>
              property on your SMTP, POP3 or IMAP client.
            </para>
            <para>For example:</para>
            <code language="c#">
              using (var client = new SmtpClient ()) {
                  // Allow SSLv3.0 and all versions of TLS
                  client.SslProtocols = SslProtocols.Ssl3 | SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;

                  client.Connect ("smtp.gmail.com", 465, true);

                  // ...
              }
            </code>
          </listItem>
        </list>
      </content>
    </section>

    <section address="ProtocolLog">
      <title>How do I debug SMTP, POP3 and/or IMAP errors?</title>
      <content>
        <para>
          All of MailKit's client implementations have a constructor that takes a nifty
          <codeEntityReference>T:MailKit.IProtocolLogger</codeEntityReference> interface for logging client/server communications.
          Out of the box, you can use the handy <codeEntityReference>T:MailKit.ProtocolLogger</codeEntityReference> class. Here are
          some examples of how to use it:
        </para>
        <code language="c#">
          // log to a file called 'imap.log'
          var client = new ImapClient (new ProtocolLogger ("imap.log"));

          // log to standard output (i.e. the console)
          var client = new ImapClient (new ProtocolLogger (Console.OpenStandardOutput ()));
        </code>
        <para>
          Note: When submitting a protocol log as part of a bug report, make sure to scrub any sensitive
          information including your authentication credentials. This information will generally be the base64
          encoded blob immediately following an <literal>AUTHENTICATE</literal> or <literal>AUTH</literal> command
          (depending on the type of server) or the cleartext username and password strings in a <literal>LOGIN</literal> command.
          The only exception to this case is if you are authenticating with <literal>NTLM</literal> in which case I may need this
          information, but only if the bug/error is in the authentication step.
        </para>
      </content>
    </section>
    
    <section address="GMailHiddenMessages">
      <title>Why doesn't MailKit find some of my GMail POP3 or IMAP messages?</title>
      <content>
        <para>
          By default, GMail's POP3 and IMAP server does not behave like standard POP3 or IMAP servers
          and hides messages from clients using those protocols (as well as having other non-standard
          behavior).
        </para>
        <para>
          If you want to configure your GMail POP3 settings to behave the way POP3 is intended to behave,
          you'll need to log in to your GMail account via your web browser and navigate to the
          <application>Forwarding and POP/IMAP</application> tab of your
          <application>GMail Settings</application> page and make the following changes in the
          <application>POP3 Download</application> section:
        </para>
        <list class="ordered">
          <listItem>
            <para>
              <application>Enable POP for all mail (even if it has already been downloaded)</application>.
            </para>
          </listItem>
          <listItem>
            <para>
              When messages are accessed with POP, <application>keep GMail's copy in the Inbox</application>.
            </para>
          </listItem>
        </list>
      </content>
    </section>
    
    <section address="GMailAccess">
      <title>How do I access GMail using MailKit?</title>
      <content>
        <para>
          As of September 30th, 2024, authentication using only a username and password is
          <externalLink>
            <linkText>no longer supported by Google</linkText>
            <linkUri>https://support.google.com/accounts/answer/6010255?hl=en</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>.
        </para>
        <para>
          There are now only 2 options to choose from:
        </para>
        <list class="ordered">
          <listItem>
            <para>
              Use OAuth 2.0 to authenticate with GMail. This is the recommended approach.
            </para>
          </listItem>
          <listItem>
            <para>
              Use an App Password to authenticate with GMail. This is a less secure option and is not recommended.
              It is only available for accounts that have 2-Step Verification enabled.
            </para>
          </listItem>
        </list>
        <para>
          To use an App password, you will first need to
          <externalLink>
            <linkText>turn on 2-Step Verification</linkText>
            <linkUri>https://support.google.com/accounts/answer/185839</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>.
          Once 2-Step Verification is turned on, you can
          <externalLink>
            <linkText>generate an App password</linkText>
            <linkUri>https://myaccount.google.com/apppasswords</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>.
        </para>
        <para>
          Then, assuming that your GMail account is <literal>user@gmail.com</literal>, you would use the following
          code snippet to connect to GMail via IMAP:
        </para>
        <code language="c#">
using (var client = new ImapClient ()) {
    client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
    client.Authenticate ("user@gmail.com", "app-specific-password");
    
    // do stuff...
    
    client.Disconnect (true);
}
        </code>
        <para>
          Connecting via POP3 or SMTP is identical except for the host names and ports (and, of course, you'd
          use a <literal>Pop3Client</literal> or <literal>SmtpClient</literal> as appropriate).
        </para>
      </content>
    </section>

    <section address="GMailOAuth2">
      <title>How can I log in to a GMail account using OAuth 2.0?</title>
      <content>
        <para>
          The first thing you need to do is follow
          <externalLink>
            <linkText>Google's instructions</linkText>
            <linkUri>https://developers.google.com/accounts/docs/OAuth2</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>
          for obtaining OAuth 2.0 credentials for your application.
        </para>
        <para>
          Or, as an alternative set of step-by-step instructions, you can follow the directions that
          <externalLink>
            <linkText>I have written</linkText>
            <linkUri>https://github.com/jstedfast/MailKit/blob/master/GMailOAuth2.md</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> (complete with screenshots).
        </para>
        <para>
          Once you've done that, the easiest way to obtain an access token is to use Google's 
          <externalLink>
            <linkText>Google.Apis.Auth</linkText>
            <linkUri>https://www.nuget.org/packages/Google.Apis.Auth/</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> library:
        </para>
        <code language="c#">
const string GMailAccount = "username@gmail.com";

var clientSecrets = new ClientSecrets {
    ClientId = "XXX.apps.googleusercontent.com",
    ClientSecret = "XXX"
};

var codeFlow = new GoogleAuthorizationCodeFlow (new GoogleAuthorizationCodeFlow.Initializer {
    // Cache tokens in ~/.local/share/google-filedatastore/CredentialCacheFolder on Linux/Mac
    DataStore = new FileDataStore ("CredentialCacheFolder", false),
    Scopes = new [] { "https://mail.google.com/" },
    ClientSecrets = clientSecrets
});

var codeReceiver = new LocalServerCodeReceiver ();
var authCode = new AuthorizationCodeInstalledApp (codeFlow, codeReceiver);
var credential = await authCode.AuthorizeAsync (GMailAccount, CancellationToken.None);

if (authCode.ShouldRequestAuthorizationCode (credential.Token))
    await credential.RefreshTokenAsync (CancellationToken.None);

var oauth2 = new SaslMechanismOAuth2 (credential.UserId, credential.Token.AccessToken);

using (var client = new ImapClient ()) {
    await client.ConnectAsync ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
    await client.AuthenticateAsync (oauth2);
    await client.DisconnectAsync (true);
}
        </code>
      </content>
    </section>

    <section address="CreateAttachments">
      <title>How do I create a message with attachments?</title>
      <content>
        <para>
          To construct a message with attachments, the first thing you'll need to do is create a
          <literal>multipart/mixed</literal> container which you'll then want to add the message
          body to first. Once you've added the body, you can then add MIME parts to it that contain
          the content of the files you'd like to attach, being sure to set the
          <literal>Content-Disposition</literal> header value to <literal>attachment</literal>.
          You'll probably also want to set the <literal>filename</literal> parameter on the
          <literal>Content-Disposition</literal> header as well as the <literal>name</literal>
          parameter on the <literal>Content-Type</literal> header. The most convenient way to do this
          is to use the <codeEntityReference qualifyHint="true">
          P:MimeKit.MimePart.FileName</codeEntityReference> property which will set both parameters
          for you as well as setting the <literal>Content-Disposition</literal> header value to
          <literal>attachment</literal> if it has not already been set to something else.
        </para>
        <code language="c#" source="Examples\CreateMultipartMixed.cs"/>
        <para>
          A simpler way to construct messages with attachments is to take advantage of the
          <codeEntityReference>T:MimeKit.BodyBuilder</codeEntityReference> class.
        </para>
        <code language="c#" source="Examples\BodyBuilder.cs" region="Simple"/>
        <para>
          For more information, see <link xlink:href="Creating-Messages">Creating Messages</link>.
        </para>
      </content>
    </section>

    <section address="MessageBody">
      <title>How do I get the main body of a message?</title>
      <content>
        <para>
          (Note: for the TL;DR version, skip to the end)
        </para>
        <para>
          MIME is a tree structure of parts. There are multiparts which contain other parts
          (even other multiparts). There are message parts which contain messages. And finally,
          there are leaf-node parts which contain content.
        </para>
        <para>
          There are a few common message structures:
        </para>
        <list class="ordered">
          <listItem address="MessageBodyExample1">
            <para>
              The message contains only a <literal>text/plain</literal> or
              <literal>text/html</literal> part (easy, just use that).
            </para>
          </listItem>
          <listItem address="MessageBodyExample2">
            <para>
              The message contains a <literal>multipart/alternative</literal>
              which will typically look a bit like this:<markup><pre>
multipart/alternative
  text/plain
  text/html</pre></markup>
            </para>
          </listItem>
          <listItem address="MessageBodyExample3">
            <para>
              Same as above, but the html part is inside a <literal>multipart/related</literal> so
              that it can embed images:<markup><pre>
multipart/alternative
  text/plain
  multipart/related
    text/html
    image/jpeg
    image/png</pre></markup>
            </para>
          </listItem>
          <listItem address="MessageBodyExample4">
            <para>
              The message contains a textual body part as well as some attachments:<markup><pre>
multipart/mixed
  text/plain
  application/octet-stream
  application/zip</pre></markup>
            </para>
          </listItem>
          <listItem address="MessageBodyExample5">
            <para>
              The same as above, but with the first part replaced with either
              <link xlink:href="Frequently-Asked-Questions#MessageBodyExample2">#2</link> or
              <link xlink:href="Frequently-Asked-Questions#MessageBodyExample3">#3</link>
              To illustrate:<markup><pre>
multipart/mixed
  multipart/alternative
    text/plain
    text/html
  application/octet-stream
  application/zip</pre></markup>
            </para>
            <para>
              Or:<markup><pre>
multipart/mixed
  multipart/alternative
    text/plain
    multipart/related
      text/html
      image/jpeg
      image/png
  application/octet-stream
  application/zip</pre></markup>
            </para>
          </listItem>
        </list>
        <para>
          For your convenience, the <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>
          class has 2 properties that you may find useful:
          <codeEntityReference>P:MimeKit.MimeMessage.TextBody</codeEntityReference> and
          <codeEntityReference>P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>.
        </para>
        <para>
          For more information, see <link xlink:href="Working-With-Messages"/>.
        </para>
      </content>
    </section>

    <section address="HasAttachments">
      <title>How do I tell if a message has attachments?</title>
      <content>
        <para>
          In most cases, a message with a body that has a MIME-type of <literal>multipart/mixed</literal>
          containing more than a single part probably has attachments. As illustrated above, the first part
          of a <literal>multipart/mixed</literal> is typically the textual body of the message, but it is
          not always quite that simple.
        </para>
        <para>
          In general, MIME attachments will have a <literal>Content-Disposition</literal> header with a
          value of <literal>attachment</literal>. To get the list of body parts matching this criteria,
          you can use the <codeEntityReference qualifyHint="true">
          P:MimeKit.MimeMessage.Attachments</codeEntityReference> property.
        </para>
        <para>
          Unfortunately, not all mail clients follow this convention and so you may need to write your
          own custom logic. For example, you may wish to treat all body parts having a <literal>name</literal>
          or <literal>filename</literal> parameter set on them:
        </para>
        <code language="c#">
var attachments = message.BodyParts.OfType&lt;MimePart&gt; ().Where (part => !string.IsNullOrEmpty (part.FileName));
        </code>
        <para>
          A more sophisticated approach is to treat body parts not referenced by the main textual body part of
          the message as attachments. In other words, treat any body part not used for rendering the message
          as an attachment. For an example on how to do this, consider the following code snippets:
        </para>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="HtmlPreviewVisitor"/>
        <para>And the way you'd use this visitor might look something like this:</para>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="RenderMessage"/>
        <para>
          Once you've rendered the message using the above technique, you'll have a list of attachments
          that were not used, even if they did not match the simplistic criteria used by the
          <codeEntityReference qualifyHint="true">P:MimeKit.MimeMessage.Attachments</codeEntityReference>
          property.
        </para>
      </content>
    </section>
    
    <section address="Serialize">
      <title>Why doesn't the MimeMessage class implement ISerializable so that I can serialize a
      message to disk and read it back later?</title>
      <content>
        <para>
          The MimeKit API was designed to use the existing MIME format for serialization. In light
          of this, the ability to use the .NET serialization API and format did not make much sense
          to support.
        </para>
        <para>
          You can easily serialize a MimeMessage to a stream using the
          <codeEntityReference autoUpgrade="true">Overload:MimeKit.MimeMessage.WriteTo</codeEntityReference>
          methods.
        </para>
      </content>
    </section>
    
    <section address="SaveMessages">
      <title>How do I save messages?</title>
      <content>
        <para>
          One you've got a <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>, you can save it to a
          file using the <codeEntityReference>Overload:MimeKit.MimeMessage.WriteTo</codeEntityReference> method:
        </para>
        <code language="c#">message.WriteTo ("message.eml");</code>
        <para>
          The <literal>WriteTo</literal> method also has overloads that allow you to write the message to a
          <literal>Stream</literal> instead.
        </para>
        <para>
          By default, the <literal>WriteTo</literal> method will save the message using DOS line-endings on Windows
          and Unix line-endings on Unix-based systems such as macOS and Linux. You can override this behavior by
          passing a <codeEntityReference>T:MimeKit.FormatOptions</codeEntityReference> argument to the method:
        </para>
        <code language="c#">
// clone the default formatting options
var format = FormatOptions.Default.Clone ();

// override the line-endings to be DOS no matter what platform we are on
format.NewLineFormat = NewLineFormat.Dos;

message.WriteTo (format, "message.eml");
        </code>
      </content>
    </section>
    
    <section address="SaveAttachments">
      <title>How do I save attachments?</title>
      <content>
        <para>
          If you've already got a <codeEntityReference>T:MimeKit.MimePart</codeEntityReference> that represents
          the attachment that you'd like to save, here's how you might save it:
        </para>
        <code language="c#" source="Examples\AttachmentExamples.cs" region="SaveMimePart" />
        <para>
          Pretty simple, right?
        </para>
        <para>
          But what if your attachment is actually a <codeEntityReference>T:MimeKit.MessagePart</codeEntityReference>?
        </para>
        <para>
          To save the content of a <literal>message/rfc822</literal> part, you'd use the following code snippet:
        </para>
        <code language="c#" source="Examples\AttachmentExamples.cs" region="SaveMessagePart" />
        <para>
          If you are iterating over all of the attachments in a message, you might do something like this:
        </para>
        <code language="c#" source="Examples\AttachmentExamples.cs" region="SaveAttachments" />
      </content>
    </section>

    <section address="AddressHeaders">
      <title>How do I get the email addresses in the From, To, and Cc headers?</title>
      <content>
        <para>
          The <codeEntityReference>P:MimeKit.MimeMessage.From</codeEntityReference>,
          <codeEntityReference>P:MimeKit.MimeMessage.To</codeEntityReference>, and
          <codeEntityReference>P:MimeKit.MimeMessage.Cc</codeEntityReference>
          properties of a <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>
          are all of type <codeEntityReference>T:MimeKit.InternetAddressList</codeEntityReference>.
          An <codeEntityReference>T:MimeKit.InternetAddressList</codeEntityReference> is a list of
          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> items.
          This is where some people start to get lost, conceptually, because
          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> is an
          abstract class that only really has a
          <codeEntityReference>P:MimeKit.InternetAddress.Name</codeEntityReference>
          property.
        </para>
        <para>
          As you've probably already discovered, the
          <codeEntityReference>P:MimeKit.InternetAddress.Name</codeEntityReference>
          property contains the name of the person (if available), but what you probably
          want is his or her email address, not their name. So how do you get it?
        </para>
        <para>
          To get the email address, you'll need to figure out what subclass of address each
          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> really is.
          There are 2 direct subclasses of
          <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference>. They are:
          <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> and
          <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>.
        </para>
        <para>
          A <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> is a named group
          of more <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> items that
          are contained within the
          <codeEntityReference>P:MimeKit.GroupAddress.Members</codeEntityReference> property. To
          get an idea of what a group address represents, consider the following examples:
        </para>
        <para>
          <literal>
            To: My Friends: Joey &lt;joey@friends.com&gt;, Monica &lt;monica@friends.com&gt;,
            "Mrs. Chanandler Bong" &lt;chandler@friends.com&gt;, Ross &lt;ross@friends.com&gt;,
            Rachel &lt;rachel@friends.com&gt;;
          </literal>
        </para>
        <para>
          In the above example, the <codeEntityReference>P:MimeKit.MimeMessage.To</codeEntityReference>
          header's <codeEntityReference>T:MimeKit.InternetAddressList</codeEntityReference> will
          contain only 1 item which will be a
          <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> with a
          <codeEntityReference>P:MimeKit.InternetAddress.Name</codeEntityReference> value of
          <literal>My Friends</literal>. The
          <codeEntityReference>P:MimeKit.GroupAddress.Members</codeEntityReference> property of
          the <codeEntityReference>T:MimeKit.GroupAddress</codeEntityReference> will contain 5
          more <codeEntityReference>T:MimeKit.InternetAddress</codeEntityReference> items (which
          will all be instances of <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>).
        </para>
        <para>
          The above example, however, is not very likely to ever be seen in messages you deal with.
          A far more common example would be the one below:
        </para>
        <para>
          <literal>To: undisclosed-recipients:;</literal>
        </para>
        <para>
          Most of the time, the <codeEntityReference>P:MimeKit.MimeMessage.From</codeEntityReference>,
          <codeEntityReference>P:MimeKit.MimeMessage.To</codeEntityReference>, and
          <codeEntityReference>P:MimeKit.MimeMessage.Cc</codeEntityReference> headers will only
          contain mailbox addresses. As you will notice, a
          <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference> has an
          <codeEntityReference>P:MimeKit.MailboxAddress.Address</codeEntityReference> property
          which will contain the email address of the mailbox. In the following example, the
          <codeEntityReference>P:MimeKit.MailboxAddress.Address</codeEntityReference> property
          will contain the value <literal>john@smith.com</literal>:
        </para>
        <para>
          <literal>To: John Smith &lt;john@smith.com&gt;</literal>
        </para>
        <para>
          If you only care about getting a flattened list of the mailbox addresses in one of
          the address headers, you can do something like this:
        </para>
        <code language="c#">
foreach (var mailbox in message.To.Mailboxes)
    Console.WriteLine ("{0}'s email address is {1}", mailbox.Name, mailbox.Address);
        </code>
      </content>
    </section>
    
    <section address="UntitledAttachments">
      <title>Why do attachments with Unicode filenames appear as "ATT0####.dat" in Outlook?</title>
      <content>
        <para>
          An attachment filename is stored as a MIME parameter on the <literal>Content-Disposition</literal>
          header. Unfortunately, the original MIME specifications did not specify a method for encoding
          non-ascii filenames. In 1997,
          <externalLink>
            <linkText>rfc2184</linkText>
            <linkUri>https://tools.ietf.org/html/rfc2184</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>
          (later updated by 
          <externalLink>
            <linkText>rfc2231</linkText>
            <linkUri>https://tools.ietf.org/html/rfc2231</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>) was
          published which specified an encoding mechanism to use for encoding them. Since there was a window
          in time where the MIME specifications did not define a way to encode them, some mail client
          developers decided to use the mechanism described by
          <externalLink>
            <linkText>rfc2047</linkText>
            <linkUri>https://tools.ietf.org/html/rfc2047</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> which was meant for encoding
          non-ASCII text in headers. While this may at first seem logical, the problem with this approach
          was that rfc2047 encoded-word tokens are not allowed to be in quotes (as well as some other issues)
          and so another, more appropriate, encoding mechanism was needed.
        </para>
        <para>
          Outlook is one of those mail clients which decided to encode filenames using the mechanism described
          in rfc2047 and until Outlook 2007, did not support filenames encoded using the mechanism defined in
          rfc2231.
        </para>
        <para>
          As of MimeKit v1.2.18, it is possible to configure MimeKit to use the rfc2047 encoding mechanism for
          filenames in the following two ways:
        </para>
        <para>
          The first way is to set the encoding method on each individual
          <codeEntityReference>T:MimeKit.Parameter</codeEntityReference>:
        </para>
        <code language="c#">
Parameter param;

if (attachment.ContentDisposition.Parameters.TryGetValue ("filename", out param))
    param.EncodingMethod = ParameterEncodingMethod.Rfc2047;
        </code>
        <para>
          The other way is to use a <codeEntityReference>T:MimeKit.FormatOptions</codeEntityReference>:
        </para>
        <code language="c#">
var options = FormatOptions.Default.Clone ();
options.ParameterEncodingMethod = ParameterEncodingMethod.Rfc2047;

message.WriteTo (options, stream);
        </code>
      </content>
    </section>
    
    <section address="DecryptInlinePGP">
      <title>How do I decrypt PGP messages that are embedded in the main message text?</title>
      <content>
        <para>
          Some PGP-enabled mail clients, such as <application>Thunderbird</application>, embed
          encrypted PGP blurbs within the <literal>text/plain</literal> body of the message
          rather than using the PGP/MIME format that MimeKit prefers.
        </para>
        <para>
          These messages often look something like this:
        </para>
        <code language="none" source="Examples\InlinePGPExample.txt"/>
        <para>
          To deal with these kinds of messages, MimeKit's
          <codeEntityReference>T:MimeKit.Cryptography.OpenPgpContext</codeEntityReference>
          includes a
          <codeEntityReference>
            M:MimeKit.Cryptography.OpenPgpContext.DecryptTo(System.IO.Stream,System.IO.Stream,System.Threading.CancellationToken)
          </codeEntityReference>
          method which can be used to get the raw decrypted stream.
        </para>
        <para>
          The method variant that has a
          <codeEntityReference>T:MimeKit.Cryptography.DigitalSignatureCollection</codeEntityReference>
          output parameter is useful in cases where the encrypted PGP blurb is also digitally signed,
          allowing you to get your hands on the list of digital signatures in order for you to verify
          each of them.
        </para>
        <para>
          To decrypt the sample message above, you could use the following code snippet:
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="DecryptInlinePGP"/>
      </content>
    </section>
    
    <section address="Reply">
      <title>How do I reply to a message using MimeKit?</title>
      <content>
        <para>
          Replying to a message is fairly simple. For the most part, you'd just create the reply message
          the same way you'd create any other message. There are only a few slight differences:
        </para>
        <list class="ordered">
          <listItem>
            <para>
              In the reply message, you'll want to prefix the <literal>Subject</literal> header with
              <literal>"Re: "</literal> if the prefix doesn't already exist in the message you are
              replying to (in other words, if you are replying to a message with a <literal>Subject</literal>
              of <literal>"Re: party tomorrow night!"</literal>, you would not prefix it with another
              <literal>"Re: "</literal>).
            </para>
          </listItem>
          <listItem>
            <para>
              You will want to set the reply message's <literal>In-Reply-To</literal> header to the value
              of the <literal>Message-Id</literal> header in the original message.
            </para>
          </listItem>
          <listItem>
            <para>
              You will want to copy the original message's <literal>References</literal> header into the
              reply message's <literal>References</literal> header and then append the original message's
              <literal>Message-Id</literal> header.
            </para>
          </listItem>
          <listItem>
            <para>
              You will probably want to "quote" the original message's text in the reply.
            </para>
          </listItem>
        </list>
        <para>
          If this logic were to be expressed in code, it might look something like this:
        </para>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="ReplySimple"/>
        <para>
          But what if you wanted to reply to a message and quote the HTML formatting of the original message
          body (assuming it has an HTML body) while still including the embedded images?
        </para>
        <para>
          This gets a bit more complicated, but it's still doable...
        </para>
        <para>
          The first thing we'd need to do is implement our own <codeEntityReference>T:MimeKit.MimeVisitor</codeEntityReference>
          to handle this:
        </para>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="ReplyVisitor"/>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="Reply"/>
      </content>
    </section>
    
    <section address="Forward">
      <title>How do I forward a message?</title>
      <content>
        <para>
          There are 2 common ways of forwarding a message: attaching the original message as an attachment and
          inlining the message body much like replying typically does. Which method you choose is up to you.
        </para>
        <para>
          To forward a message by attaching it as an attachment, you would do do something like this:
        </para>
        <code language="c#" source="Examples\ForwardExamples.cs" region="ForwardAttached"/>
        <para>
          To forward a message by inlining the original message's text content, you can do something like this:
        </para>
        <code language="c#" source="Examples\ForwardExamples.cs" region="ForwardInline"/>
      </content>
    </section>

    <section address="UnreadMessages">
      <title>How do I get all of the unread messages in a folder?</title>
      <content>
        <para>
          The easiest way is to search for all of the messages that do not have the
          <literal>\Seen</literal> flag on them, like so:
        </para>
        <code language="c#">
foreach (var uid in folder.Search (SearchQuery.NotSeen)) {
    var message = folder.GetMessage (uid);
}
        </code>
      </content>
    </section>

    <section address="ParseWebRequestFormData">
      <title>How would I parse multipart/form-data from an HTTP web request?</title>
      <content>
        <para>
          Since classes like <codeEntityReference>T:System.Net.HttpWebRequest</codeEntityReference>
          take care of parsing the HTTP headers (which includes the <literal>Content-Type</literal> header)
          and only offer a content stream to consume, MimeKit provides a way to deal with this using the
          following two static methods:
          <codeEntityReference qualifyHint="true">
            M:MimeKit.MimeEntity.Load(MimeKit.ParserOptions,MimeKit.ContentType,System.IO.Stream,System.Threading.CancellationToken)
          </codeEntityReference>
          and
          <codeEntityReference qualifyHint="true">
            M:MimeKit.MimeEntity.Load(MimeKit.ContentType,System.IO.Stream,System.Threading.CancellationToken)
          </codeEntityReference>
        </para>
        <para>
          Here's how you might use these methods:
        </para>
        <code language="c#" source="Examples\MultipartFormDataExamples.cs" region="ParseMultipartFormDataSimple"/>
        <para>
          If the multipart/form-data HTTP response is expected to be large and you do
          not wish for the content to be read into memory, you can use the following
          approach:
        </para>
        <code language="c#" source="Examples\MultipartFormDataExamples.cs" region="ParseMultipartFormDataComplex"/>
      </content>
    </section>

    <relatedTopics>
      <!--<link xlink:href="Working-With-Messages"/>-->
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Getting-Started.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Getting-Started" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <autoOutline />
    </introduction>

    <section address="InstallingViaNuGet">
      <title>Adding MailKit to your project via NuGet</title>
      <content>
        <para>
          In <application>Visual Studio</application>'s
          <externalLink>
            <linkText>Package Manager Console</linkText>
            <linkUri>http://docs.nuget.org/docs/start-here/using-the-package-manager-console</linkUri>
          </externalLink>, enter the following command:
        </para>
        <para>
          <command>Install-Package MailKit</command>
        </para>
      </content>
    </section>

    <section address="BuildingFromSource">
      <title>Building MailKit from Source</title>
      <content>
        <para>
          First, you'll need to clone <application>MailKit</application> from the
          <externalLink>
            <linkText>GitHub</linkText>
            <linkUri>https://github.com/jstedfast</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> repository:
        </para>
        <para>
          <command>git clone https://github.com/jstedfast/MailKit.git</command>
        </para>
        <para>
          Then, since <application>MailKit</application> makes use of git submodules, you
          will need to initialize and update the submodules using the following command
          from within the <application>MailKit</application> directory:
        </para>
        <para>
          <command>git submodule update --init --recursive</command>
        </para>
        <para>
          In the top-level <application>MailKit</application> source directory, there
          are several solution files:
        </para>
        <list class="bullet">
          <listItem>
            <para>
              <application>MailKit.sln</application> includes projects for .NET 4.5.2, .NET 4.6, .NET 4.7,
              .NET 4.8, .NET 5.0, .NET 6.0, .NETStandard 2.0, .NETStandard 2.1, and the unit tests.
            </para>
          </listItem>
          <listItem>
            <para>
              <application>MailKit.Documentation.sln</application> includes projects for generating
              the documentation that you are reading right now.
            </para>
          </listItem>
        </list>
        <para>
          Once you've opened the appropriate <application>MailKit</application> solution
          file in either <application>Xamarin Studio</application> or
          <application>Visual Studio</application> (either will work), you can
          choose the <application>Debug</application> or <application>Release</application>
          build configuration and then build.
        </para>
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Creating-Messages"/>
      <link xlink:href="Parsing-Messages"/>
      <link xlink:href="Working-With-Messages"/>
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Introduction.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Introduction" revisionNumber="1">
  <developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
    <introduction>
      <para>MimeKit and MailKit are popular fully-featured email frameworks for .NET</para>
    </introduction>

    <section>
      <title>Feature Overview</title>
      <content>
        <list class="bullet">
          <listItem>
            <para>Security</para>
            <list class="bullet">
              <listItem>
                <para>SASL Authentication</para>
                <list class="bullet">
                  <listItem>
                    <para>Supports the ANONYMOUS, CRAM-MD5, DIGEST-MD5, LOGIN, NTLM, OAUTHBEARER, PLAIN, SCRAM-SHA-1(-PLUS), SCRAM-SHA-256(-PLUS), SCRAM-SHA-512(-PLUS), and XOAUTH2 mechanisms.</para>
                  </listItem>
                </list>
              </listItem>
              <listItem>
                <para>Supports S/MIME v3.2.</para>
              </listItem>
              <listItem>
                <para>Supports OpenPGP.</para>
              </listItem>
              <listItem>
                <para>Supports DKIM-Signatures.</para>
              </listItem>
              <listItem>
                <para>Supports ARC signatures.</para>
              </listItem>
            </list>
          </listItem>
          <listItem>
            <para>SMTP Client</para>
            <list class="bullet">
              <listItem>
                <para>Supports SSL and TLS.</para>
              </listItem>
              <listItem>
                <para>Supports the STARTTLS, SIZE, DSN, 8BITMIME, PIPELINING, BINARYMIME, and SMTPUTF8 extensions.</para>
              </listItem>
            </list>
          </listItem>
          <listItem>
            <para>POP3 Client</para>
            <list class="bullet">
              <listItem>
                <para>Supports SSL and TLS.</para>
              </listItem>
              <listItem>
                <para>Supports the STLS, UIDL, PIPELINING, UTF8, and LANG extensions.</para>
              </listItem>
            </list>
          </listItem>
          <listItem>
            <para>IMAP Client</para>
            <list class="bullet">
              <listItem>
                <para>Supports SSL and TLS.</para>
              </listItem>
              <listItem>
                <para>Supports the ACL, QUOTA, LITERAL+, IDLE, NAMESPACE, ID, CHILDREN, LOGINDISABLED, STARTTLS,
                MULTIAPPEND, UNSELECT, UIDPLUS, CONDSTORE, ESEARCH, SASL-ID, COMPRESS, WITHIN, ENABLE, QRESYNC,
                SORT, THREAD, ANNOTATE, LIST-EXTENDED, ESORT, METADATA, METADATA-SERVER, NOTIFY, FILTERS, LIST-STATUS,
                SORT=DISPLAY, SPECIAL-USE, CREATE-SPECIAL-USE, SEARCH=FUZZY, MOVE, UTF8=ACCEPT, UTF8=ONLY, LITERAL-,
                APPENDLIMIT, STATUS=SIZE, OBJECTID, REPLACE, SAVEDATE, XLIST, and Google Mail (X-GM-EXT-1) extensions.</para>
              </listItem>
            </list>
          </listItem>
          <listItem>
            <para>Proxy Support</para>
            <list class="bullet">
              <listItem>
                <para>Supports HTTP(S), SOCKS4, SOCKS4a, and SOCKS5.</para>
              </listItem>
              <listItem>
                <para>Fully cancellable and asynchronous Connect methods.</para>
              </listItem>
            </list>
          </listItem>
          <listItem>
            <para>MIME Parser</para>
            <list class="bullet">
              <listItem>
                <para>Flexible: allows overriding default classes for any MIME-type.</para>
              </listItem>
              <listItem>
                <para>High performance: faster than any other .NET MIME parser on the market. Rivals the performance of even the fastest C++ parsers.</para>
              </listItem>
              <listItem>
                <para>Robust: handles a wide variety of broken MIME formatting with ease.</para>
              </listItem>
            </list>
          </listItem>
          <listItem>
            <para>
              All API's that might block allow cancellation via <codeEntityReference>T:System.Threading.CancellationToken</codeEntityReference>.
            </para>
          </listItem>
          <listItem>
            <para>All API's that perform I/O have async variants.</para>
          </listItem>
          <listItem>
            <para>Client-side sorting and threading of messages.</para>
          </listItem>
          <listItem>
            <para>Supports .NET 4.5.2, .NET 4.6, .NET 4.7, .NET 4.8, .NET 5.0, .NETStandard 2.0, Xamarin.Android, Xamarin.iOS, Windows Phone 8.1, and more.</para>
          </listItem>
        </list>
      </content>
    </section>

    <section>
      <title>History</title>
      <content>
        <para>
          As a developer and user of email clients, I had come to realize that the vast majority of email
          client (and server) software had less-than-satisfactory MIME implementations. More often than not these
          email clients created broken MIME messages and/or would incorrectly try to parse a MIME message thus
          subtracting from the full benefits that MIME was meant to provide. MimeKit is meant to address this
          issue by following the MIME specification as closely as possible while also providing programmers with
          an extremely easy to use high-level API.
        </para>
        <para>
          This led me, at first, to implement another MIME parser library called
          <externalLink>
            <linkText>GMime</linkText>
            <linkUri>http://spruce.sourceforge.net/gmime</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>
          which was implemented in C and later added a C# binding called GMime-Sharp.
        </para>
        <para>
          Now that I typically find myself working in C# rather than lower level languages like C, I decided
          to begin writing a new parser in C# which would not depend on GMime. This would also allow me to have
          more flexibility in that I'd be able use Generics and create a more .NET-compliant API.
        </para>
      </content>
    </section>

    <section>
      <title>Performance</title>
      <content>
        <para>
          While mainstream beliefs may suggest that C# can never be as fast as C, it turns out that with a bit
          of creative parser design and a few clever optimizations
          [<externalLink>
            <linkText>1</linkText>
            <linkUri>http://jeffreystedfast.blogspot.com/2013/09/optimization-tips-tricks-used-by.html</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>][<externalLink>
            <linkText>2</linkText>
            <linkUri>http://jeffreystedfast.blogspot.com/2013/10/optimization-tips-tricks-used-by.html</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>], MimeKit's performance is actually <externalLink>
            <linkText>on par with GMime</linkText>
            <linkUri>http://jeffreystedfast.blogspot.com/2014/03/gmime-gets-speed-boost.html</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>.
        </para>
        <para>
          Since GMime is pretty well-known as a high-performance native MIME parser and MimeKit more-or-less
          matches GMime's performance, it stands to reason that MimeKit is likely unsurpassed in performance in
          the .NET MIME parser space.
        </para>
        <para>
          For a comparison, as I <externalLink>
            <linkText>blogged here</linkText>
            <linkUri>http://jeffreystedfast.blogspot.com/2013/10/optimization-tips-tricks-used-by.html</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink> (I have since optimized MimeKit by at least another 30%), MimeKit is more than 25x faster than
          OpenPOP.NET, 75x faster than SharpMimeTools, and 65x faster than regex-based parsers. Even the commercial MIME
          parser offerings such as LimiLabs' Mail.dll and NewtonIdeas' Mime4Net cannot even come close to matching
          MimeKit's performance (they are both orders of magnitude slower than MimeKit).
        </para>
      </content>
    </section>

    <section>
      <title>Donate</title>
      <content>
        <para>
          MimeKit and MailKit are personal open source projects that I have put thousands of hours into perfecting
          by continuously improving the API based on feedback from developers like yourself, writing documentation,
          and optimizing with the goal of making them the very best email frameworks for .NET. I need your help to
          achieve this.
        </para>
        <para>
          Donating helps pay for things such as web hosting, domain registration and licenses for developer tools
          such as a performance profiler, memory profiler, a static code analysis tool, and more.
        </para>
        <para>
          If MimeKit and/or MailKit have been helpful to you, please consider donating. Your contributions will be
          greatly appreciated.
        </para>
        <markup>
          <p>
            <a href="https://github.com/sponsors/jstedfast" _target="blank">
              <img src="https://www.paypal.com/en_US/i/btn/x-click-but21.gif" alt="Click here to lend your support to MimeKit and MailKit by making a donation!" border="0" />
            </a>
          </p>
        </markup>
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Getting-Started"/>
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/License.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="License" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <autoOutline />
    </introduction>

    <section address="License">
      <title>MIT License</title>
      <content>
        <para>
          Permission is hereby granted, free of charge, to any person obtaining a copy
          of this software and associated documentation files (the "Software"), to deal
          in the Software without restriction, including without limitation the rights
          to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
          copies of the Software, and to permit persons to whom the Software is
          furnished to do so, subject to the following conditions:
        </para>
        <para>
          The above copyright notice and this permission notice shall be included in
          all copies or substantial portions of the Software.
        </para>
        <para>
          THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
          IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
          FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
          AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
          LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
          OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
          THE SOFTWARE.
        </para>
      </content>
    </section>

    <section address="Copyright">
      <title>Copyright Notices</title>
      <content>
        <para>
          <application>MimeKit</application> and <application>MailKit</application> are Copyright © 2013-2026 Jeffrey Stedfast
        </para>
      </content>
    </section>

    <relatedTopics/>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Parsing-Messages.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Parsing-Messages" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <para>
        One of the more common operations that MimeKit is meant for is parsing
        email messages from arbitrary streams. There are two ways of accomplishing
        this task.
      </para>
      <autoOutline />
    </introduction>

    <!-- Optional procedures followed by optional code example but must have
         at least one procedure or code example -->
    <section address="LoadMessage">
      <title>Using the Load methods</title>
      <content>
        <para>The easiest way is to use one of the Load methods on
        <codeEntityReference>T:MimeKit.MimeMessage</codeEntityReference>.</para>
        <code language="c#" source="Examples\MimeMessageLoad.cs" />
      </content>
    </section>

    <section address="MimeParser">
      <title>Using MimeParser directly</title>
      <content>
        <para>The second way is to use the
        <codeEntityReference>T:MimeKit.MimeParser</codeEntityReference> class.
        For the most part, using the MimeParser directly is not necessary unless
        you wish to parse a Unix mbox file stream. However, this is how you would
        do it:</para>
        <code language="c#" source="Examples\MimeParserExamples.cs" region="ParseMessage" />
        <para>For Unix mbox file streams, you would use the parser like this:</para>
        <code language="c#" source="Examples\MimeParserExamples.cs" region="ParseMbox" />
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Creating-Messages"/>
      <link xlink:href="Working-With-Messages"/>
      
      <!--<codeEntityReference autoUpgrade="true" qualifyHint="true">M:MimeKit.MimeParser.ParseMessage(System.Threading.CancellationToken)</codeEntityReference>
      <codeEntityReference autoUpgrade="true" qualifyHint="true">M:MimeKit.MimeMessage.Load(System.IO.Stream,System.Threading.CancellationToken)</codeEntityReference>-->
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Working-With-Messages.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Working-With-Messages" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <para>MimeKit provides a number of ways to get the data you want from a message.</para>
      <autoOutline />
    </introduction>

    <section address="MessageStructure">
      <title>The Message Structure</title>
      <content>
        <para>
          A common misunderstanding about email is that there is a well-defined
          message body and then a list of attachments. This is not really the case.
          The reality is that MIME is a tree structure of content, much like a file
          system.
        </para>
        <para>
          Luckily, MIME does define a set of general rules for how mail clients
          should interpret this tree structure of MIME parts. The
          <literal>Content-Disposition</literal> header is meant to provide hints to
          the receiving client as to which parts are meant to be displayed as part of
          the message body and which are meant to be interpreted as attachments.
        </para>
        <para>
          The <literal>Content-Disposition</literal> header will generally have
          one of two values: <literal>inline</literal> or
          <literal>attachment</literal>.
        </para>
        <para>
          The meaning of these values should be fairly obvious. If the value is
          <literal>attachment</literal>, then the content of said MIME part is meant
          to be presented as a file attachment separate from the core message. However,
          if the value is <literal>inline</literal>, then the content of that MIME part
          is meant to be displayed inline within the mail client's rendering of the
          core message body. If the <literal>Content-Disposition</literal> header does
          not exist, then it should be treated as if the value were
          <literal>inline</literal>.
        </para>
        <para>
          Technically, every part that lacks a <literal>Content-Disposition</literal>
          header or that is marked as <literal>inline</literal>, then, is part of the
          core message body.
        </para>
        <para>There's a bit more to it than that, though.</para>
        <para>
          Modern MIME messages will often contain a
          <literal>multipart/alternative</literal> MIME container which will generally
          contain a <literal>text/plain</literal> and <literal>text/html</literal> version
          of the text that the sender wrote. The <literal>text/html</literal> version is
          typically formatted much closer to what the sender saw in his or her WYSIWYG
          editor than the <literal>text/plain</literal> version.
        </para>
        <para>
          The reason for sending the message text in both formats is that not
          all mail clients are capable of displaying HTML.
        </para>
        <para>
          The receiving client should only display one of the alternative views
          contained within the <literal>multipart/alternative</literal> container.
          Since alternative views are listed in order of least faithful to most
          faithful with what the sender saw in his or her WYSIWYG editor, the
          receiving client should walk over the list of alternative views starting
          at the end and working backwards until it finds a part that it is capable
          of displaying.
        </para>
        <para>
          Example:<markup><pre>
multipart/alternative
  text/plain
  text/html</pre></markup>
        </para>
        <para>
          As seen in the example above, the <literal>text/html</literal> part is
          listed last because it is the most faithful to what the sender saw in his or
          her WYSIWYG editor when writing the message.
        </para>
        <para>
          To make matters even more complicated, sometimes modern mail clients
          will use a <literal>multipart/related</literal> MIME container instead of a
          simple <literal>text/html</literal> part in order to embed images and other
          multimedia content within the HTML.
        </para>
        <para>Example:<markup><pre>
multipart/alternative
  text/plain
  multipart/related
    text/html
    image/jpeg
    video/mp4
    image/png</pre></markup>
        </para>
        <para>
          In the example above, one of the alternative views is a
          <literal>multipart/related</literal> container which contains an HTML
          version of the message body that references the sibling video and images.
        </para>
        <para>
          Now that you have a rough idea of how a message is structured and how
          to interpret various MIME entities, the next step is learning how to traverse
          the MIME tree using MimeKit.
        </para>
      </content>
    </section>

    <section address="TraversingMessages">
      <title>Traversing a Message</title>
      <content>
        <para>
          The <codeEntityReference>P:MimeKit.MimeMessage.Body</codeEntityReference>
          is the top-level MIME entity of the message. Generally, it will either be a
          <codeEntityReference>T:MimeKit.TextPart</codeEntityReference> or a
          <codeEntityReference>T:MimeKit.Multipart</codeEntityReference>.
        </para>
        <para>
          There are 3 ways of iterating over the tree structure of a message using MimeKit.
          The first way is to recursively traverse the MIME structure like this:
        </para>
        <code language="c#" source="Examples\RecursivelyTraverse.cs"/>
        <para>
          A second way, which is a bit cleaner and doesn't require recursive methods, is
          to use a <codeEntityReference>T:MimeKit.MimeIterator</codeEntityReference>:
        </para>
        <code language="c#" source="Examples\MimeIterator.cs" />
        <para>
          And finally, for those that prefer to use the
          <externalLink>
            <linkText>visitor pattern</linkText>
            <linkUri>http://en.wikipedia.org/wiki/Visitor_pattern</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>, MimeKit includes the
          <codeEntityReference>T:MimeKit.MimeVisitor</codeEntityReference> class for
          visiting each node in the MIME tree structure. For example, the following
          MimeVisitor subclass could be used to generate HTML to be rendered by a
          browser control (such as <codeEntityReference>
            T:System.Windows.Forms.WebBrowser
          </codeEntityReference>):
        </para>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="HtmlPreviewVisitor"/>
        <para>And the way you'd use this visitor might look something like this:</para>
        <code language="c#" source="Examples\MimeVisitorExamples.cs" region="RenderMessage"/>
      </content>
    </section>

    <section address="TextBodyAndHtmlBody">
      <title>Using the TextBody and HtmlBody Properties</title>
      <content>
        <para>
          To simplify the common task of getting the text of a message, MimeKit includes
          two properties that can help you get the <literal>text/plain</literal> or
          <literal>text/html</literal> version of the message body. These are
          <codeEntityReference>P:MimeKit.MimeMessage.TextBody</codeEntityReference> and
          <codeEntityReference>P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>,
          respectively.
        </para>
        <para>
          Keep in mind, however, that at least with the
          <codeEntityReference>P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>
          property, it may be that the HTML part is a child of a
          <literal>multipart/related</literal>, allowing it to refer to images and other
          types of media that are also contained within that
          <literal>multipart/related</literal> entity. This property is really only a
          convenience property and is not a really good substitute for traversing the
          MIME structure yourself so that you may properly interpret related content.
        </para>
      </content>
    </section>

    <section address="EnumeratingBodyParts">
      <title>Enumerating Body Parts</title>
      <content>
        <para>
          Sometimes traversing the body of a message is overkill when all you really
          need to do is something quick &amp; dirty. For this reason, MimeKit provides
          the <codeEntityReference>P:MimeKit.MimeMessage.BodyParts</codeEntityReference>
          and <codeEntityReference>P:MimeKit.MimeMessage.Attachments</codeEntityReference>
          properties which flatten out the hierarchy and allow you to iterate over all
          of the body parts (or attachments) in depth-first order.
        </para>
        <code language="c#" source="Examples\AttachmentExamples.cs" region="SaveAttachments"/>
      </content>
    </section>

    <section address="DecodingContent">
      <title>Getting the Decoded Content of a MimePart</title>
      <content>
        <para>
          At some point, you're going to want to extract the decoded content of a
          <codeEntityReference>T:MimeKit.MimePart</codeEntityReference> (such as an image)
          and save it to disk or feed it to a UI control to display it.
        </para>
        <para>
          Once you've found the <codeEntityReference>T:MimeKit.MimePart</codeEntityReference>
          object that you'd like to extract the content of, here's how you can save the
          decoded content to a file:
        </para>
        <code language="c#" source="Examples\DecodingContent.cs"/>
        <para>
          You can also get access to the original raw content by "opening" the
          <codeEntityReference>P:MimeKit.MimePart.Content</codeEntityReference>.
          This might be useful if you want to pass the content off to a UI control that
          can do its own loading from a stream.
        </para>
        <code language="c#" source="Examples\OpeningContent.cs"/>
        <para>
          There are a number of useful filters that can be applied to a
          <codeEntityReference>T:MimeKit.IO.FilteredStream</codeEntityReference>, so if you
          find this type of interface appealing, I would suggest taking a look at the available
          filters in the <codeEntityReference>N:MimeKit.IO.Filters</codeEntityReference>
          namespace or even write your own! The possibilities are limited only by your
          imagination.
        </para>
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Parsing-Messages"/>
      
      <!--<codeEntityReference qualifyHint="true">P:MimeKit.MimeMessage.TextBody</codeEntityReference>
      <codeEntityReference qualifyHint="true">P:MimeKit.MimeMessage.HtmlBody</codeEntityReference>
      <codeEntityReference autoUpgrade="true" qualifyHint="true">M:MimeKit.MimeMessage.GetTextBody(MimeKit.Text.TextFormat)</codeEntityReference>
      <codeEntityReference qualifyHint="true">P:MimeKit.MimeMessage.BodyParts</codeEntityReference>
      <codeEntityReference qualifyHint="true">P:MimeKit.MimeMessage.Attachments</codeEntityReference>
      <codeEntityReference>T:MimeKit.MimeIterator</codeEntityReference>-->
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Working-With-OpenPGP.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Working-With-OpenPGP" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <autoOutline />
    </introduction>

    <section address="CreatingYourOwnPGPContext">
      <title>Creating your own OpenPGP Context</title>
      <content>
        <para>
          Before you can start working with <application>OpenPGP</application> in MimeKit,
          you will first need to create and register your own
          <codeEntityReference>T:MimeKit.Cryptography.OpenPgpContext</codeEntityReference>.
          For the sake of simplicity, MimeKit includes a
          <codeEntityReference>T:MimeKit.Cryptography.GnuPGContext</codeEntityReference>
          that does most of the work of interoperating with the popular
          <externalLink>
            <linkText>GnuPG</linkText>
            <linkUri>https://www.gnupg.org</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>
          program for you.
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="MyGnuPGContext"/>
        <para>
          To register your class, you can use the following code snippet:
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="RegisterCustomContext"/>
        <para>
          Now you are ready to encrypt, decrypt, sign and verify messages using PGP!
        </para>
      </content>
    </section>

    <section address="Encrypt">
      <title>Encrypting Messages with PGP/MIME</title>
      <content>
        <para>
          PGP/MIME uses a MIME part with a <literal>multipart/encrypted</literal> mime-type
          to encapsulate encrypted data. To encrypt any
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference>,
          use the
          <codeEntityReference autoUpgrade="true" linkText="MultipartEncrypted.Encrypt">
            Overload:MimeKit.Cryptography.MultipartEncrypted.Encrypt
          </codeEntityReference>
          method:
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="Encrypt"/>
        <alert class="tip">
          <para>
            When you know that you will be encrypting a message, it may be a good idea to use
            a <codeEntityReference>T:MimeKit.Cryptography.SecureMailboxAddress</codeEntityReference>
            instead of a <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>
            for each of the recipients, allowing you to specify the unique fingerprint of each
            recipient's PGP key.
          </para>
        </alert>
      </content>
    </section>

    <section address="Decrypt">
      <title>Decrypting PGP/MIME Messages</title>
      <content>
        <para>
          As mentioned earlier, PGP/MIME uses a <literal>multipart/encrypted</literal>
          part to encapsulate the encrypted content.
        </para>
        <para>
          A <literal>multipart/encrypted</literal> contains exactly 2 parts: the first
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the version
          information while the second
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the actual
          encrypted content and will typically be an <literal>application/octet-stream</literal>.
        </para>
        <para>
          The first thing you must do is find the
          <codeEntityReference>T:MimeKit.Cryptography.MultipartEncrypted</codeEntityReference>
          part (see the section on <link xlink:href="Working-With-Messages#TraversingMessages"/>).
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="Decrypt"/>
      </content>
    </section>

    <section address="Sign">
      <title>Digitally Signing Messages using PGP/MIME</title>
      <content>
        <para>
          PGP/MIME uses a MIME part with a <literal>multipart/signed</literal> mime-type to
          contain the signed content and the detached signature data.
        </para>
        <para>
          Here's how you might digitally sign a message using PGP/MIME:
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="Sign"/>
        <para>
          You can also do your own PGP key lookups instead of relying on email addresses
          to match up with the user's secret key.
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="SignWithKey"/>
      </content>
    </section>

    <section address="Verify">
      <title>Verifying PGP/MIME Digital Signatures</title>
      <content>
        <para>
          As mentioned earlier, PGP/MIME uses a <literal>multipart/signed</literal> part
          to contain the signed content and the detached signature data.
        </para>
        <para>
          A <literal>multipart/signed</literal> contains exactly 2 parts: the first
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the signed
          content while the second
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the detached
          signature and, by default, will be an
          <codeEntityReference>T:MimeKit.Cryptography.ApplicationPgpSignature</codeEntityReference>
          part.
        </para>
        <para>
          Because the <literal>multipart/signed</literal> part may have been signed by
          multiple signers, it is important to verify each of the digital signatures
          (one for each signer) that are returned by the
          <codeEntityReference autoUpgrade="true">
            Overload:MimeKit.Cryptography.MultipartSigned.Verify
          </codeEntityReference>
          method:
        </para>
        <code language="c#" source="Examples\OpenPGPExamples.cs" region="Verify"/>
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Working-With-Messages"/>
      <link xlink:href="Working-With-SMime"/>
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/Content/Working-With-SMime.aml
================================================
<?xml version="1.0" encoding="utf-8"?>
<topic id="Working-With-SMime" revisionNumber="1">
  <developerConceptualDocument
    xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"
    xmlns:xlink="http://www.w3.org/1999/xlink">

    <!--
    <summary>
      <para>Optional summary abstract</para>
    </summary>
    -->

    <introduction>
      <autoOutline />
    </introduction>

    <section address="CreatingYourOwnSMimeContext">
      <title>Creating your own S/MIME Context</title>
      <content>
        <para>
          Before you can begin using MimeKit's S/MIME support, you will need to decide which
          database to use for certificate storage.
        </para>
        <para>
          If you are targeting any of the <application>Xamarin</application> platforms
          (or Linux), you won't need to do anything (although you certainly can if you want to)
          because, by default, MimeKit will automatically use the
          <application>Mono.Data.Sqlite</application> binding to
          <externalLink>
            <linkText>SQLite</linkText>
            <linkUri>https://www.sqlite.org/</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>.
        </para>
        <para>
          If you are, however, on any of the <application>Windows</application> platforms,
          you'll need to pick a <codeEntityReference>N:System.Data</codeEntityReference>
          provider such as
          <externalLink>
            <linkText>System.Data.SQLite</linkText>
            <linkUri>https://www.nuget.org/packages/System.Data.SQLite</linkUri>
            <linkTarget>_blank</linkTarget>
          </externalLink>. Once you've made your choice and installed it (via NuGet or however),
          you'll need to implement your own
          <codeEntityReference>T:MimeKit.Cryptography.SecureMimeContext</codeEntityReference>
          subclass. Luckily, it's very simple to do. Assuming you've chosen
          <application>System.Data.SQLite</application>, here's how you'd implement your own
          <codeEntityReference>T:MimeKit.Cryptography.SecureMimeContext</codeEntityReference>
          class:
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="MySecureMimeContext"/>
        <para>
          To register your class, you can use the following code snippet:
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="RegisterCustomContext"/>
        <para>
          Now you are ready to encrypt, decrypt, sign and verify messages using S/MIME!
        </para>
      </content>
    </section>

    <section address="Encrypt">
      <title>Encrypting Messages with S/MIME</title>
      <content>
        <para>
          Instead of using a <literal>multipart/encrypted</literal> MIME part to encapsulate
          encrypted content like OpenPGP, S/MIME uses <literal>application/pkcs7-mime</literal>.
          To encrypt any <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference>,
          use the
          <codeEntityReference autoUpgrade="true" qualifyHint="true">
            Overload:MimeKit.Cryptography.ApplicationPkcs7Mime.Encrypt
          </codeEntityReference>
          method:
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="Encrypt"/>
        <alert class="tip">
          <para>
            When you know that you will be encrypting a message, it may be a good idea to use
            a <codeEntityReference>T:MimeKit.Cryptography.SecureMailboxAddress</codeEntityReference>
            instead of a <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>
            for each of the recipients, allowing you to specify the unique fingerprint of each
            recipient's X.509 certificate.
          </para>
        </alert>
      </content>
    </section>

    <section address="Decrypt">
      <title>Decrypting S/MIME Messages</title>
      <content>
        <para>
          As mentioned earlier, S/MIME uses an <literal>application/pkcs7-mime</literal> part with
          an <literal>smime-type</literal> parameter with a value of <literal>enveloped-data</literal>
          to encapsulate the encrypted content.
        </para>
        <para>
          The first thing you must do is find the
          <codeEntityReference>T:MimeKit.Cryptography.ApplicationPkcs7Mime</codeEntityReference>
          part (see the section on <link xlink:href="Working-With-Messages#TraversingMessages"/>).
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="Decrypt"/>
      </content>
    </section>

    <section address="Sign">
      <title>Digitally Signing Messages using S/MIME</title>
      <content>
        <para>
          S/MIME can use either a <literal>multipart/signed</literal> MIME part or a
          <literal>application/pkcs7-mime</literal> MIME part for signed data.
        </para>
        <para>
          To digitally sign a <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference>
          using a <literal>multipart/signed</literal> MIME part, it works exactly the same
          as it does for <link xlink:href="Working-With-OpenPGP#Sign">OpenPGP</link> using
          <codeEntityReference autoUpgrade="true" qualifyHint="true">
            Overload:MimeKit.Cryptography.MultipartSigned.Create
          </codeEntityReference>
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="MultipartSign"/>
        <para>
          You can also do your own certificate lookups instead of relying on email addresses
          to match up with the user's certificate.
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="MultipartSignWithKey"/>
        <para>
          You can also choose to digitally sign a
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> using the
          <literal>application/pkcs7-mime</literal> format using
          <codeEntityReference autoUpgrade="true" qualifyHint="true">
            Overload:MimeKit.Cryptography.ApplicationPkcs7Mime.Sign
          </codeEntityReference>
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="Pkcs7Sign"/>
        <alert class="tip">
          <para>
            When you know that you will be signing a message, it may be a good idea to use
            a <codeEntityReference>T:MimeKit.Cryptography.SecureMailboxAddress</codeEntityReference>
            instead of a <codeEntityReference>T:MimeKit.MailboxAddress</codeEntityReference>
            for the sender, allowing you to specify the unique fingerprint of the sender's
            X.509 certificate.
          </para>
        </alert>
      </content>
    </section>

    <section address="Verify">
      <title>Verifying S/MIME Digital Signatures</title>
      <content>
        <para>
          As mentioned earlier, S/MIME typically uses a <literal>multipart/signed</literal>
          part to contain the signed content and the detached signature data.
        </para>
        <para>
          A <literal>multipart/signed</literal> contains exactly 2 parts: the first
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the signed
          content while the second
          <codeEntityReference>T:MimeKit.MimeEntity</codeEntityReference> is the
          detached signature and, by default, will be an
          <codeEntityReference>T:MimeKit.Cryptography.ApplicationPkcs7Signature</codeEntityReference>
          part.
        </para>
        <para>
          Because the <literal>multipart/signed</literal> part may have been signed by
          multiple signers, it is important to verify each of the digital signatures
          (one for each signer) that are returned by the
          <codeEntityReference autoUpgrade="true">
            Overload:MimeKit.Cryptography.MultipartSigned.Verify
          </codeEntityReference>
          method:
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="VerifyMultipartSigned"/>
        <para>
          It should be noted, however, that while most S/MIME clients will use the preferred
          <literal>multipart/signed</literal> approach, it is possible that you may encounter an
          <literal>application/pkcs7-mime</literal> part with an <literal>smime-type</literal>
          parameter set to <literal>signed-data</literal>. Luckily, MimeKit can handle this
          format as well:
        </para>
        <code language="c#" source="Examples\SMimeExamples.cs" region="VerifyPkcs7"/>
      </content>
    </section>

    <relatedTopics>
      <link xlink:href="Working-With-Messages"/>
      <link xlink:href="Working-With-OpenPGP"/>
    </relatedTopics>
  </developerConceptualDocument>
</topic>


================================================
FILE: Documentation/ContentLayout.content
================================================
<?xml version="1.0" encoding="utf-8"?>
<Topics>
  <Topic id="Introduction" visible="True" isDefault="true" />
  <Topic id="License" visible="True" title="License Agreement" />
  <Topic id="Getting-Started" visible="True" isExpanded="true" title="Getting Started">
    <Topic id="Creating-Messages" visible="True" title="Creating messages" />
    <Topic id="Parsing-Messages" visible="True" title="Parsing messages" />
    <Topic id="Working-With-Messages" visible="True" title="Working with messages" />
    <Topic id="Working-With-OpenPGP" visible="True" title="Working with OpenPGP" />
    <Topic id="Working-With-SMime" visible="True" isSelected="true" title="Working with S/MIME" />
  </Topic>
  <Topic id="Frequently-Asked-Questions" visible="True" title="Frequently Asked Questions" />
</Topics>

================================================
FILE: Documentation/Documentation.shfbproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <!-- The configuration and platform will be used to determine which assemblies to include from solution and
				 project documentation sources -->
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>59115814-a1e3-46ae-ae30-4065ae8f4caf</ProjectGuid>
    <SHFBSchemaVersion>2017.9.26.0</SHFBSchemaVersion>
    <!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual Studio adds them anyway -->
    <AssemblyName>Documentation</AssemblyName>
    <RootNamespace>Documentation</RootNamespace>
    <Name>Documentation</Name>
    <!-- SHFB properties -->
    <FrameworkVersion>Cross-platform (.NET Core/.NET Standard)</FrameworkVersion>
    <OutputPath>bin\docs\</OutputPath>
    <HtmlHelpName>Documentation</HtmlHelpName>
    <Language>en-US</Language>
    <TransformComponentArguments>
      <Argument Key="RobotsMetadata" Value="" />
      <Argument Key="BibliographyDataFile" Value="" />
      <Argument Key="LogoFile" Value="Help.png" />
      <Argument Key="LogoHeight" Value="" />
      <Argument Key="LogoWidth" Value="" />
      <Argument Key="LogoAltText" Value="MimeKit" />
      <Argument Key="LogoPlacement" Value="left" />
      <Argument Key="LogoAlignment" Value="left" />
      <Argument Key="LogoUrl" Value="" />
      <Argument Key="MaxVersionParts" Value="3" />
      <Argument Key="DefaultLanguage" Value="cs" />
      <Argument Key="IncludeEnumValues" Value="true" />
      <Argument Key="EnumMemberSortOrder" Value="Value" />
      <Argument Key="FlagsEnumValueFormat" Value="IntegerValue" />
      <Argument Key="FlagsEnumSeparatorSize" Value="0" />
      <Argument Key="BaseSourceCodeUrl" Value="" />
      <Argument Key="RequestExampleUrl" Value="" />
    </TransformComponentArguments>
    <BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>
    <HelpFileFormat>Website</HelpFileFormat>
    <IndentHtml>False</IndentHtml>
    <KeepLogFile>False</KeepLogFile>
    <DisableCodeBlockComponent>False</DisableCodeBlockComponent>
    <CppCommentsFixup>False</CppCommentsFixup>
    <CleanIntermediates>True</CleanIntermediates>
    <MaximumGroupParts>2</MaximumGroupParts>
    <NamespaceGrouping>False</NamespaceGrouping>
    <SyntaxFilters>C#</SyntaxFilters>
    <SdkLinkTarget>Blank</SdkLinkTarget>
    <RootNamespaceContainer>True</RootNamespaceContainer>
    <PresentationStyle>VS2013</PresentationStyle>
    <Preliminary>False</Preliminary>
    <NamingMethod>MemberName</NamingMethod>
    <HelpTitle>MailKit Documentation</HelpTitle>
    <ContentPlacement>AboveNamespaces</ContentPlacement>
    <RootNamespaceTitle>API Reference</RootNamespaceTitle>
    <DocumentationSources>
      <DocumentationSource sourceFile="..\MailKit\bin\Release\net47\MailKit.dll" />
      <DocumentationSource sourceFile="..\MailKit\bin\Release\net47\MailKit.xml" />
      <DocumentationSource sourceFile="..\MailKit\bin\Release\net47\MimeKit.dll" />
      <DocumentationSource sourceFile="..\MailKit\bin\Release\net47\MimeKit.xml" />
    </DocumentationSources>
    <NamespaceSummaries>
      <NamespaceSummaryItem name="MimeKit" isDocumented="True">The &lt;b&gt;MimeKit&lt;/b&gt; namespace provides classes that are used to implement the core MIME parsing services of the framework.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.Cryptography" isDocumented="True">The &lt;b&gt;MimeKit.Cryptography&lt;/b&gt; namespace provides classes that are necessary for dealing with PGP, S/MIME, and other cryptographic services.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.Encodings" isDocumented="True">The &lt;b&gt;MimeKit.Encodings&lt;/b&gt; namespace provides classes for encoding and decoding various MIME transfer encodings.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.IO" isDocumented="True">The &lt;b&gt;MimeKit.IO&lt;/b&gt; namespace provides classes that extend the &lt;b&gt;System.IO&lt;/b&gt; namespace.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.IO.Filters" isDocumented="True">The &lt;b&gt;MimeKit.IO.Filters&lt;/b&gt; namespace provides filters for use with &lt;a href="T_MimeKit_IO_FilteredStream.htm"&gt;MimeKit.IO.FilteredStream&lt;/a&gt;.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.Text" isDocumented="True">The &lt;b&gt;MimeKit.Text&lt;/b&gt; namespace provides classes that are used for converting between various text formats.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.Tnef" isDocumented="True">The &lt;b&gt;MimeKit.Tnef&lt;/b&gt; namespace provides classes that are used for dealing with Microsoft TNEF attachments.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MimeKit.Utils" isDocumented="True">The &lt;b&gt;MimeKit.Utils&lt;/b&gt; namespace provides various utility classes.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit" isDocumented="True">The &lt;b&gt;MailKit&lt;/b&gt; namespace provides classes that are used to implement the core services of the framework.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit.Net.Imap" isDocumented="True">The &lt;b&gt;MailKit.Net.Imap&lt;/b&gt; namespace provides classes that are necessary for managing messages on an IMAP server.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit.Net.Pop3" isDocumented="True">The &lt;b&gt;MailKit.Net.Pop3&lt;/b&gt; namespace provides classes that are necessary for downloading messages from a POP3 server.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit.Net.Proxy" isDocumented="True">The &lt;b&gt;MailKit.Net.Proxy&lt;/b&gt; namespace provides classes that are necessary for connecting via proxy servers.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit.Net.Smtp" isDocumented="True">The &lt;b&gt;MailKit.Net.Smtp&lt;/b&gt; namespace provides classes that are necessary for sending messages to an SMTP server.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit.Search" isDocumented="True">The &lt;b&gt;MailKit.Search&lt;/b&gt; namespace provides classes that are necessary for searching folders for messages matching a set of criteria.</NamespaceSummaryItem>
      <NamespaceSummaryItem name="MailKit.Security" isDocumented="True">The &lt;b&gt;MailKit.Security&lt;/b&gt; namespace provides implementations of various SASL authentication mechanisms used by the IMAP, POP3 and SMTP clients.</NamespaceSummaryItem>
    </NamespaceSummaries>
    <CopyrightText>Copyright &amp;#169%3b 2013-2026 Jeffrey Stedfast</CopyrightText>
    <WorkingPath>obj\</WorkingPath>
    <FooterText>&amp;lt%3b!-- Global site tag %28gtag.js%29 - Google Analytics --&amp;gt%3b
&amp;lt%3bscript src=&amp;quot%3bhttps://www.googletagmanager.com/gtag/js%3fid=UA-63841238-1&amp;quot%3b&amp;gt%3b&amp;lt%3b/script&amp;gt%3b
&amp;lt%3bscript&amp;gt%3b
  window.dataLayer = window.dataLayer || []%3b
  function gtag%28%29{{dataLayer.push%28arguments%29%3b}}
  gtag%28&amp;#39%3bjs&amp;#39%3b, new Date%28%29%29%3b

  gtag%28&amp;#39%3bconfig&amp;#39%3b, &amp;#39%3bUA-63841238-1&amp;#39%3b%29%3b
&amp;lt%3b/script&amp;gt%3b</FooterText>
    <SaveComponentCacheCapacity>100</SaveComponentCacheCapacity>
    <HelpFileVersion>1.0.0.0</HelpFileVersion>
    <FeedbackEMailLinkText>Jeffrey Stedfast</FeedbackEMailLinkText>
    <FeedbackEMailAddress>jestedfa%40microsoft.com</FeedbackEMailAddress>
    <CopyrightHref>https://github.com/jstedfast</CopyrightHref>
    <MissingTags>Summary, Parameter, Returns, Value, Remarks, AutoDocumentCtors, Namespace, TypeParameter, AutoDocumentDispose</MissingTags>
    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <!-- There are no properties for these groups.  AnyCPU needs to appear in order for Visual Studio to perform
			 the build.  The others are optional common platform types that may appear. -->
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  </PropertyGroup>
  <ItemGroup>
    <Folder Include="Content" />
    <Folder Include="icons" />
    <Folder Include="media" />
    <Folder Include="Examples" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Content\Creating-Messages.aml" />
    <None Include="Content\Frequently-Asked-Questions.aml" />
    <None Include="Content\Getting-Started.aml" />
    <None Include="Content\Introduction.aml" />
    <None Include="Content\License.aml" />
    <None Include="Content\Parsing-Messages.aml" />
    <None Include="Content\Working-With-Messages.aml" />
    <None Include="Content\Working-With-OpenPGP.aml" />
    <None Include="Content\Working-With-SMime.aml" />
    <None Include="Examples\BodyBuilder.cs" />
    <None Include="Examples\CreateMultipartAlternative.cs" />
    <None Include="Examples\CreateMultipartMixed.cs" />
    <None Include="Examples\CreateSimpleMessage.cs" />
    <None Include="Examples\DecodingContent.cs" />
    <None Include="Examples\DkimExamples.cs" />
    <None Include="Examples\ForwardExamples.cs" />
    <None Include="Examples\ImapBodyPartExamples.cs" />
    <None Include="Examples\ImapExamples.cs" />
    <None Include="Examples\ImapIdleExample.cs" />
    <None Include="Examples\MessageDeliveryStatusExamples.cs" />
    <None Include="Examples\MimeIterator.cs" />
    <None Include="Examples\MimeMessageLoad.cs" />
    <None Include="Examples\MimeParserExamples.cs" />
    <None Include="Examples\MimeVisitorExamples.cs" />
    <None Include="Examples\MultipartFormDataExamples.cs" />
    <None Include="Examples\OAuth2ExchangeExample.cs" />
    <None Include="Examples\OAuth2GMailExample.cs" />
    <None Include="Examples\OpeningContent.cs" />
    <None Include="Examples\OpenPGPExamples.cs" />
    <None Include="Examples\ParameterExamples.cs" />
    <None Include="Examples\Pop3Examples.cs" />
    <None Include="Examples\ArcSignerExample.cs" />
    <None Include="Examples\ArcVerifierExample.cs" />
    <None Include="Examples\DkimVerifierExample.cs" />
    <None Include="Examples\RecursivelyTraverse.cs" />
    <None Include="Examples\AttachmentExamples.cs" />
    <None Include="Examples\SMimeExamples.cs" />
    <None Include="Examples\SmtpExamples.cs" />
    <None Include="Examples\SslCertificateValidation.cs" />
    <None Include="Examples\VerifySignature.cs" />
  </ItemGroup>
  <ItemGroup>
    <ContentLayout Include="ContentLayout.content" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Examples\InlinePGPExample.txt" />
    <Content Include="icons\Help.png" />
  </ItemGroup>
  <ItemGroup>
    <Image Include="media\clone.png">
      <ImageId>clone</ImageId>
      <AlternateText>Clone MailKit source code from GitHub using TortoiseGit.</AlternateText>
    </Image>
    <Image Include="media\update.png">
      <ImageId>update</ImageId>
      <AlternateText>Update MailKit source code via TortoiseGit using the Pull and Submodule Update buttons.</AlternateText>
    </Image>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\MailKit\MailKit.csproj">
      <Name>MailKit</Name>
      <Project>{e543a427-93de-4e65-adf2-44412e440fb1}</Project>
      <Private>True</Private>
    </ProjectReference>
    <ProjectReference Include="..\submodules\MimeKit\MimeKit\MimeKit.csproj">
      <Name>MimeKit</Name>
      <Project>{faec8a91-6983-4ed9-a414-09c6b65b13bb}</Project>
      <Private>True</Private>
    </ProjectReference>
  </ItemGroup>
  <!-- Import the SHFB build targets -->
  <Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" />
</Project>

================================================
FILE: Documentation/Examples/ArcSignerExample.cs
================================================
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;

using MimeKit;
using MimeKit.Cryptography;

namespace ArcSignerExample
{
    class ExampleArcSigner : ArcSigner
    {
        public ExampleArcSigner (Stream stream, string domain, string selector, DkimSignatureAlgorithm algorithm = DkimSignatureAlgorithm.RsaSha256) : base (stream, domain, selector, algorithm)
        {
        }

        public ExampleArcSigner (string fileName, string domain, string selector, DkimSignatureAlgorithm algorithm = DkimSignatureAlgorithm.RsaSha256) : base (fileName, domain, selector, algorithm)
        {
        }

        public ExampleArcSigner (AsymmetricKeyParameter key, string domain, string selector, DkimSignatureAlgorithm algorithm = DkimSignatureAlgorithm.RsaSha256) : base (key, domain, selector, algorithm)
        {
        }

        public string AuthenticationServiceIdentifier {
            get; set;
        }

        /// <summary>
        /// Generate the ARC-Authentication-Results header.
        /// </summary>
        /// <remarks>
        /// The ARC-Authentication-Results header contains information detailing the results of
        /// authenticating/verifying the message via ARC, DKIM, SPF, etc.
        ///
        /// In the following implementation, we assume that all of these authentication results
        /// have already been determined by other mail software that has added some Authentication-Results
        /// headers containing this information.
        ///
        /// Note: This method is used when ArcSigner.Sign() is called instead of ArcSigner.SignAsync().
        /// </remarks>
        protected override AuthenticationResults GenerateArcAuthenticationResults (FormatOptions options, MimeMessage message, CancellationToken cancellationToken)
        {
            var results = new AuthenticationResults (AuthenticationServiceIdentifier);

            for (int i = 0; i < message.Headers.Count; i++) {
                var header = message.Headers[i];

                if (header.Id != HeaderId.AuthenticationResults)
                    continue;

                if (!AuthenticationResults.TryParse (header.RawValue, out AuthenticationResults authres))
                    continue;

                if (authres.AuthenticationServiceIdentifier != AuthenticationServiceIdentifier)
                    continue;

                foreach (var result in authres.Results) {
                    if (!results.Results.Any (r => r.Method == result.Method))
                        results.Results.Add (result);
                }
            }

            return results;
        }

        protected override Task<AuthenticationResults> GenerateArcAuthenticationResultsAsync (FormatOptions options, MimeMessage message, CancellationToken cancellationToken)
        {
            return Task.FromResult (GenerateArcAuthenticationResults (options, message, cancellationToken));
        }
    }

    class Program
    {
        public static void Main (string[] args)
        {
            if (args.Length < 2) {
                Help ();
                return;
            }

            for (int i = 0; i < args.Length; i++) {
                if (args[i] == "--help") {
                    Help ();
                    return;
                }
            }

            var headers = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };
            var signer = new ExampleArcSigner ("privatekey.pem", "example.com", "brisbane", DkimSignatureAlgorithm.RsaSha256) {
                HeaderCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,
                BodyCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,
                AgentOrUserIdentifier = "@eng.example.com",
            };

            if (!File.Exists (args[0])) {
                Console.Error.WriteLine ("{0}: No such file.", args[0]);
                return;
            }

            var message = MimeMessage.Load (args[0]);

            // Prepare the message body to be sent over a 7bit transport (such as older versions of SMTP).
            // Note: If the SMTP server you will be sending the message over supports the 8BITMIME extension,
            // then you can use `EncodingConstraint.EightBit` instead.
            message.Prepare (EncodingConstraint.SevenBit);

            signer.Sign (message, headers);

            using (var stream = File.Create (args[1]))
                message.WriteTo (stream);
        }

        static void Help ()
        {
            Console.WriteLine ("Usage is: ArcSigner [options] [message] [output]");
            Console.WriteLine ();
            Console.WriteLine ("Options:");
            Console.WriteLine ("  --help               This help menu.");
        }
    }
}


================================================
FILE: Documentation/Examples/ArcVerifierExample.cs
================================================
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;

using Heijden.DNS;

using Org.BouncyCastle.Crypto;

using MimeKit;
using MimeKit.Cryptography;

namespace ArcVerifierExample
{
    // Note: By using the DkimPublicKeyLocatorBase, we avoid having to parse the DNS TXT records
    // in order to get the public key ourselves.
    class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase
    {
        readonly Dictionary<string, AsymmetricKeyParameter> cache;
        readonly Resolver resolver;

        public ExamplePublicKeyLocator ()
        {
            cache = new Dictionary<string, AsymmetricKeyParameter> ();

            resolver = new Resolver ("8.8.8.8") {
                TransportType = TransportType.Udp,
                UseCache = true,
                Retries = 3
            };
        }

        AsymmetricKeyParameter DnsLookup (string domain, string selector, CancellationToken cancellationToken)
        {
            var query = selector + "._domainkey." + domain;
            AsymmetricKeyParameter pubkey;

            // checked if we've already fetched this key
            if (cache.TryGetValue (query, out pubkey))
                return pubkey;

            // make a DNS query
            var response = resolver.Query (query, QType.TXT);
            var builder = new StringBuilder ();

            // combine the TXT records into 1 string buffer
            foreach (var record in response.RecordsTXT) {
                foreach (var text in record.TXT)
                    builder.Append (text);
            }

            var txt = builder.ToString ();

            // DkimPublicKeyLocatorBase provides us with this helpful method.
            pubkey = GetPublicKey (txt);

            cache.Add (query, pubkey);

            return pubkey;
        }

        public AsymmetricKeyParameter LocatePublicKey (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))
        {
            var methodList = methods.Split (new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < methodList.Length; i++) {
                if (methodList[i] == "dns/txt")
                    return DnsLookup (domain, selector, cancellationToken);
            }

            throw new NotSupportedException (string.Format ("{0} does not include any supported lookup methods.", methods));
        }

        public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))
        {
            return Task.Run (() => {
                return LocatePublicKey (methods, domain, selector, cancellationToken);
            }, cancellationToken);
        }
    }

    class Program
    {
        public static void Main (string[] args)
        {
            if (args.Length == 0) {
                Help ();
                return;
            }

            for (int i = 0; i < args.Length; i++) {
                if (args[i] == "--help") {
                    Help ();
                    return;
                }
            }

            var locator = new ExamplePublicKeyLocator ();
            var verifier = new ArcVerifier (locator);

            for (int i = 0; i < args.Length; i++) {
                if (!File.Exists (args[i])) {
                    Console.Error.WriteLine ("{0}: No such file.", args[i]);
                    continue;
                }

                Console.Write ("{0} -> ", args[i]);

                var message = MimeMessage.Load (args[i]);
                var result = verifier.Verify (message);

                switch (result.Chain) {
                case ArcSignatureValidationResult.None:
                    Console.WriteLine ("No ARC signatures to verify.");
                    break;
                case ArcSignatureValidationResult.Pass:
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine ("PASS");
                    Console.ResetColor ();
                    break;
                case ArcSignatureValidationResult.Fail:
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine ("FAIL");
                    Console.ResetColor ();
                    break;
                }
            }
        }

        static void Help ()
        {
            Console.WriteLine ("Usage is: ArcVerifier [options] [messages]");
            Console.WriteLine ();
            Console.WriteLine ("Options:");
            Console.WriteLine ("  --help               This help menu.");
        }
    }
}


================================================
FILE: Documentation/Examples/AttachmentExamples.cs
================================================
using System;

using MimeKit;

namespace MimeKit.Examples
{
	public static class AttachmentExamples
	{
		public static void SaveMimePart (MimePart attachment, string fileName)
		{
			#region SaveMimePart
			using (var stream = File.Create (fileName))
				attachment.Content.DecodeTo (stream);
			#endregion SaveMimePart
		}

		public static void SaveMimePart (MessagePart attachment, string fileName)
		{
			#region SaveMessagePart
			using (var stream = File.Create (fileName))
				attachment.Message.WriteTo (stream);
			#endregion SaveMessagePart
		}

		public static void SaveAttachments (MimeMessage message)
		{
			#region SaveAttachments
			foreach (var attachment in message.Attachments) {
				if (attachment is MessagePart) {
					var fileName = attachment.ContentDisposition?.FileName;
					var rfc822 = (MessagePart) attachment;

					if (string.IsNullOrEmpty (fileName))
						fileName = "attached-message.eml";

					using (var stream = File.Create (fileName))
						rfc822.Message.WriteTo (stream);
				} else {
					var part = (MimePart) attachment;
					var fileName = part.FileName;

					using (var stream = File.Create (fileName))
						part.Content.DecodeTo (stream);
				}
			}
			#endregion SaveAttachments
		}

		public static void SaveAttachments (MimeMessage message)
		{
			#region SaveBodyParts
			foreach (var bodyPart in message.BodyParts) {
				if (!bodyPart.IsAttachment)
					continue;

				if (bodyPart is MessagePart) {
					var fileName = attachment.ContentDisposition?.FileName;
					var rfc822 = (MessagePart) attachment;

					if (string.IsNullOrEmpty (fileName))
						fileName = "attached-message.eml";

					using (var stream = File.Create (fileName))
						rfc822.Message.WriteTo (stream);
				} else {
					var part = (MimePart) attachment;
					var fileName = part.FileName;

					using (var stream = File.Create (fileName))
						part.Content.DecodeTo (stream);
				}
			}
			#endregion SaveBodyParts
		}
	}
}


================================================
FILE: Documentation/Examples/BodyBuilder.cs
================================================
using MimeKit;

namespace BodyBuilderExamples
{
	public class Program
	{
		public static void Complex ()
		{
			#region Complex
			var message = new MimeMessage ();
			message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
			message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
			message.Subject = "How you doin?";

			var builder = new BodyBuilder ();

			// Set the plain-text version of the message text
			builder.TextBody = @"Hey Alice,

What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.

Will you be my +1?

-- Joey
";

			// In order to reference selfie.jpg from the html text, we'll need to add it
			// to builder.LinkedResources and then use its Content-Id value in the img src.
			var image = builder.LinkedResources.Add (@"C:\Users\Joey\Documents\Selfies\selfie.jpg");
			image.ContentId = MimeUtils.GenerateMessageId ();

			// Set the html version of the message text
			builder.HtmlBody = string.Format (@"<p>Hey Alice,<br>
<p>What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.<br>
<p>Will you be my +1?<br>
<p>-- Joey<br>
<center><img src=""cid:{0}""></center>", image.ContentId);

			// We may also want to attach a calendar event for Monica's party...
			builder.Attachments.Add (@"C:\Users\Joey\Documents\party.ics");

			// Now we just need to set the message body and we're done
			message.Body = builder.ToMessageBody ();
			#endregion
		}

		public static void Simple ()
		{
			#region Simple
			var message = new MimeMessage ();
			message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
			message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
			message.Subject = "How you doin?";

			var builder = new BodyBuilder ();

			// Set the plain-text version of the message text
			builder.TextBody = @"Hey Alice,

What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.

Will you be my +1?

-- Joey
";

			// We may also want to attach a calendar event for Monica's party...
			builder.Attachments.Add (@"C:\Users\Joey\Documents\party.ics");

			// Now we just need to set the message body and we're done
			message.Body = builder.ToMessageBody ();
			#endregion
		}
	}
}


================================================
FILE: Documentation/Examples/CreateMultipartAlternative.cs
================================================
var attachment = CreateImageAttachment ();
var plain = CreateTextPlainPart ();
var html = CreateTextHtmlPart ();

// Note: it is important that the text/html part is added second, because it is the
// most expressive version and (probably) the most faithful to the sender's WYSIWYG 
// editor.
var alternative = new MultipartAlternative ();
alternative.Add (plain);
alternative.Add (html);

// now create the multipart/mixed container to hold the multipart/alternative
// and the image attachment
var multipart = new Multipart ("mixed");
multipart.Add (alternative);
multipart.Add (attachment);

// now set the multipart/mixed as the message body
message.Body = multipart;


================================================
FILE: Documentation/Examples/CreateMultipartMixed.cs
================================================
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
message.Subject = "How you doin?";

// create our message text, just like before (except don't set it as the message.Body)
var body = new TextPart ("plain") {
    Text = @"Hey Alice,

What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.

Will you be my +1?

-- Joey
"
};

// create an image attachment for the file located at path
var attachment = new MimePart ("image", "gif") {
    Content = new MimeContent (File.OpenRead (path), ContentEncoding.Default),
    ContentDisposition = new ContentDisposition (ContentDisposition.Attachment),
    ContentTransferEncoding = ContentEncoding.Base64,
    FileName = Path.GetFileName (path)
};

// now create the multipart/mixed container to hold the message text and the
// image attachment
var multipart = new Multipart ("mixed");
multipart.Add (body);
multipart.Add (attachment);

// now set the multipart/mixed as the message body
message.Body = multipart;


================================================
FILE: Documentation/Examples/CreateSimpleMessage.cs
================================================
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
message.Subject = "How you doin?";

message.Body = new TextPart ("plain") {
    Text = @"Hey Alice,

What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.

Will you be my +1?

-- Joey
"
};


================================================
FILE: Documentation/Examples/DecodingContent.cs
================================================
// This will get the name of the file as specified by the sending mail client.
// Note: this value *may* be null, so you'll want to handle that case in your code.
var fileName = part.FileName;

using (var stream = File.Create (fileName)) {
    part.Content.DecodeTo (stream);
}


================================================
FILE: Documentation/Examples/DkimExamples.cs
================================================
using System;
using System.IO;

using MimeKit;

namespace MimeKit.Examples
{
    public static class DkimExamples
    {
        #region DkimSign
        public static void DkimSign (MimeMessage message)
        {
            var headers = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };
            var signer = new DkimSigner ("privatekey.pem", "example.com", "brisbane", DkimSignatureAlgorithm.RsaSha256) {
		HeaderCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,
		BodyCanonicalizationAlgorithm = DkimCanonicalizationAlgorithm.Simple,
                AgentOrUserIdentifier = "@eng.example.com",
                QueryMethod = "dns/txt",
            };

            // Prepare the message body to be sent over a 7bit transport (such as older versions of SMTP).
            // Note: If the SMTP server you will be sending the message over supports the 8BITMIME extension,
            // then you can use `EncodingConstraint.EightBit` instead.
            message.Prepare (EncodingConstraint.SevenBit);

            signer.Sign (message, headers);
        }
        #endregion
    }
}


================================================
FILE: Documentation/Examples/DkimVerifierExample.cs
================================================
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;

using Heijden.DNS;

using Org.BouncyCastle.Crypto;

using MimeKit;
using MimeKit.Cryptography;

namespace DkimVerifierExample
{
    // Note: By using the DkimPublicKeyLocatorBase, we avoid having to parse the DNS TXT records
    // in order to get the public key ourselves.
    class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase
    {
        readonly Dictionary<string, AsymmetricKeyParameter> cache;
        readonly Resolver resolver;

        public ExamplePublicKeyLocator ()
        {
            cache = new Dictionary<string, AsymmetricKeyParameter> ();

            resolver = new Resolver ("8.8.8.8") {
                TransportType = TransportType.Udp,
                UseCache = true,
                Retries = 3
            };
        }

        AsymmetricKeyParameter DnsLookup (string domain, string selector, CancellationToken cancellationToken)
        {
            var query = selector + "._domainkey." + domain;
            AsymmetricKeyParameter pubkey;

            // checked if we've already fetched this key
            if (cache.TryGetValue (query, out pubkey))
                return pubkey;

            // make a DNS query
            var response = resolver.Query (query, QType.TXT);
            var builder = new StringBuilder ();

            // combine the TXT records into 1 string buffer
            foreach (var record in response.RecordsTXT) {
                foreach (var text in record.TXT)
                    builder.Append (text);
            }

            var txt = builder.ToString ();

            // DkimPublicKeyLocatorBase provides us with this helpful method.
            pubkey = GetPublicKey (txt);

            cache.Add (query, pubkey);

            return pubkey;
        }

        public AsymmetricKeyParameter LocatePublicKey (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))
        {
            var methodList = methods.Split (new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < methodList.Length; i++) {
                if (methodList[i] == "dns/txt")
                    return DnsLookup (domain, selector, cancellationToken);
            }

            throw new NotSupportedException (string.Format ("{0} does not include any supported lookup methods.", methods));
        }

        public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))
        {
            return Task.Run (() => {
                return LocatePublicKey (methods, domain, selector, cancellationToken);
            }, cancellationToken);
        }
    }

    class Program
    {
        public static void Main (string[] args)
        {
            if (args.Length == 0) {
                Help ();
                return;
            }

            for (int i = 0; i < args.Length; i++) {
                if (args[i] == "--help") {
                    Help ();
                    return;
                }
            }

            var locator = new ExamplePublicKeyLocator ();
            var verifier = new DkimVerifier (locator);

            for (int i = 0; i < args.Length; i++) {
                if (!File.Exists (args[i])) {
                    Console.Error.WriteLine ("{0}: No such file.", args[i]);
                    continue;
                }

                Console.Write ("{0} -> ", args[i]);

                var message = MimeMessage.Load (args[i]);
                var index = message.Headers.IndexOf (HeaderId.DkimSignature);

                if (index == -1) {
                    Console.WriteLine ("NO SIGNATURE");
                    continue;
                }

                var dkim = message.Headers[index];

                if (verifier.Verify (message, dkim)) {
                    // the DKIM-Signature header is valid!
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine ("VALID");
                    Console.ResetColor ();
                } else {
                    // the DKIM-Signature is invalid!
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine ("INVALID");
                    Console.ResetColor ();
                }
            }
        }

        static void Help ()
        {
            Console.WriteLine ("Usage is: DkimVerifier [options] [messages]");
            Console.WriteLine ();
            Console.WriteLine ("Options:");
            Console.WriteLine ("  --help               This help menu.");
        }
    }
}


================================================
FILE: Documentation/Examples/ForwardExamples.cs
================================================
//
// ForwardExamples.cs
//
// Author: Jeffrey Stedfast <jestedfa@microsoft.com>
//
// Copyright (c) 2013-2023 .NET Foundation and Contributors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Collections.Generic;

using MimeKit;

namespace MimeKit.Examples
{
	public static class ForwardExamples
	{
		#region ForwardAttached
		public static MimeMessage Forward (MimeMessage original, MailboxAddress from, IEnumerable<InternetAddress> to)
		{
			var message = new MimeMessage ();
			message.From.Add (from);
			message.To.AddRange (to);

			// set the forwarded subject
			if (!original.Subject?.StartsWith ("FW:", StringComparison.OrdinalIgnoreCase))
				message.Subject = "FW: " + (original.Subject ?? string.Empty);
			else
				message.Subject = original.Subject;

			// create the main textual body of the message
			var text = new TextPart ("plain") { Text = "Here's the forwarded message:" };

			// create the message/rfc822 attachment for the original message
			var rfc822 = new MessagePart { Message = original };

			// create a multipart/mixed container for the text body and the forwarded message
			var multipart = new Multipart ("mixed");
			multipart.Add (text);
			multipart.Add (rfc822);

			// set the multipart as the body of the message
			message.Body = multipart;

			return message;
		}
		#endregion ForwardAttached

		#region ForwardInline
		public static MimeMessage Forward (MimeMessage original, MailboxAddress from, IEnumerable<InternetAddress> to)
		{
			var message = new MimeMessage ();
			message.From.Add (from);
			message.To.AddRange (to);

			// set the forwarded subject
			if (!original.Subject?.StartsWith ("FW:", StringComparison.OrdinalIgnoreCase))
				message.Subject = "FW: " + (original.Subject ?? string.Empty);
			else
				message.Subject = original.Subject;

			// quote the original message text
			using (var text = new StringWriter ()) {
				text.WriteLine ();
				text.WriteLine ("-----Original Message-----");
				test.WriteLine ("From: {0}", original.From);
				text.WriteLine ("Sent: {0}", DateUtils.FormatDate (original.Date));
				text.WriteLine ("To: {0}", original.To);
				text.WriteLine ("Subject: {0}", original.Subject ?? string.Empty);
				text.WriteLine ();

				text.Write (original.TextBody);

				message.Body = new TextPart ("plain") {
					Text = text.ToString ()
				};
			}

			return message;
		}
		#endregion ForwardInline
	}
}

================================================
FILE: Documentation/Examples/ImapBodyPartExamples.cs
================================================
//
// ImapBodyPartExamples.cs
//
// Author: Jeffrey Stedfast <jestedfa@microsoft.com>
//
// Copyright (c) 2013-2023 .NET Foundation and Contributors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//

using System;
using System.Collections;
using System.Collections.Generic;

using MimeKit;
using MailKit;
using MailKit.Search;
using MailKit.Security;
using MailKit.Net.Imap;

namespace MailKit.Examples {
	public static class ImapBodyPartExamples
	{
		#region GetBodyPartsByUniqueId
		public static void DownloadBodyAndAttachments (string baseDirectory)
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				// search for messages where the Subject header contains either "MimeKit" or "MailKit"
				var query = SearchQuery.SubjectContains ("MimeKit").Or (SearchQuery.SubjectContains ("MailKit"));
				var uids = client.Inbox.Search (query);

				// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE
				// of each message so that we can extract the text body and the attachments)
				var items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);

				foreach (var item in items) {
					// determine a directory to save stuff in
					var directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());

					// create the directory
					Directory.CreateDirectory (directory);

					// IMessageSummary.TextBody is a convenience property that finds the 'text/plain' body part for us
					var bodyPart = item.TextBody;

					if (bodyPart != null) {
						// download the 'text/plain' body part
						var plain = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart);

						// TextPart.Text is a convenience property that decodes the content and converts the result to
						// a string for us
						var text = plain.Text;

						File.WriteAllText (Path.Combine (directory, "body.txt"), text);
					}

					// IMessageSummary.HtmlBody is a convenience property that finds the 'text/html' body part for us
					bodyPart = item.HtmlBody;

					if (bodyPart != null) {
						// download the 'text/html' body part
						var html = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart);

						// TextPart.Text is a convenience property that decodes the content and converts the result to
						// a string for us
						var text = html.Text;

						File.WriteAllText (Path.Combine (directory, "body.html"), text);
					}

					// now iterate over all of the attachments and save them to disk
					foreach (var attachment in item.Attachments) {
						// download the attachment just like we did with the body
						var entity = client.Inbox.GetBodyPart (item.UniqueId, attachment);

						// attachments can be either message/rfc822 parts or regular MIME parts
						if (entity is MessagePart) {
							var rfc822 = (MessagePart) entity;

							var path = Path.Combine (directory, attachment.PartSpecifier + ".eml");

							rfc822.Message.WriteTo (path);
						} else {
							var part = (MimePart) entity;

							// default to using the sending client's suggested fileName value
							var fileName = attachment.FileName;

							if (string.IsNullOrEmpty (fileName)) {
								// the FileName wasn't defined, so generate one...
								if (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))
									extension = ".dat";

								fileName = Guid.NewGuid ().ToString () + extension;
							}

							var path = Path.Combine (directory, fileName);

							// decode and save the content to a file
							using (var stream = File.Create (path))
								part.Content.DecodeTo (stream);
						}
					}
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region GetBodyPartsByUniqueIdAndSpecifier
		public static void DownloadBodyAndAttachments (string baseDirectory)
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				// search for messages where the Subject header contains either "MimeKit" or "MailKit"
				var query = SearchQuery.SubjectContains ("MimeKit").Or (SearchQuery.SubjectContains ("MailKit"));
				var uids = client.Inbox.Search (query);

				// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE
				// of each message so that we can extract the text body and the attachments)
				var items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);

				foreach (var item in items) {
					// determine a directory to save stuff in
					var directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());

					// create the directory
					Directory.CreateDirectory (directory);

					// IMessageSummary.TextBody is a convenience property that finds the 'text/plain' body part for us
					var bodyPart = item.TextBody;

					if (bodyPart != null) {
						// download the 'text/plain' body part

						// Note: In general, you should use `GetBodyPart(item.UniqueId, bodyPart)` instead if you have it available.
						// This particular overload of the GetBodyPart() method exists for convenience purposes where you already
						// know the body-part specifier string before-hand.
						var plain = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart.PartSpecifier);

						// TextPart.Text is a convenience property that decodes the content and converts the result to
						// a string for us
						var text = plain.Text;

						File.WriteAllText (Path.Combine (directory, "body.txt"), text);
					}

					// IMessageSummary.HtmlBody is a convenience property that finds the 'text/html' body part for us
					bodyPart = item.HtmlBody;

					if (bodyPart != null) {
						// download the 'text/html' body part

						// Note: In general, you should use `GetBodyPart(item.UniqueId, bodyPart)` instead if you have it available.
						// This particular overload of the GetBodyPart() method exists for convenience purposes where you already
						// know the body-part specifier string before-hand.
						var html = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart.PartSpecifier);

						// TextPart.Text is a convenience property that decodes the content and converts the result to
						// a string for us
						var text = html.Text;

						File.WriteAllText (Path.Combine (directory, "body.html"), text);
					}

					// now iterate over all of the attachments and save them to disk
					foreach (var attachment in item.Attachments) {
						// download the attachment just like we did with the body
						var entity = client.Inbox.GetBodyPart (item.UniqueId, attachment);

						// attachments can be either message/rfc822 parts or regular MIME parts
						if (entity is MessagePart) {
							var rfc822 = (MessagePart) entity;

							var path = Path.Combine (directory, attachment.PartSpecifier + ".eml");

							rfc822.Message.WriteTo (path);
						} else {
							var part = (MimePart) entity;

							// default to using the sending client's suggested fileName value
							var fileName = attachment.FileName;

							if (string.IsNullOrEmpty (fileName)) {
								// the FileName wasn't defined, so generate one...
								if (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))
									extension = ".dat";

								fileName = Guid.NewGuid ().ToString () + extension;
							}

							var path = Path.Combine (directory, fileName);

							// decode and save the content to a file
							using (var stream = File.Create (path))
								part.Content.DecodeTo (stream);
						}
					}
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region GetBodyPartStreamsByUniqueId
		public static void CacheBodyParts (string baseDirectory)
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				// search for messages where the Subject header contains either "MimeKit" or "MailKit"
				var query = SearchQuery.SubjectContains ("MimeKit").Or (SearchQuery.SubjectContains ("MailKit"));
				var uids = client.Inbox.Search (query);

				// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE
				// of each message so that we can extract the text body and the attachments)
				var items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);

				foreach (var item in items) {
					// determine a directory to save stuff in
					var directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());

					// create the directory
					Directory.CreateDirectory (directory);

					// now iterate over all of the body parts and save them to disk
					foreach (var bodyPart in item.BodyParts) {
						// cache the raw body part MIME just like we did with the body
						using (var stream = client.Inbox.GetStream (item.UniqueId, bodyPart)) {
							var path = Path.Combine (directory, bodyPart.PartSpecifier);

							using (var output = File.Create (path))
								stream.CopyTo (output);
						}
					}
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region GetBodyPartStreamsByUniqueIdAndSpecifier
		public static void SaveAttachments (string baseDirectory)
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				// search for messages where the Subject header contains either "MimeKit" or "MailKit"
				var query = SearchQuery.SubjectContains ("MimeKit").Or (SearchQuery.SubjectContains ("MailKit"));
				var uids = client.Inbox.Search (query);

				// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE
				// of each message so that we can extract the text body and the attachments)
				var items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);

				foreach (var item in items) {
					// determine a directory to save stuff in
					var directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());

					// create the directory
					Directory.CreateDirectory (directory);

					// now iterate over all of the attachments and decode/save the content to disk
					foreach (var attachment in item.Attachments) {
						// default to using the sending client's suggested fileName value
						string fileName = attachment.FileName;

						if (string.IsNullOrEmpty (fileName)) {
							// the FileName wasn't defined, so generate one...
							if (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))
								extension = ".dat";

							fileName = Guid.NewGuid ().ToString () + extension;
						}

						// we'll need the Content-Transfer-Encoding value so that we can decode it...
						ContentEncoding encoding;

						if (string.IsNullOrEmpty (attachment.ContentTransferEncoding) || !MimeUtils.TryParse (attachment.ContentTransferEncoding, out encoding))
							encoding = ContentEncoding.Default;

						// if all we want is the content (rather than the entire MIME part including the headers), then
						// we want the ".TEXT" section of the part
						using (var stream = client.Inbox.GetStream (item.UniqueId, attachment.PartSpecifier + ".TEXT")) {
							// wrap the attachment content in a MimeContent object to help us decode it
							using (var content = new MimeContent (stream, encoding)) {
								var path = Path.Combine (directory, fileName);

								// decode the attachment content to the file stream
								using (var output = File.Create (path))
									content.DecodeTo (output);
							}
						}
					}
				}

				client.Disconnect (true);
			}
		}
		#endregion
	}
}


================================================
FILE: Documentation/Examples/ImapExamples.cs
================================================
//
// ImapExamples.cs
//
// Author: Jeffrey Stedfast <jestedfa@microsoft.com>
//
// Copyright (c) 2013-2023 .NET Foundation and Contributors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//

using System;
using System.Collections;
using System.Collections.Generic;

using MimeKit;
using MailKit;
using MailKit.Search;
using MailKit.Security;
using MailKit.Net.Imap;

namespace MailKit.Examples {
	public static class ImapExamples
	{
		#region ProtocolLogger
		public static void DownloadMessages ()
		{
			using (var client = new ImapClient (new ProtocolLogger ("imap.log"))) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				var uids = client.Inbox.Search (SearchQuery.All);

				foreach (var uid in uids) {
					var message = client.Inbox.GetMessage (uid);

					// write the message to a file
					message.WriteTo (string.Format ("{0}.eml", uid));
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region Capabilities
		public static void Capabilities ()
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				var mechanisms = string.Join (", ", client.AuthenticationMechanisms);
				Console.WriteLine ("The IMAP server supports the following SASL authentication mechanisms: {0}", mechanisms);

				client.Authenticate ("username", "password");

				if (client.Capabilities.HasFlag (ImapCapabilities.Id)) {
					var clientImplementation = new ImapImplementation { Name = "MailKit", Version = "1.0" };
					var serverImplementation = client.Identify (clientImplementation);

					Console.WriteLine ("Server implementation details:");
					foreach (var property in serverImplementation.Properties)
						Console.WriteLine ("  {0} = {1}", property.Key, property.Value);
				}

				if (client.Capabilities.HasFlag (ImapCapabilities.Acl)) {
					Console.WriteLine ("The IMAP server supports Access Control Lists.");

					Console.WriteLine ("The IMAP server supports the following access rights: {0}", client.Rights);

					Console.WriteLine ("The Inbox has the following access controls:");
					var acl = client.Inbox.GetAccessControlList ();
					foreach (var ac in acl)
						Console.WriteLine ("  {0} = {1}", ac.Name, ac.Rights);

					var myRights = client.Inbox.GetMyAccessRights ();
					Console.WriteLine ("Your current rights for the Inbox folder are: {0}", myRights);
				}

				if (client.Capabilities.HasFlag (ImapCapabilities.Quota)) {
					Console.WriteLine ("The IMAP server supports quotas.");

					Console.WriteLine ("The current quota for the Inbox is:");
					var quota = client.Inbox.GetQuota ();

					if (quota.StorageLimit.HasValue)
						Console.WriteLine ("  Limited by storage space. Using {0} out of {1} bytes.", quota.CurrentStorageSize.Value, quota.StorageLimit.Value);

					if (quota.MessageLimit.HasValue)
						Console.WriteLine ("  Limited by the number of messages. Using {0} out of {1} bytes.", quota.CurrentMessageCount.Value, quota.MessageLimit.Value);

					Console.WriteLine ("The quota root is: {0}", quota.QuotaRoot);
				}

				if (client.Capabilities.HasFlag (ImapCapabilities.Thread)) {
					if (client.ThreadingAlgorithms.Contains (ThreadingAlgorithm.OrderedSubject))
						Console.WriteLine ("The IMAP server supports threading by subject.");
					if (client.ThreadingAlgorithms.Contains (ThreadingAlgorithm.References))
						Console.WriteLine ("The IMAP server supports threading by references.");
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region Namespaces
		public static void ShowNamespaces ()
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.mail-server.com", 993, SecureSocketOptions.SslOnConnect);
				client.Authenticate ("username", "password");

				Console.WriteLine ("Personal namespaces:");
				foreach (var ns in client.PersonalNamespaces)
					Console.WriteLine ($"* \"{ns.Path}\" \"{ns.DirectorySeparator}\"");
				Console.WriteLine ();
				Console.WriteLine ("Shared namespaces:");
				foreach (var ns in client.SharedNamespaces)
					Console.WriteLine ($"* \"{ns.Path}\" \"{ns.DirectorySeparator}\"");
				Console.WriteLine ();
				Console.WriteLine ("Other namespaces:");
				foreach (var ns in client.OtherNamespaces)
					Console.WriteLine ($"* \"{ns.Path}\" \"{ns.DirectorySeparator}\"");
				Console.WriteLine ();

				// get the folder that represents the first personal namespace
				var personal = client.GetFolder (client.PersonalNamespaces[0]);

				// list the folders under the first personal namespace
				var subfolders = personal.GetSubfolders ();

				Console.WriteLine ("The list of folders that are direct children of the first personal namespace:");
				foreach (var folder in subfolders)
					Console.WriteLine ($"* {folder.Name}");

				client.Disconnect (true);
			}
		}
		#endregion

		#region DownloadMessagesByUniqueId
		public static void DownloadMessages ()
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				var uids = client.Inbox.Search (SearchQuery.All);

				foreach (var uid in uids) {
					var message = client.Inbox.GetMessage (uid);

					// write the message to a file
					message.WriteTo (string.Format ("{0}.eml", uid));
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region DownloadMessageStreamsByUniqueId
		public static void DownloadMessages ()
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				var uids = client.Inbox.Search (SearchQuery.All);

				foreach (var uid in uids) {
					using (var stream = client.Inbox.GetStream (uid)) {
						using (var output = File.Create ($"{uid}.eml"))
							stream.CopyTo (output);
					}
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region DownloadMessagesByIndex
		public static void DownloadMessages ()
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				for (int index = 0; index < client.Inbox.Count; index++) {
					var message = client.Inbox.GetMessage (index);

					// write the message to a file
					message.WriteTo (string.Format ("{0}.eml", index));
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region DownloadMessageStreamsByIndex
		public static void DownloadMessages ()
		{
			using (var client = new ImapClient ()) {
				client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);

				client.Authenticate ("username", "password");

				client.Inbox.Open (FolderAccess.ReadOnly);

				for (int index = 0; index < client.Inbox.Count; index++) {
					using (var stream = client.Inbox.GetStream (index)) {
						using (var output = File.Create ($"{index}.eml"))
							stream.CopyTo (output);
					}
				}

				client.Disconnect (true);
			}
		}
		#endregion

		#region SslConnectionInformation
		public static void PrintSslConnectionInfo (string host, int port)
		{
			using (var client = new ImapClient ()) {
				client.Connect (host, port, SecureSocketOptions.Auto);

				Console.WriteLine ($"Negotiated the following SSL options with {host}:");
				Console.WriteLine ($"        Protocol Version: {client.SslProtocol}");
				Console.WriteLine ($"        Cipher Algorithm: {client.SslCipherAlgorithm}");
				Console.WriteLine ($"         Cipher Strength: {client.SslCipherStrength}");
				Console.WriteLine ($"          Hash Algorithm: {client.SslHashAlgorithm}");
				Console.WriteLine ($"           Hash Strength: {client.SslHashStrength}");
				Console.WriteLine ($"  Key-Exchange Algorithm: {client.SslKeyExchangeAlgorithm}");
				Console.WriteLine ($"   Key-Exchange Strength: {client.SslKeyExchangeStrength}");

				// Example Log:
				//
				// Negotiated the following SSL options with imap.gmail.com:
				//         Protocol Version: Tls12
				//         Cipher Algorithm: Aes128
				//          Cipher Strength: 128
				//           Hash Algorithm: Sha256
				//            Hash Strength: 0
				//   Key-Exchange Algorithm: 44550
				//    Key-Exchange Strength: 255

				client.Disconnect (true);
			}
		}
		#endregion
	}
}


================================================
FILE: Documentation/Examples/ImapIdleExample.cs
================================================
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;

using MailKit;
using MailKit.Net.Imap;
using MailKit.Security;

namespace ImapIdleExample {
	class Program
	{
		// Connection-related properties
		const SecureSocketOptions SslOptions = SecureSocketOptions.Auto;
		const string Host = "imap.gmail.com";
		const int Port = 993;

		// Authentication-related properties
		const string Username = "username@gmail.com";
		const string Password = "password";

		public static void Main (string[] args)
		{
			using (var client = new IdleClient (Host, Port, SslOptions, Username, Password)) {
				Console.WriteLine ("Hit any key to end the demo.");

				var idleTask = client.RunAsync ();

				Task.Run (() => {
					Console.ReadKey (true);
				}).Wait ();

				client.Exit ();

				idleTask.GetAwaiter ().GetResult ();
			}
		}
	}

	class IdleClient : IDisposable
	{
		readonly string host, username, password;
		readonly SecureSocketOptions sslOptions;
		readonly int port;
		List<IMessageSummary> messages;
		CancellationTokenSource cancel;
		CancellationTokenSource done;
		FetchRequest request;
		bool messagesArrived;
		ImapClient client;

		public IdleClient (string host, int port, SecureSocketOptions sslOptions, string username, string password)
		{
			this.client = new ImapClient (new ProtocolLogger (Console.OpenStandardError ()));
			this.request = new FetchRequest (MessageSummaryItems.Full | MessageSummaryItems.UniqueId);
			this.messages = new List<IMessageSummary> ();
			this.cancel = new CancellationTokenSource ();
			this.sslOptions = sslOptions;
			this.username = username;
			this.password = password;
			this.host = host;
			this.port = port;
		}

		async Task ReconnectAsync ()
		{
			if (!client.IsConnected)
				await client.ConnectAsync (host, port, sslOptions, cancel.Token);

			if (!client.IsAuthenticated) {
				await client.AuthenticateAsync (username, password, cancel.Token);

				await client.Inbox.OpenAsync (FolderAccess.ReadOnly, cancel.Token);
			}
		}

		async Task FetchMessageSummariesAsync (bool print)
		{
			IList<IMessageSummary> fetched = null;

			do {
				try {
					// fetch summary information for messages that we don't already have
					int startIndex = messages.Count;

					fetched = client.Inbox.Fetch (startIndex, -1, request, cancel.Token);
					break;
				} catch (ImapProtocolException) {
					// protocol exceptions often result in the client getting disconnected
					await ReconnectAsync ();
				} catch (IOException) {
					// I/O exceptions always result in the client getting disconnected
					await ReconnectAsync ();
				}
			} while (true);

			foreach (var message in fetched) {
				if (print)
					Console.WriteLine ("{0}: new message: {1}", client.Inbox, message.Envelope.Subject);
				messages.Add (message);
			}
		}

		async Task WaitForNewMessagesAsync ()
		{
			do {
				try {
					if (client.Capabilities.HasFlag (ImapCapabilities.Idle)) {
						// Note: IMAP servers are only supposed to drop the connection after 30 minutes, so normally
						// we'd IDLE for a max of, say, ~29 minutes... but GMail seems to drop idle connections after
						// about 10 minutes, so we'll only idle for 9 minutes.
						done = new CancellationTokenSource (new TimeSpan (0, 9, 0));
						try {
							await client.IdleAsync (done.Token, cancel.Token);
						} finally {
							done.Dispose ();
							done = null;
						}
					} else {
						// Note: we don't want to spam the IMAP server with NOOP commands, so lets wait a minute
						// between each NOOP command.
						await Task.Delay (new TimeSpan (0, 1, 0), cancel.Token);
						await client.NoOpAsync (cancel.Token);
					}
					break;
				} catch (ImapProtocolException) {
					// protocol exceptions often result in the client getting disconnected
					await ReconnectAsync ();
				} catch (IOException) {
					// I/O exceptions always result in the client getting disconnected
					await ReconnectAsync ();
				}
			} while (true);
		}

		async Task IdleAsync ()
		{
			do {
				try {
					await WaitForNewMessagesAsync ();

					if (messagesArrived) {
						await FetchMessageSummariesAsync (true);
						messagesArrived = false;
					}
				} catch (OperationCanceledException) {
					break;
				}
			} while (!cancel.IsCancellationRequested);
		}

		public async Task RunAsync ()
		{
			// connect to the IMAP server and get our initial list of messages
			try {
				await ReconnectAsync ();
				await FetchMessageSummariesAsync (false);
			} catch (OperationCanceledException) {
				await client.DisconnectAsync (true);
				return;
			}

			// Note: We capture client.Inbox here because cancelling IdleAsync() *may* require
			// disconnecting the IMAP client connection, and, if it does, the `client.Inbox`
			// property will no longer be accessible which means we won't be able to disconnect
			// our event handlers.
			var inbox = client.Inbox;

			// keep track of changes to the number of messages in the folder (this is how we'll tell if new messages have arrived).
			inbox.CountChanged += OnCountChanged;

			// keep track of messages being expunged so that when the CountChanged event fires, we can tell if it's
			// because new messages have arrived vs messages being removed (or some combination of the two).
			inbox.MessageExpunged += OnMessageExpunged;

			// keep track of flag changes
			inbox.MessageFlagsChanged += OnMessageFlagsChanged;

			await IdleAsync ();

			inbox.MessageFlagsChanged -= OnMessageFlagsChanged;
			inbox.MessageExpunged -= OnMessageExpunged;
			inbox.CountChanged -= OnCountChanged;

			await client.DisconnectAsync (true);
		}

		// Note: the CountChanged event will fire when new messages arrive in the folder and/or when messages are expunged.
		void OnCountChanged (object sender, EventArgs e)
		{
			var folder = (ImapFolder) sender;

			// Note: because we are keeping track of the MessageExpunged event and updating our
			// 'messages' list, we know that if we get a CountChanged event and folder.Count is
			// larger than messages.Count, then it means that new messages have arrived.
			if (folder.Count > messages.Count) {
				int arrived = folder.Count - messages.Count;

				if (arrived > 1)
					Console.WriteLine ("\t{0} new messages have arrived.", arrived);
				else
					Console.WriteLine ("\t1 new message has arrived.");

				// Note: your first instinct may be to fetch these new messages now, but you cannot do
				// that in this event handler (the ImapFolder is not re-entrant).
				//
				// Instead, cancel the `done` token and update our state so that we know new messages
				// have arrived. We'll fetch the summaries for these new messages later...
				messagesArrived = true;
				done?.Cancel ();
			}
		}

		void OnMessageExpunged (object sender, MessageEventArgs e)
		{
			var folder = (ImapFolder) sender;

			if (e.Index < messages.Count) {
				var message = messages[e.Index];

				Console.WriteLine ("{0}: message #{1} has been expunged: {2}", folder, e.Index, message.Envelope.Subject);

				// Note: If you are keeping a local cache of message information
				// (e.g. MessageSummary data) for the folder, then you'll need
				// to remove the message at e.Index.
				messages.RemoveAt (e.Index);
			} else {
				Console.WriteLine ("{0}: message #{1} has been expunged.", folder, e.Index);
			}
		}

		void OnMessageFlagsChanged (object sender, MessageFlagsChangedEventArgs e)
		{
			var folder = (ImapFolder) sender;

			Console.WriteLine ("{0}: flags have changed for message #{1} ({2}).", folder, e.Index, e.Flags);
		}

		public void Exit ()
		{
			cancel.Cancel ();
		}

		public void Dispose ()
		{
			client.Dispose ();
			cancel.Dispose ();
		}
	}
}


================================================
FILE: Documentation/Examples/InlinePGPExample.txt
================================================
Return-Path: <pgp-enthusiast@example.com>
Received: from [127.0.0.1] (hostname.example.com. [201.95.8.17])
    by mx.google.com with ESMTPSA id l67sm26628445yha.8.2014.04.27.13.49.44
    for <pgp-enthusiast@example.com>
    (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
    Sun, 27 Apr 2014 13:49:44 -0700 (PDT)
Message-ID: <535D6D67.8020803@example.com>
Date: Sun, 27 Apr 2014 17:49:43 -0300
From: Die-Hard PGP Fan <pgp-enthusiast@example.com>
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0
MIME-Version: 1.0
To: undisclosed-recipients:;
Subject: Test of inline encrypted PGP blocks
X-Enigmail-Version: 1.6
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Antivirus: avast! (VPS 140427-1, 27/04/2014), Outbound message
X-Antivirus-Status: Clean

-----BEGIN PGP MESSAGE-----
Charset: ISO-8859-1
Version: GnuPG v2.0.22 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

SGFoISBJIGZvb2xlZCB5b3UsIHRoaXMgdGV4dCBpc24ndCBhY3R1YWxseSBlbmNy
eXB0ZWQgd2l0aCBQR1AsCml0
Download .txt
gitextract_1og2imlt/

├── .config/
│   └── dotnet-tools.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── aot-compatibility.yml
│       ├── codeql.yml
│       └── main.yml
├── .gitignore
├── .gitmodules
├── AotCompatibility/
│   ├── AotCompatibility.csproj
│   └── Program.cs
├── Documentation/
│   ├── Content/
│   │   ├── Creating-Messages.aml
│   │   ├── Frequently-Asked-Questions.aml
│   │   ├── Getting-Started.aml
│   │   ├── Introduction.aml
│   │   ├── License.aml
│   │   ├── Parsing-Messages.aml
│   │   ├── Working-With-Messages.aml
│   │   ├── Working-With-OpenPGP.aml
│   │   └── Working-With-SMime.aml
│   ├── ContentLayout.content
│   ├── Documentation.shfbproj
│   └── Examples/
│       ├── ArcSignerExample.cs
│       ├── ArcVerifierExample.cs
│       ├── AttachmentExamples.cs
│       ├── BodyBuilder.cs
│       ├── CreateMultipartAlternative.cs
│       ├── CreateMultipartMixed.cs
│       ├── CreateSimpleMessage.cs
│       ├── DecodingContent.cs
│       ├── DkimExamples.cs
│       ├── DkimVerifierExample.cs
│       ├── ForwardExamples.cs
│       ├── ImapBodyPartExamples.cs
│       ├── ImapExamples.cs
│       ├── ImapIdleExample.cs
│       ├── InlinePGPExample.txt
│       ├── MessageDeliveryStatusExamples.cs
│       ├── MimeIterator.cs
│       ├── MimeMessageLoad.cs
│       ├── MimeParserExamples.cs
│       ├── MimeVisitorExamples.cs
│       ├── MultipartFormDataExamples.cs
│       ├── OAuth2ExchangeExample.cs
│       ├── OAuth2GMailExample.cs
│       ├── OpenPGPExamples.cs
│       ├── OpeningContent.cs
│       ├── ParameterExamples.cs
│       ├── Pop3Examples.cs
│       ├── ProxyExamples.cs
│       ├── RecursivelyTraverse.cs
│       ├── SMimeExamples.cs
│       ├── SmtpExamples.cs
│       ├── SslCertificateValidation.cs
│       └── VerifySignature.cs
├── ExchangeOAuth2.md
├── FAQ.md
├── GMailOAuth2.md
├── LICENSE
├── MailKit/
│   ├── AccessControl.cs
│   ├── AccessControlList.cs
│   ├── AccessRight.cs
│   ├── AccessRights.cs
│   ├── AlertEventArgs.cs
│   ├── Annotation.cs
│   ├── AnnotationAccess.cs
│   ├── AnnotationAttribute.cs
│   ├── AnnotationEntry.cs
│   ├── AnnotationScope.cs
│   ├── AnnotationsChangedEventArgs.cs
│   ├── AppendRequest.cs
│   ├── AuthenticatedEventArgs.cs
│   ├── BodyPart.cs
│   ├── BodyPartBasic.cs
│   ├── BodyPartCollection.cs
│   ├── BodyPartMessage.cs
│   ├── BodyPartMultipart.cs
│   ├── BodyPartText.cs
│   ├── BodyPartVisitor.cs
│   ├── ByteArrayBuilder.cs
│   ├── CommandException.cs
│   ├── CompressedStream.cs
│   ├── ConnectedEventArgs.cs
│   ├── DeliveryStatusNotification.cs
│   ├── DeliveryStatusNotificationType.cs
│   ├── DisconnectedEventArgs.cs
│   ├── DuplexStream.cs
│   ├── Envelope.cs
│   ├── FetchRequest.cs
│   ├── FolderAccess.cs
│   ├── FolderAttributes.cs
│   ├── FolderCreatedEventArgs.cs
│   ├── FolderFeature.cs
│   ├── FolderNamespace.cs
│   ├── FolderNamespaceCollection.cs
│   ├── FolderNotFoundException.cs
│   ├── FolderNotOpenException.cs
│   ├── FolderQuota.cs
│   ├── FolderRenamedEventArgs.cs
│   ├── HeaderSet.cs
│   ├── IAppendRequest.cs
│   ├── IAuthenticationSecretDetector.cs
│   ├── IFetchRequest.cs
│   ├── IMailFolder.cs
│   ├── IMailFolderAppendExtensions.cs
│   ├── IMailFolderFetchExtensions.cs
│   ├── IMailFolderStoreExtensions.cs
│   ├── IMailService.cs
│   ├── IMailSpool.cs
│   ├── IMailStore.cs
│   ├── IMailTransport.cs
│   ├── IMessageSummary.cs
│   ├── IProtocolLogger.cs
│   ├── IReplaceRequest.cs
│   ├── IStoreFlagsRequest.cs
│   ├── IStoreLabelsRequest.cs
│   ├── IStoreRequest.cs
│   ├── ITransferProgress.cs
│   ├── MailFolder.cs
│   ├── MailKit.csproj
│   ├── MailKitLite.csproj
│   ├── MailService.cs
│   ├── MailSpool.cs
│   ├── MailStore.cs
│   ├── MailTransport.cs
│   ├── MessageEventArgs.cs
│   ├── MessageFlags.cs
│   ├── MessageFlagsChangedEventArgs.cs
│   ├── MessageLabelsChangedEventArgs.cs
│   ├── MessageNotFoundException.cs
│   ├── MessageSentEventArgs.cs
│   ├── MessageSorter.cs
│   ├── MessageSummary.cs
│   ├── MessageSummaryFetchedEventArgs.cs
│   ├── MessageSummaryItems.cs
│   ├── MessageThread.cs
│   ├── MessageThreader.cs
│   ├── MessagesVanishedEventArgs.cs
│   ├── Metadata.cs
│   ├── MetadataChangedEventArgs.cs
│   ├── MetadataCollection.cs
│   ├── MetadataOptions.cs
│   ├── MetadataTag.cs
│   ├── ModSeqChangedEventArgs.cs
│   ├── Net/
│   │   ├── ClientMetrics.cs
│   │   ├── IChannelBindingContext.cs
│   │   ├── Imap/
│   │   │   ├── AsyncImapClient.cs
│   │   │   ├── IImapClient.cs
│   │   │   ├── IImapFolder.cs
│   │   │   ├── ImapAuthenticationSecretDetector.cs
│   │   │   ├── ImapCallbacks.cs
│   │   │   ├── ImapCapabilities.cs
│   │   │   ├── ImapClient.cs
│   │   │   ├── ImapCommand.cs
│   │   │   ├── ImapCommandException.cs
│   │   │   ├── ImapCommandResponse.cs
│   │   │   ├── ImapCommandStatus.cs
│   │   │   ├── ImapEncoding.cs
│   │   │   ├── ImapEngine.cs
│   │   │   ├── ImapEventGroup.cs
│   │   │   ├── ImapFolder.cs
│   │   │   ├── ImapFolderAnnotations.cs
│   │   │   ├── ImapFolderConstructorArgs.cs
│   │   │   ├── ImapFolderFetch.cs
│   │   │   ├── ImapFolderFlags.cs
│   │   │   ├── ImapFolderSearch.cs
│   │   │   ├── ImapIdleContext.cs
│   │   │   ├── ImapImplementation.cs
│   │   │   ├── ImapLiteral.cs
│   │   │   ├── ImapProtocolException.cs
│   │   │   ├── ImapResponseCode.cs
│   │   │   ├── ImapSearchQueryOptimizer.cs
│   │   │   ├── ImapStream.cs
│   │   │   ├── ImapToken.cs
│   │   │   └── ImapUtils.cs
│   │   ├── NetworkOperation.cs
│   │   ├── NetworkStream.cs
│   │   ├── Pop3/
│   │   │   ├── AsyncPop3Client.cs
│   │   │   ├── IPop3Client.cs
│   │   │   ├── Pop3AuthenticationSecretDetector.cs
│   │   │   ├── Pop3Capabilities.cs
│   │   │   ├── Pop3Client.cs
│   │   │   ├── Pop3Command.cs
│   │   │   ├── Pop3CommandException.cs
│   │   │   ├── Pop3Engine.cs
│   │   │   ├── Pop3Language.cs
│   │   │   ├── Pop3ProtocolException.cs
│   │   │   └── Pop3Stream.cs
│   │   ├── Proxy/
│   │   │   ├── HttpProxyClient.cs
│   │   │   ├── HttpsProxyClient.cs
│   │   │   ├── IProxyClient.cs
│   │   │   ├── ProxyClient.cs
│   │   │   ├── ProxyProtocolException.cs
│   │   │   ├── Socks4Client.cs
│   │   │   ├── Socks4aClient.cs
│   │   │   ├── Socks5Client.cs
│   │   │   ├── SocksClient.cs
│   │   │   └── WebProxyClient.cs
│   │   ├── SelectMode.cs
│   │   ├── Smtp/
│   │   │   ├── AsyncSmtpClient.cs
│   │   │   ├── ISmtpClient.cs
│   │   │   ├── SmtpAuthenticationSecretDetector.cs
│   │   │   ├── SmtpCapabilities.cs
│   │   │   ├── SmtpClient.cs
│   │   │   ├── SmtpCommandException.cs
│   │   │   ├── SmtpDataFilter.cs
│   │   │   ├── SmtpErrorCode.cs
│   │   │   ├── SmtpProtocolException.cs
│   │   │   ├── SmtpResponse.cs
│   │   │   ├── SmtpStatusCode.cs
│   │   │   └── SmtpStream.cs
│   │   ├── SocketMetrics.cs
│   │   ├── SocketUtils.cs
│   │   └── SslStream.cs
│   ├── NullProtocolLogger.cs
│   ├── PreviewOptions.cs
│   ├── ProgressStream.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ProtocolException.cs
│   ├── ProtocolLogger.cs
│   ├── ReplaceRequest.cs
│   ├── Search/
│   │   ├── AnnotationSearchQuery.cs
│   │   ├── BinarySearchQuery.cs
│   │   ├── DateSearchQuery.cs
│   │   ├── FilterSearchQuery.cs
│   │   ├── HeaderSearchQuery.cs
│   │   ├── ISearchQueryOptimizer.cs
│   │   ├── NumericSearchQuery.cs
│   │   ├── OrderBy.cs
│   │   ├── OrderByAnnotation.cs
│   │   ├── OrderByType.cs
│   │   ├── SearchOptions.cs
│   │   ├── SearchQuery.cs
│   │   ├── SearchResults.cs
│   │   ├── SearchTerm.cs
│   │   ├── SortOrder.cs
│   │   ├── TextSearchQuery.cs
│   │   ├── UidSearchQuery.cs
│   │   └── UnarySearchQuery.cs
│   ├── Security/
│   │   ├── AuthenticationException.cs
│   │   ├── KeyedHashAlgorithm.cs
│   │   ├── Ntlm/
│   │   │   ├── BitConverterLE.cs
│   │   │   ├── DES.cs
│   │   │   ├── HMACMD5.cs
│   │   │   ├── MD4.cs
│   │   │   ├── NtlmAttribute.cs
│   │   │   ├── NtlmAttributeValuePair.cs
│   │   │   ├── NtlmAuthenticateMessage.cs
│   │   │   ├── NtlmChallengeMessage.cs
│   │   │   ├── NtlmFlags.cs
│   │   │   ├── NtlmMessageBase.cs
│   │   │   ├── NtlmNegotiateMessage.cs
│   │   │   ├── NtlmSingleHostData.cs
│   │   │   ├── NtlmTargetInfo.cs
│   │   │   ├── NtlmUtils.cs
│   │   │   └── RC4.cs
│   │   ├── RandomNumberGenerator.cs
│   │   ├── SaslException.cs
│   │   ├── SaslMechanism.cs
│   │   ├── SaslMechanismAnonymous.cs
│   │   ├── SaslMechanismCramMd5.cs
│   │   ├── SaslMechanismDigestMd5.cs
│   │   ├── SaslMechanismGssapi.cs
│   │   ├── SaslMechanismLogin.cs
│   │   ├── SaslMechanismNegotiateBase.cs
│   │   ├── SaslMechanismNtlm.cs
│   │   ├── SaslMechanismNtlmNative.cs
│   │   ├── SaslMechanismOAuth2.cs
│   │   ├── SaslMechanismOAuthBearer.cs
│   │   ├── SaslMechanismPlain.cs
│   │   ├── SaslMechanismScramBase.cs
│   │   ├── SaslMechanismScramSha1.cs
│   │   ├── SaslMechanismScramSha256.cs
│   │   ├── SaslMechanismScramSha512.cs
│   │   ├── SecureSocketOptions.cs
│   │   └── SslHandshakeException.cs
│   ├── ServiceNotAuthenticatedException.cs
│   ├── ServiceNotConnectedException.cs
│   ├── SpecialFolder.cs
│   ├── StatusItems.cs
│   ├── StoreAction.cs
│   ├── StoreFlagsRequest.cs
│   ├── StoreLabelsRequest.cs
│   ├── Telemetry.cs
│   ├── TextEncodings.cs
│   ├── ThreadingAlgorithm.cs
│   ├── UniqueId.cs
│   ├── UniqueIdMap.cs
│   ├── UniqueIdRange.cs
│   ├── UniqueIdSet.cs
│   ├── UriExtensions.cs
│   ├── WebAlertEventArgs.cs
│   └── mailkit.snk
├── MailKit.Coverity.sln
├── MailKit.Documentation.sln
├── MailKit.sln
├── MailKitLite.sln
├── README.md
├── RFCs.md
├── ReleaseNotes.md
├── SECURITY.md
├── TODO.md
├── Telemetry.md
├── UnitTests/
│   ├── AccessControlListTests.cs
│   ├── AnnotationAttributeTests.cs
│   ├── AnnotationEntryTests.cs
│   ├── AnnotationTests.cs
│   ├── AppendRequestTests.cs
│   ├── ArgumentExceptionTests.cs
│   ├── BodyPartTests.cs
│   ├── CompressedStreamTests.cs
│   ├── DuplexStreamTests.cs
│   ├── EnvelopeTests.cs
│   ├── EventArgsTests.cs
│   ├── ExceptionTests.cs
│   ├── ExceptionalProtocolLogger.cs
│   ├── FolderNamespaceTests.cs
│   ├── HeaderSetTests.cs
│   ├── MailServiceTests.cs
│   ├── MessageSortingTests.cs
│   ├── MessageSummaryTests.cs
│   ├── MessageThreadingTests.cs
│   ├── MetadataTests.cs
│   ├── Net/
│   │   ├── DummyNetworkStream.cs
│   │   ├── Imap/
│   │   │   ├── ImapAuthenticationSecretDetectorTests.cs
│   │   │   ├── ImapClientTests.cs
│   │   │   ├── ImapCommandExceptionTests.cs
│   │   │   ├── ImapCommandTests.cs
│   │   │   ├── ImapEncodingTests.cs
│   │   │   ├── ImapEngineTests.cs
│   │   │   ├── ImapEventGroupTests.cs
│   │   │   ├── ImapFolderAnnotationsTests.cs
│   │   │   ├── ImapFolderFetchTests.cs
│   │   │   ├── ImapFolderFlagsTests.cs
│   │   │   ├── ImapFolderSearchTests.cs
│   │   │   ├── ImapFolderTests.cs
│   │   │   ├── ImapImplementationTests.cs
│   │   │   ├── ImapReplayStream.cs
│   │   │   ├── ImapSearchQueryOptimizerTests.cs
│   │   │   ├── ImapStreamTests.cs
│   │   │   ├── ImapUtilsTests.cs
│   │   │   └── Resources/
│   │   │       ├── acl/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── getacl.txt
│   │   │       │   ├── listrights.txt
│   │   │       │   └── myrights.txt
│   │   │       ├── common/
│   │   │       │   ├── basic-greeting.txt
│   │   │       │   ├── capability-greeting.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── fetch-annotations.txt
│   │   │       │   ├── getquota-no-root.txt
│   │   │       │   ├── getquota.txt
│   │   │       │   ├── id.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── list-literal-subfolders.txt
│   │   │       │   ├── list-namespace.txt
│   │   │       │   ├── list-nil-folder-delim.txt
│   │   │       │   ├── message.0.msg
│   │   │       │   ├── message.1.msg
│   │   │       │   ├── message.10.msg
│   │   │       │   ├── message.11.msg
│   │   │       │   ├── message.12.msg
│   │   │       │   ├── message.13.msg
│   │   │       │   ├── message.14.msg
│   │   │       │   ├── message.15.msg
│   │   │       │   ├── message.16.msg
│   │   │       │   ├── message.17.msg
│   │   │       │   ├── message.18.msg
│   │   │       │   ├── message.19.msg
│   │   │       │   ├── message.2.msg
│   │   │       │   ├── message.20.msg
│   │   │       │   ├── message.21.msg
│   │   │       │   ├── message.22.msg
│   │   │       │   ├── message.23.msg
│   │   │       │   ├── message.24.msg
│   │   │       │   ├── message.25.msg
│   │   │       │   ├── message.26.msg
│   │   │       │   ├── message.27.msg
│   │   │       │   ├── message.28.msg
│   │   │       │   ├── message.29.msg
│   │   │       │   ├── message.3.msg
│   │   │       │   ├── message.30.msg
│   │   │       │   ├── message.31.msg
│   │   │       │   ├── message.32.msg
│   │   │       │   ├── message.33.msg
│   │   │       │   ├── message.34.msg
│   │   │       │   ├── message.35.msg
│   │   │       │   ├── message.36.msg
│   │   │       │   ├── message.37.msg
│   │   │       │   ├── message.38.msg
│   │   │       │   ├── message.39.msg
│   │   │       │   ├── message.4.msg
│   │   │       │   ├── message.40.msg
│   │   │       │   ├── message.41.msg
│   │   │       │   ├── message.42.msg
│   │   │       │   ├── message.43.msg
│   │   │       │   ├── message.44.msg
│   │   │       │   ├── message.45.msg
│   │   │       │   ├── message.46.msg
│   │   │       │   ├── message.47.msg
│   │   │       │   ├── message.48.msg
│   │   │       │   ├── message.49.msg
│   │   │       │   ├── message.5.msg
│   │   │       │   ├── message.6.msg
│   │   │       │   ├── message.7.msg
│   │   │       │   ├── message.8.msg
│   │   │       │   ├── message.9.msg
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── preauth-capability-greeting.txt
│   │   │       │   ├── preauth-greeting.txt
│   │   │       │   ├── select-inbox-annotate-no-modseq.txt
│   │   │       │   ├── select-inbox-annotate-none.txt
│   │   │       │   ├── select-inbox-annotate-readonly.txt
│   │   │       │   ├── select-inbox-annotate.txt
│   │   │       │   ├── select-inbox-no-modseq.txt
│   │   │       │   ├── select-inbox.txt
│   │   │       │   ├── setquota.txt
│   │   │       │   └── status-literal-folder.txt
│   │   │       ├── courier/
│   │   │       │   ├── capability.txt
│   │   │       │   └── greeting.txt
│   │   │       ├── cyrus/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   └── greeting.txt
│   │   │       ├── domino/
│   │   │       │   ├── capability.txt
│   │   │       │   ├── fetch-extra-parens.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   └── namespace.txt
│   │   │       ├── dovecot/
│   │   │       │   ├── append.1.txt
│   │   │       │   ├── append.2.txt
│   │   │       │   ├── append.3.txt
│   │   │       │   ├── append.4.txt
│   │   │       │   ├── append.5.txt
│   │   │       │   ├── append.6.txt
│   │   │       │   ├── append.7.txt
│   │   │       │   ├── append.8.txt
│   │   │       │   ├── authenticate+annotate+replace.txt
│   │   │       │   ├── authenticate+annotate.txt
│   │   │       │   ├── authenticate+filters.txt
│   │   │       │   ├── authenticate+fuzzy.txt
│   │   │       │   ├── authenticate+gmail-capabilities.txt
│   │   │       │   ├── authenticate+replace.txt
│   │   │       │   ├── authenticate+savedate.txt
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── copy.txt
│   │   │       │   ├── enable-qresync.txt
│   │   │       │   ├── examine-folder.txt
│   │   │       │   ├── expunge.txt
│   │   │       │   ├── fetch1.txt
│   │   │       │   ├── fetch2.txt
│   │   │       │   ├── fetch3.txt
│   │   │       │   ├── fetch4.txt
│   │   │       │   ├── getbodypart.txt
│   │   │       │   ├── getbodypart1.txt
│   │   │       │   ├── getbodypartheaders.txt
│   │   │       │   ├── getmessageheaders.txt
│   │   │       │   ├── getstream-section.txt
│   │   │       │   ├── getstream-section2.txt
│   │   │       │   ├── getstream.txt
│   │   │       │   ├── getstream2.txt
│   │   │       │   ├── getstreams1.txt
│   │   │       │   ├── getstreams2.txt
│   │   │       │   ├── greeting-preauth.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-folder.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── list-personal.txt
│   │   │       │   ├── list-special-use.txt
│   │   │       │   ├── list-unittests-destination.txt
│   │   │       │   ├── list-unittests-messages.txt
│   │   │       │   ├── list-unittests.txt
│   │   │       │   ├── move.txt
│   │   │       │   ├── multiappend.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── noop+alert.txt
│   │   │       │   ├── notify-idle-done.txt
│   │   │       │   ├── notify-idle.txt
│   │   │       │   ├── notify-list-personal.txt
│   │   │       │   ├── notify.txt
│   │   │       │   ├── optimized-search.txt
│   │   │       │   ├── search-all.txt
│   │   │       │   ├── search-changed-since.txt
│   │   │       │   ├── search-raw.txt
│   │   │       │   ├── search-uids-options.txt
│   │   │       │   ├── search-uids.txt
│   │   │       │   ├── select-unittests-destination.txt
│   │   │       │   ├── select-unittests-messages-qresync.txt
│   │   │       │   ├── select-unittests-messages.txt
│   │   │       │   ├── setflags-unchangedsince.txt
│   │   │       │   ├── sort-by-date.txt
│   │   │       │   ├── sort-by-strings.txt
│   │   │       │   ├── sort-raw.txt
│   │   │       │   ├── sort-reverse-arrival.txt
│   │   │       │   ├── sort-uids-options.txt
│   │   │       │   ├── status-unittests-destination.txt
│   │   │       │   ├── store-answered.txt
│   │   │       │   ├── store-deleted-custom.txt
│   │   │       │   ├── store-deleted.txt
│   │   │       │   ├── store-seen.txt
│   │   │       │   ├── thread-orderedsubject.txt
│   │   │       │   ├── thread-references.txt
│   │   │       │   └── uid-expunge.txt
│   │   │       ├── exchange/
│   │   │       │   ├── capability-postauth.txt
│   │   │       │   ├── capability-preauth.txt
│   │   │       │   ├── greeting-2003.txt
│   │   │       │   ├── greeting-2007.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   └── issue115.txt
│   │   │       ├── gmail/
│   │   │       │   ├── add-flags.txt
│   │   │       │   ├── add-labels.txt
│   │   │       │   ├── append.1.txt
│   │   │       │   ├── append.10.txt
│   │   │       │   ├── append.11.txt
│   │   │       │   ├── append.12.txt
│   │   │       │   ├── append.13.txt
│   │   │       │   ├── append.14.txt
│   │   │       │   ├── append.15.txt
│   │   │       │   ├── append.16.txt
│   │   │       │   ├── append.17.txt
│   │   │       │   ├── append.18.txt
│   │   │       │   ├── append.19.txt
│   │   │       │   ├── append.2.txt
│   │   │       │   ├── append.20.txt
│   │   │       │   ├── append.21.txt
│   │   │       │   ├── append.22.txt
│   │   │       │   ├── append.23.txt
│   │   │       │   ├── append.24.txt
│   │   │       │   ├── append.25.txt
│   │   │       │   ├── append.26.txt
│   │   │       │   ├── append.27.txt
│   │   │       │   ├── append.28.txt
│   │   │       │   ├── append.29.txt
│   │   │       │   ├── append.3.txt
│   │   │       │   ├── append.30.txt
│   │   │       │   ├── append.31.txt
│   │   │       │   ├── append.32.txt
│   │   │       │   ├── append.33.txt
│   │   │       │   ├── append.34.txt
│   │   │       │   ├── append.35.txt
│   │   │       │   ├── append.36.txt
│   │   │       │   ├── append.37.txt
│   │   │       │   ├── append.38.txt
│   │   │       │   ├── append.39.txt
│   │   │       │   ├── append.4.txt
│   │   │       │   ├── append.40.txt
│   │   │       │   ├── append.41.txt
│   │   │       │   ├── append.42.txt
│   │   │       │   ├── append.43.txt
│   │   │       │   ├── append.44.txt
│   │   │       │   ├── append.45.txt
│   │   │       │   ├── append.46.txt
│   │   │       │   ├── append.47.txt
│   │   │       │   ├── append.48.txt
│   │   │       │   ├── append.49.txt
│   │   │       │   ├── append.5.txt
│   │   │       │   ├── append.50.txt
│   │   │       │   ├── append.6.txt
│   │   │       │   ├── append.7.txt
│   │   │       │   ├── append.8.txt
│   │   │       │   ├── append.9.txt
│   │   │       │   ├── authenticate+annotate.txt
│   │   │       │   ├── authenticate+create-special-use.txt
│   │   │       │   ├── authenticate+preview.txt
│   │   │       │   ├── authenticate+savedate.txt
│   │   │       │   ├── authenticate+statussize+objectid.txt
│   │   │       │   ├── authenticate+webalert.txt
│   │   │       │   ├── authenticate-no-appendlimit-value.txt
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability+login.txt
│   │   │       │   ├── capability+logindisabled.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── count-explicit.noop.txt
│   │   │       │   ├── count-implicit.noop.txt
│   │   │       │   ├── count.examine.txt
│   │   │       │   ├── create-mailboxid.txt
│   │   │       │   ├── examine-inbox.txt
│   │   │       │   ├── expunge-during-fetch.txt
│   │   │       │   ├── expunge.txt
│   │   │       │   ├── fetch-all-headers.txt
│   │   │       │   ├── fetch-invalid-headers.txt
│   │   │       │   ├── fetch-korean-previewtext-bodystructure.txt
│   │   │       │   ├── fetch-korean-previewtext-peek-text-only.txt
│   │   │       │   ├── fetch-nil-bodystructure.txt
│   │   │       │   ├── fetch-nil.txt
│   │   │       │   ├── fetch-objectid.txt
│   │   │       │   ├── fetch-preview.txt
│   │   │       │   ├── fetch-previewtext-bodystructure.txt
│   │   │       │   ├── fetch-previewtext-peek-html-only.txt
│   │   │       │   ├── fetch-previewtext-peek-text-alternative.txt
│   │   │       │   ├── fetch-previewtext-peek-text-only.txt
│   │   │       │   ├── fetch-quoted-string-bodystructure.txt
│   │   │       │   ├── fetch-quoted-string.txt
│   │   │       │   ├── fetch-savedate.txt
│   │   │       │   ├── fetch.1+unsolicited-info.txt
│   │   │       │   ├── fetch.1.txt
│   │   │       │   ├── fetch.11.txt
│   │   │       │   ├── fetch.12.txt
│   │   │       │   ├── fetch.13.txt
│   │   │       │   ├── fetch.14.txt
│   │   │       │   ├── fetch.2.txt
│   │   │       │   ├── fetch.26.txt
│   │   │       │   ├── fetch.27.txt
│   │   │       │   ├── fetch.28.txt
│   │   │       │   ├── fetch.29.txt
│   │   │       │   ├── fetch.3.txt
│   │   │       │   ├── fetch.31.txt
│   │   │       │   ├── fetch.34.txt
│   │   │       │   ├── fetch.41.txt
│   │   │       │   ├── fetch.42.txt
│   │   │       │   ├── fetch.43.txt
│   │   │       │   ├── fetch.5.txt
│   │   │       │   ├── fetch.50.txt
│   │   │       │   ├── fetch.7.txt
│   │   │       │   ├── fetch.8.txt
│   │   │       │   ├── fetch.9.txt
│   │   │       │   ├── get-indexes.txt
│   │   │       │   ├── go-ahead.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── headers.1+unsolicited-info.txt
│   │   │       │   ├── idle-done.txt
│   │   │       │   ├── idle.txt
│   │   │       │   ├── list-all-no-status.txt
│   │   │       │   ├── list-all.txt
│   │   │       │   ├── list-archived-messages.txt
│   │   │       │   ├── list-archives.txt
│   │   │       │   ├── list-flagged.txt
│   │   │       │   ├── list-gmail-subfolders-no-status.txt
│   │   │       │   ├── list-gmail-subfolders.txt
│   │   │       │   ├── list-gmail.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── list-level1.txt
│   │   │       │   ├── list-level2.txt
│   │   │       │   ├── list-level3.txt
│   │   │       │   ├── list-personal-status-appendlimit.txt
│   │   │       │   ├── list-personal.txt
│   │   │       │   ├── list-sublevel1.txt
│   │   │       │   ├── list-sublevel2.txt
│   │   │       │   ├── list-toplevel1.txt
│   │   │       │   ├── list-toplevel2.txt
│   │   │       │   ├── list-unittests-dummy.txt
│   │   │       │   ├── list-unittests.txt
│   │   │       │   ├── logout.txt
│   │   │       │   ├── lsub-all.txt
│   │   │       │   ├── lsub-personal.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── precise-pangolin-message.txt
│   │   │       │   ├── rename-unittests.txt
│   │   │       │   ├── search-deleted-not-1-3.txt
│   │   │       │   ├── search-summary.txt
│   │   │       │   ├── search.txt
│   │   │       │   ├── select-inbox.txt
│   │   │       │   ├── select-sublevel1.txt
│   │   │       │   ├── select-sublevel2.txt
│   │   │       │   ├── select-toplevel.txt
│   │   │       │   ├── select-unittests.txt
│   │   │       │   ├── set-flags.txt
│   │   │       │   ├── set-labels.txt
│   │   │       │   ├── status-+folder.txt
│   │   │       │   ├── status-all-mail.txt
│   │   │       │   ├── status-drafts.txt
│   │   │       │   ├── status-important.txt
│   │   │       │   ├── status-inbox-appendlimit-nil.txt
│   │   │       │   ├── status-inbox-appendlimit.txt
│   │   │       │   ├── status-inbox.txt
│   │   │       │   ├── status-sent-mail.txt
│   │   │       │   ├── status-spam.txt
│   │   │       │   ├── status-starred.txt
│   │   │       │   ├── status-trash.txt
│   │   │       │   ├── uid-copy.txt
│   │   │       │   ├── uid-expunge.txt
│   │   │       │   ├── uid-move.txt
│   │   │       │   ├── utf8accept.txt
│   │   │       │   └── xlist.txt
│   │   │       ├── icloud/
│   │   │       │   ├── authenticate-plain.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── enable-qresync.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   └── namespace.txt
│   │   │       ├── lowercase/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   └── list.txt
│   │   │       ├── metadata/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── getmetadata-multi.txt
│   │   │       │   ├── getmetadata-options.txt
│   │   │       │   ├── getmetadata.txt
│   │   │       │   ├── inbox-getmetadata-multi.txt
│   │   │       │   ├── inbox-getmetadata-options.txt
│   │   │       │   ├── inbox-getmetadata.txt
│   │   │       │   ├── inbox-setmetadata-maxsize.txt
│   │   │       │   ├── inbox-setmetadata-noprivate.txt
│   │   │       │   ├── inbox-setmetadata-toomany.txt
│   │   │       │   ├── setmetadata-maxsize.txt
│   │   │       │   ├── setmetadata-noprivate.txt
│   │   │       │   └── setmetadata-toomany.txt
│   │   │       ├── protonmail/
│   │   │       │   ├── capability.txt
│   │   │       │   └── greeting.txt
│   │   │       ├── qqmail/
│   │   │       │   └── greeting.txt
│   │   │       ├── smartermail/
│   │   │       │   └── greeting.txt
│   │   │       ├── strato.de/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   └── xlist.txt
│   │   │       ├── uw/
│   │   │       │   ├── greeting.txt
│   │   │       │   └── preauth-greeting.txt
│   │   │       ├── yahoo/
│   │   │       │   ├── capabilities.txt
│   │   │       │   ├── examine-inbox.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   └── search.txt
│   │   │       ├── yandex/
│   │   │       │   ├── authenticate.txt
│   │   │       │   ├── capability.txt
│   │   │       │   ├── getbodypart-missing-content.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-inbox.txt
│   │   │       │   ├── namespace.txt
│   │   │       │   ├── select-inbox.txt
│   │   │       │   └── xlist.txt
│   │   │       └── zoho/
│   │   │           ├── authenticate.txt
│   │   │           ├── capability.txt
│   │   │           ├── examine-gesendet.txt
│   │   │           ├── fetch-negative-modseq-values.txt
│   │   │           ├── greeting.txt
│   │   │           ├── list-inbox.txt
│   │   │           ├── namespace.txt
│   │   │           └── xlist.txt
│   │   ├── NetworkStreamTests.cs
│   │   ├── Pop3/
│   │   │   ├── Pop3AuthenticationSecretDetectorTests.cs
│   │   │   ├── Pop3ClientTests.cs
│   │   │   ├── Pop3CommandExceptionTests.cs
│   │   │   ├── Pop3ReplayStream.cs
│   │   │   ├── Pop3StreamTests.cs
│   │   │   └── Resources/
│   │   │       ├── comcast/
│   │   │       │   ├── capa1.txt
│   │   │       │   ├── capa2.txt
│   │   │       │   ├── err.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list-error1.txt
│   │   │       │   ├── list-error2.txt
│   │   │       │   ├── list-error3.txt
│   │   │       │   ├── list.txt
│   │   │       │   ├── list1-error1.txt
│   │   │       │   ├── list1-error2.txt
│   │   │       │   ├── list1-error3.txt
│   │   │       │   ├── list1.txt
│   │   │       │   ├── ok.txt
│   │   │       │   ├── quit.txt
│   │   │       │   ├── retr1.txt
│   │   │       │   ├── stat-error1.txt
│   │   │       │   ├── stat-error2.txt
│   │   │       │   ├── stat-error3.txt
│   │   │       │   └── stat.txt
│   │   │       ├── common/
│   │   │       │   ├── err-greeting.txt
│   │   │       │   └── ok-greeting.txt
│   │   │       ├── exchange/
│   │   │       │   ├── auth.txt
│   │   │       │   ├── capa.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── plus.txt
│   │   │       │   ├── quit.txt
│   │   │       │   ├── retr1.txt
│   │   │       │   ├── stat.txt
│   │   │       │   └── uidl.txt
│   │   │       ├── gmail/
│   │   │       │   ├── auth.txt
│   │   │       │   ├── capa1.txt
│   │   │       │   ├── capa2.txt
│   │   │       │   ├── dele.txt
│   │   │       │   ├── dele123.txt
│   │   │       │   ├── greeting.txt
│   │   │       │   ├── list.txt
│   │   │       │   ├── list1.txt
│   │   │       │   ├── list2.txt
│   │   │       │   ├── list3.txt
│   │   │       │   ├── noop.txt
│   │   │       │   ├── plus.txt
│   │   │       │   ├── quit.txt
│   │   │       │   ├── retr1-parse-error.txt
│   │   │       │   ├── retr1.txt
│   │   │       │   ├── retr123.txt
│   │   │       │   ├── rset.txt
│   │   │       │   ├── stat.txt
│   │   │       │   ├── top.txt
│   │   │       │   ├── top123.txt
│   │   │       │   ├── uidl-error1.txt
│   │   │       │   ├── uidl-error2.txt
│   │   │       │   ├── uidl.txt
│   │   │       │   ├── uidl1-error1.txt
│   │   │       │   ├── uidl1-error2.txt
│   │   │       │   ├── uidl1.txt
│   │   │       │   ├── uidl2.txt
│   │   │       │   └── uidl3.txt
│   │   │       └── lang/
│   │   │           ├── auth.txt
│   │   │           ├── capa1.txt
│   │   │           ├── capa2.txt
│   │   │           ├── getlang.txt
│   │   │           ├── greeting.txt
│   │   │           ├── quit.txt
│   │   │           ├── setlang.txt
│   │   │           ├── stat.txt
│   │   │           └── utf8.txt
│   │   ├── Proxy/
│   │   │   ├── HttpProxyClientTests.cs
│   │   │   ├── HttpProxyListener.cs
│   │   │   ├── HttpsProxyClientTests.cs
│   │   │   ├── ProxyListener.cs
│   │   │   ├── ProxyProtocolExceptionTests.cs
│   │   │   ├── Socks4ClientTests.cs
│   │   │   ├── Socks4ProxyListener.cs
│   │   │   ├── Socks4aClientTests.cs
│   │   │   ├── Socks4aProxyListener.cs
│   │   │   ├── Socks5ClientTests.cs
│   │   │   ├── Socks5ProxyListener.cs
│   │   │   └── WebProxyClientTests.cs
│   │   ├── Smtp/
│   │   │   ├── Resources/
│   │   │   │   ├── auth-failed.txt
│   │   │   │   ├── auth-required.txt
│   │   │   │   ├── auth-successful.txt
│   │   │   │   ├── auth-too-weak.txt
│   │   │   │   ├── bad-command-sequence.txt
│   │   │   │   ├── comcast-auth-digest-md5-reset.txt
│   │   │   │   ├── comcast-auth-digest-md5-response.txt
│   │   │   │   ├── comcast-auth-digest-md5.txt
│   │   │   │   ├── comcast-auth-login-password.txt
│   │   │   │   ├── comcast-auth-login-username.txt
│   │   │   │   ├── comcast-auth-login.txt
│   │   │   │   ├── comcast-auth-plain.txt
│   │   │   │   ├── comcast-data-done.txt
│   │   │   │   ├── comcast-data.txt
│   │   │   │   ├── comcast-ehlo+binarymime.txt
│   │   │   │   ├── comcast-ehlo+digest-md5.txt
│   │   │   │   ├── comcast-ehlo+dsn.txt
│   │   │   │   ├── comcast-ehlo+pipelining.txt
│   │   │   │   ├── comcast-ehlo+requiretls.txt
│   │   │   │   ├── comcast-ehlo+smtputf8.txt
│   │   │   │   ├── comcast-ehlo+x-exps.txt
│   │   │   │   ├── comcast-ehlo.txt
│   │   │   │   ├── comcast-greeting.txt
│   │   │   │   ├── comcast-mail-from.txt
│   │   │   │   ├── comcast-noop.txt
│   │   │   │   ├── comcast-quit.txt
│   │   │   │   ├── comcast-rcpt-to.txt
│   │   │   │   ├── comcast-rset.txt
│   │   │   │   ├── ehlo-failed.txt
│   │   │   │   ├── greeting-not-ready.txt
│   │   │   │   ├── helo.txt
│   │   │   │   ├── mailbox-unavailable.txt
│   │   │   │   ├── pipelined-mail-from-rcpt-to.txt
│   │   │   │   ├── pipelined-mailbox-unavailable.txt
│   │   │   │   ├── rfc0821-expn.txt
│   │   │   │   └── rfc0821-vrfy.txt
│   │   │   ├── SmtpAuthenticationSecretDetectorTests.cs
│   │   │   ├── SmtpClientTests.cs
│   │   │   ├── SmtpCommandExceptionTests.cs
│   │   │   ├── SmtpDataFilterTests.cs
│   │   │   ├── SmtpProtocolExceptionTests.cs
│   │   │   ├── SmtpReplayStream.cs
│   │   │   └── SmtpStreamTests.cs
│   │   └── SocketUtilsTests.cs
│   ├── ProgressStreamTests.cs
│   ├── ProtocolLoggerTests.cs
│   ├── ReplaceRequestTests.cs
│   ├── Search/
│   │   └── SearchQueryTests.cs
│   ├── Security/
│   │   ├── AuthenticationExceptionTests.cs
│   │   ├── ChannelBindingContext.cs
│   │   ├── Ntlm/
│   │   │   ├── MD4Tests.cs
│   │   │   ├── NtlmAuthenticateMessageTests.cs
│   │   │   ├── NtlmChallengeMessageTests.cs
│   │   │   ├── NtlmNegotiateMessageTests.cs
│   │   │   ├── NtlmSingleHostDataTests.cs
│   │   │   ├── NtlmTargetInfoTests.cs
│   │   │   └── RC4Tests.cs
│   │   ├── SaslExceptionTests.cs
│   │   ├── SaslMechanismAnonymousTests.cs
│   │   ├── SaslMechanismCramMd5Tests.cs
│   │   ├── SaslMechanismDigestMd5Tests.cs
│   │   ├── SaslMechanismLoginTests.cs
│   │   ├── SaslMechanismNtlmTests.cs
│   │   ├── SaslMechanismOAuth2Tests.cs
│   │   ├── SaslMechanismOAuthBearerTests.cs
│   │   ├── SaslMechanismPlainTests.cs
│   │   ├── SaslMechanismScramSha1Tests.cs
│   │   ├── SaslMechanismScramSha256Tests.cs
│   │   ├── SaslMechanismScramSha512Tests.cs
│   │   ├── SaslMechanismTests.cs
│   │   └── SslHandshakeExceptionTests.cs
│   ├── StoreFlagsRequestTests.cs
│   ├── StoreLabelsRequestTests.cs
│   ├── TestHelper.cs
│   ├── UniqueIdMapTests.cs
│   ├── UniqueIdRangeTests.cs
│   ├── UniqueIdSetTests.cs
│   ├── UniqueIdTests.cs
│   ├── UnitTests.csproj
│   └── UriExtensionTests.cs
├── cov-build.bat
├── nuget/
│   ├── GettingStarted.md
│   ├── MailKit.nuspec
│   └── MailKitLite.nuspec
├── rfc/
│   ├── SOCKS4.protocol
│   ├── draft-murchison-sasl-login-00.txt
│   ├── rfc0821.txt
│   ├── rfc1652.txt
│   ├── rfc1730.txt
│   ├── rfc1731.txt
│   ├── rfc1734.txt
│   ├── rfc1854.txt
│   ├── rfc1870.txt
│   ├── rfc1891.txt
│   ├── rfc1928.txt
│   ├── rfc1929.txt
│   ├── rfc1939.txt
│   ├── rfc1961.txt
│   ├── rfc2034.txt
│   ├── rfc2060.txt
│   ├── rfc2086.txt
│   ├── rfc2087.txt
│   ├── rfc2088.txt
│   ├── rfc2177.txt
│   ├── rfc2193.txt
│   ├── rfc2195.txt
│   ├── rfc2197.txt
│   ├── rfc2221.txt
│   ├── rfc2222.txt
│   ├── rfc2245.txt
│   ├── rfc2342.txt
│   ├── rfc2359.txt
│   ├── rfc2449.txt
│   ├── rfc2487.txt
│   ├── rfc2554.txt
│   ├── rfc2595.txt
│   ├── rfc2683.txt
│   ├── rfc2821.txt
│   ├── rfc2831.txt
│   ├── rfc2920.txt
│   ├── rfc2971.txt
│   ├── rfc3030.txt
│   ├── rfc3207.txt
│   ├── rfc3348.txt
│   ├── rfc3461.txt
│   ├── rfc3501.txt
│   ├── rfc3502.txt
│   ├── rfc3516.txt
│   ├── rfc3691.txt
│   ├── rfc4013.txt
│   ├── rfc4314.txt
│   ├── rfc4315.txt
│   ├── rfc4466.txt
│   ├── rfc4469.txt
│   ├── rfc4505.txt
│   ├── rfc4551.txt
│   ├── rfc4616.txt
│   ├── rfc4731.txt
│   ├── rfc4959.txt
│   ├── rfc4978.txt
│   ├── rfc5032.txt
│   ├── rfc5161.txt
│   ├── rfc5162.txt
│   ├── rfc5182.txt
│   ├── rfc5255.txt
│   ├── rfc5256.txt
│   ├── rfc5257.txt
│   ├── rfc5258.txt
│   ├── rfc5259.txt
│   ├── rfc5267.txt
│   ├── rfc5321.txt
│   ├── rfc5464.txt
│   ├── rfc5465.txt
│   ├── rfc5466.txt
│   ├── rfc5530.txt
│   ├── rfc5788.txt
│   ├── rfc5801.txt
│   ├── rfc5802.txt
│   ├── rfc5819.txt
│   ├── rfc5957.txt
│   ├── rfc6154.txt
│   ├── rfc6203.txt
│   ├── rfc6237.txt
│   ├── rfc6531.txt
│   ├── rfc6851.txt
│   ├── rfc6855.txt
│   ├── rfc6856.txt
│   ├── rfc7162.txt
│   ├── rfc7377.txt
│   ├── rfc7628.txt
│   ├── rfc7677.txt
│   ├── rfc7888.txt
│   ├── rfc7889.txt
│   ├── rfc8437.txt
│   ├── rfc8438.txt
│   ├── rfc8440.txt
│   ├── rfc8457.txt
│   ├── rfc8474.txt
│   ├── rfc8508.txt
│   ├── rfc8514.txt
│   ├── rfc8689.txt
│   ├── rfc8970.txt
│   ├── rfc9051.txt
│   ├── rfc9208.txt
│   └── rfc9394.txt
├── samples/
│   ├── ImapClientDemo/
│   │   ├── .gitignore
│   │   ├── ImapClientDemo/
│   │   │   ├── App.config
│   │   │   ├── AuthenticationFailedEventArgs.cs
│   │   │   ├── ClientCommand.cs
│   │   │   ├── ClientCommandPipeline.cs
│   │   │   ├── ClientConnection.cs
│   │   │   ├── ClientConnections.cs
│   │   │   ├── CommandFailedEventArgs.cs
│   │   │   ├── ConnectionFailedEventArgs.cs
│   │   │   ├── CustomTaskScheduler.cs
│   │   │   ├── FolderNameComparer.cs
│   │   │   ├── FolderSelectedEventArgs.cs
│   │   │   ├── FolderTreeView.cs
│   │   │   ├── ImapClientDemo.csproj
│   │   │   ├── LoginWindow.Designer.cs
│   │   │   ├── LoginWindow.cs
│   │   │   ├── LoginWindow.resx
│   │   │   ├── MainWindow.Designer.cs
│   │   │   ├── MainWindow.cs
│   │   │   ├── MainWindow.resx
│   │   │   ├── MessageInfo.cs
│   │   │   ├── MessageList.cs
│   │   │   ├── MessageSelectedEventArgs.cs
│   │   │   ├── MultipartRelatedImageContext.cs
│   │   │   ├── Program.cs
│   │   │   └── Properties/
│   │   │       ├── AssemblyInfo.cs
│   │   │       ├── Resources.Designer.cs
│   │   │       ├── Resources.resx
│   │   │       ├── Settings.Designer.cs
│   │   │       └── Settings.settings
│   │   └── ImapClientDemo.sln
│   ├── ImapClientDemo.Android/
│   │   ├── ImapClientDemo.Android/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── FoldersActivity.cs
│   │   │   ├── ImapClientDemo.Android.csproj
│   │   │   ├── LoginActivity.cs
│   │   │   ├── Mail.cs
│   │   │   ├── MainActivity.cs
│   │   │   ├── MessageListActivity.cs
│   │   │   ├── MessageViewActivity.cs
│   │   │   └── Resources/
│   │   │       ├── AboutResources.txt
│   │   │       ├── Resource.designer.cs
│   │   │       ├── layout/
│   │   │       │   ├── FoldersLayout.xml
│   │   │       │   ├── LoginLayout.xml
│   │   │       │   ├── Main.xml
│   │   │       │   ├── MessageListItemLayout.xml
│   │   │       │   ├── MessagesLayout.xml
│   │   │       │   └── ViewMessageLayout.xml
│   │   │       ├── mipmap-anydpi-v26/
│   │   │       │   ├── appicon.xml
│   │   │       │   └── appicon_round.xml
│   │   │       └── values/
│   │   │           ├── Strings.xml
│   │   │           └── themes.xml
│   │   └── ImapClientDemo.Android.sln
│   ├── ImapClientDemo.iOS/
│   │   ├── ImapClientDemo.iOS/
│   │   │   ├── AppDelegate.cs
│   │   │   ├── Assets.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Entitlements.plist
│   │   │   ├── FoldersViewController.cs
│   │   │   ├── ImapClientDemo.iOS.csproj
│   │   │   ├── Info.plist
│   │   │   ├── LaunchScreen.storyboard
│   │   │   ├── LoginViewController.cs
│   │   │   ├── Mail.cs
│   │   │   ├── Main.cs
│   │   │   ├── MessageListViewController.cs
│   │   │   ├── MessageViewController.cs
│   │   │   ├── MultipartRelatedUrlCache.cs
│   │   │   ├── Resources/
│   │   │   │   └── LaunchScreen.xib
│   │   │   └── SceneDelegate.cs
│   │   └── ImapClientDemo.iOS.sln
│   └── ImapIdle/
│       ├── .gitignore
│       ├── ImapIdle/
│       │   ├── IdleClient.cs
│       │   ├── ImapIdle.csproj
│       │   └── Program.cs
│       └── ImapIdle.sln
└── scripts/
    ├── coveralls.ps1
    ├── test-aot-compatibility.ps1
    ├── test.ps1
    └── update-version.ps1
Download .txt
Showing preview only (496K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5201 symbols across 392 files)

FILE: AotCompatibility/Program.cs
  class Program (line 37) | class Program
    method Main (line 39) | static int Main (string[] args)

FILE: Documentation/Examples/ArcSignerExample.cs
  class ExampleArcSigner (line 13) | class ExampleArcSigner : ArcSigner
    method ExampleArcSigner (line 15) | public ExampleArcSigner (Stream stream, string domain, string selector...
    method ExampleArcSigner (line 19) | public ExampleArcSigner (string fileName, string domain, string select...
    method ExampleArcSigner (line 23) | public ExampleArcSigner (AsymmetricKeyParameter key, string domain, st...
    method GenerateArcAuthenticationResults (line 44) | protected override AuthenticationResults GenerateArcAuthenticationResu...
    method GenerateArcAuthenticationResultsAsync (line 69) | protected override Task<AuthenticationResults> GenerateArcAuthenticati...
  class Program (line 75) | class Program
    method Main (line 77) | public static void Main (string[] args)
    method Help (line 116) | static void Help ()

FILE: Documentation/Examples/ArcVerifierExample.cs
  class ExamplePublicKeyLocator (line 19) | class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase
    method ExamplePublicKeyLocator (line 24) | public ExamplePublicKeyLocator ()
    method DnsLookup (line 35) | AsymmetricKeyParameter DnsLookup (string domain, string selector, Canc...
    method LocatePublicKey (line 64) | public AsymmetricKeyParameter LocatePublicKey (string methods, string ...
    method LocatePublicKeyAsync (line 75) | public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string metho...
  class Program (line 83) | class Program
    method Main (line 85) | public static void Main (string[] args)
    method Help (line 131) | static void Help ()

FILE: Documentation/Examples/AttachmentExamples.cs
  class AttachmentExamples (line 7) | public static class AttachmentExamples
    method SaveMimePart (line 9) | public static void SaveMimePart (MimePart attachment, string fileName)
    method SaveMimePart (line 17) | public static void SaveMimePart (MessagePart attachment, string fileName)
    method SaveAttachments (line 25) | public static void SaveAttachments (MimeMessage message)
    method SaveAttachments (line 49) | public static void SaveAttachments (MimeMessage message)

FILE: Documentation/Examples/BodyBuilder.cs
  class Program (line 5) | public class Program
    method Complex (line 7) | public static void Complex ()
    method Simple (line 49) | public static void Simple ()

FILE: Documentation/Examples/DkimExamples.cs
  class DkimExamples (line 8) | public static class DkimExamples
    method DkimSign (line 11) | public static void DkimSign (MimeMessage message)

FILE: Documentation/Examples/DkimVerifierExample.cs
  class ExamplePublicKeyLocator (line 19) | class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase
    method ExamplePublicKeyLocator (line 24) | public ExamplePublicKeyLocator ()
    method DnsLookup (line 35) | AsymmetricKeyParameter DnsLookup (string domain, string selector, Canc...
    method LocatePublicKey (line 64) | public AsymmetricKeyParameter LocatePublicKey (string methods, string ...
    method LocatePublicKeyAsync (line 75) | public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string metho...
  class Program (line 83) | class Program
    method Main (line 85) | public static void Main (string[] args)
    method Help (line 134) | static void Help ()

FILE: Documentation/Examples/ForwardExamples.cs
  class ForwardExamples (line 37) | public static class ForwardExamples
    method Forward (line 40) | public static MimeMessage Forward (MimeMessage original, MailboxAddres...
    method Forward (line 71) | public static MimeMessage Forward (MimeMessage original, MailboxAddres...

FILE: Documentation/Examples/ImapBodyPartExamples.cs
  class ImapBodyPartExamples (line 38) | public static class ImapBodyPartExamples
    method DownloadBodyAndAttachments (line 41) | public static void DownloadBodyAndAttachments (string baseDirectory)
    method DownloadBodyAndAttachments (line 134) | public static void DownloadBodyAndAttachments (string baseDirectory)
    method CacheBodyParts (line 235) | public static void CacheBodyParts (string baseDirectory)
    method SaveAttachments (line 277) | public static void SaveAttachments (string baseDirectory)

FILE: Documentation/Examples/ImapExamples.cs
  class ImapExamples (line 38) | public static class ImapExamples
    method DownloadMessages (line 41) | public static void DownloadMessages ()
    method Capabilities (line 65) | public static void Capabilities ()
    method ShowNamespaces (line 126) | public static void ShowNamespaces ()
    method DownloadMessages (line 161) | public static void DownloadMessages ()
    method DownloadMessages (line 185) | public static void DownloadMessages ()
    method DownloadMessages (line 209) | public static void DownloadMessages ()
    method DownloadMessages (line 231) | public static void DownloadMessages ()
    method PrintSslConnectionInfo (line 253) | public static void PrintSslConnectionInfo (string host, int port)

FILE: Documentation/Examples/ImapIdleExample.cs
  class Program (line 12) | class Program
    method Main (line 23) | public static void Main (string[] args)
  class IdleClient (line 41) | class IdleClient : IDisposable
    method IdleClient (line 53) | public IdleClient (string host, int port, SecureSocketOptions sslOptio...
    method ReconnectAsync (line 66) | async Task ReconnectAsync ()
    method FetchMessageSummariesAsync (line 78) | async Task FetchMessageSummariesAsync (bool print)
    method WaitForNewMessagesAsync (line 105) | async Task WaitForNewMessagesAsync ()
    method IdleAsync (line 137) | async Task IdleAsync ()
    method RunAsync (line 153) | public async Task RunAsync ()
    method OnCountChanged (line 190) | void OnCountChanged (object sender, EventArgs e)
    method OnMessageExpunged (line 215) | void OnMessageExpunged (object sender, MessageEventArgs e)
    method OnMessageFlagsChanged (line 233) | void OnMessageFlagsChanged (object sender, MessageFlagsChangedEventArg...
    method Exit (line 240) | public void Exit ()
    method Dispose (line 245) | public void Dispose ()

FILE: Documentation/Examples/MessageDeliveryStatusExamples.cs
  class MessageDeliveryStatusExamples (line 33) | public static class MessageDeliveryStatusExamples
    method ProcessDeliveryStatusNotification (line 36) | public void ProcessDeliveryStatusNotification (MimeMessage message)

FILE: Documentation/Examples/MimeParserExamples.cs
  class MimeParserExamples (line 9) | class MimeParserExamples
    method ParseMessage (line 12) | public static MimeMessage ParseMessage (string fileName)
    method ParseMbox (line 24) | public static void ParseMbox (string fileName)
    class MimeOffsets (line 44) | class MimeOffsets
    method MimeOffsetsExample (line 67) | public static void MimeOffsetsExample (string fileName)

FILE: Documentation/Examples/MimeVisitorExamples.cs
  class HtmlPreviewVisitor (line 43) | class HtmlPreviewVisitor : MimeVisitor
    method HtmlPreviewVisitor (line 52) | public HtmlPreviewVisitor ()
    method VisitMultipartAlternative (line 70) | protected override void VisitMultipartAlternative (MultipartAlternativ...
    method VisitMultipartRelated (line 77) | protected override void VisitMultipartRelated (MultipartRelated related)
    method TryGetImage (line 92) | bool TryGetImage (string url, out MimePart image)
    method GetDataUri (line 134) | string GetDataUri (MimePart image)
    method HtmlTagCallback (line 148) | void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)
    method VisitTextPart (line 208) | protected override void VisitTextPart (TextPart entity)
    method VisitTnefPart (line 237) | protected override void VisitTnefPart (TnefPart entity)
    method VisitMessagePart (line 243) | protected override void VisitMessagePart (MessagePart entity)
    method VisitMimePart (line 249) | protected override void VisitMimePart (MimePart entity)
  class ReplyVisitor (line 259) | public class ReplyVisitor : MimeVisitor
    method ReplyVisitor (line 268) | public ReplyVisitor ()
    method Push (line 280) | void Push (MimeEntity entity)
    method Pop (line 295) | void Pop ()
    method GetOnDateSenderWrote (line 300) | public static string GetOnDateSenderWrote (MimeMessage message)
    method Visit (line 312) | public override void Visit (MimeMessage message)
    method VisitMultipartAlternative (line 320) | protected override void VisitMultipartAlternative (MultipartAlternativ...
    method VisitMultipartRelated (line 332) | protected override void VisitMultipartRelated (MultipartRelated related)
    method VisitMultipart (line 349) | protected override void VisitMultipart (Multipart multipart)
    method HtmlTagCallback (line 361) | void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter)
    method QuoteText (line 391) | string QuoteText (string text)
    method VisitTextPart (line 409) | protected override void VisitTextPart (TextPart entity)
    method VisitMessagePart (line 436) | protected override void VisitMessagePart (MessagePart entity)
  class Program (line 443) | public class Program
    method Render (line 446) | void Render (MimeMessage message)
    method Reply (line 461) | public static MimeMessage Reply (MimeMessage message, MailboxAddress f...
    method Reply (line 521) | public static MimeMessage Reply (MimeMessage message, MailboxAddress f...

FILE: Documentation/Examples/MultipartFormDataExamples.cs
  class MultipartFormDataExample (line 7) | class MultipartFormDataExample
    method ParseMultipartFormData (line 10) | MimeEntity ParseMultipartFormData (HttpWebResponse response)
    method ParseMultipartFormData (line 19) | MimeEntity ParseMultipartFormData (HttpWebResponse response)

FILE: Documentation/Examples/OAuth2ExchangeExample.cs
  class Program (line 12) | class Program
    method Main (line 16) | public static void Main (string[] args)
    method AuthenticateAsync (line 26) | static async Task AuthenticateAsync (ImapClient client)

FILE: Documentation/Examples/OAuth2GMailExample.cs
  class Program (line 15) | class Program
    method Main (line 19) | public static void Main (string[] args)
    method AuthenticateAsync (line 29) | static async Task AuthenticateAsync (ImapClient client)

FILE: Documentation/Examples/OpenPGPExamples.cs
  class MyGnuPGContext (line 12) | public class MyGnuPGContext : GnuPGContext
    method MyGnuPGContext (line 14) | public MyGnuPGContext ()
    method GetPasswordForKey (line 18) | protected override string GetPasswordForKey (PgpSecretKey key)
  class OpenPGPExamples (line 26) | public class OpenPGPExamples
    method RegisterMyGnuPGeContext (line 28) | public void RegisterMyGnuPGeContext ()
    method Encrypt (line 39) | public void Encrypt (MimeMessage message)
    method Decrypt (line 56) | public MimeEntity Decrypt (MimeMessage message)
    method Sign (line 71) | public void Sign (MimeMessage message)
    method Sign (line 91) | public void Sign (MimeMessage message, PgpSecretKey key)
    method Verify (line 101) | public void Verify (MimeMessage message)
    method Decrypt (line 125) | static Stream Decrypt (MimeMessage message)

FILE: Documentation/Examples/ParameterExamples.cs
  class ParameterExamples (line 7) | public static class ParameterExamples
    method OverrideAllParameterEncodings (line 9) | public void OverrideAllParameterEncodings (MimePart part)
    method OverrideFileNameParameterEncodings (line 18) | public void OverrideFileNameParameterEncodings (MimePart part)

FILE: Documentation/Examples/Pop3Examples.cs
  class Pop3Examples (line 37) | public static class Pop3Examples
    method DownloadMessages (line 40) | public static void DownloadMessages ()
    method PrintCapabilities (line 63) | public static void PrintCapabilities ()
    method DownloadMessages (line 103) | public static void DownloadMessages ()
    method DownloadMessages (line 126) | public static void DownloadMessages ()
    method DownloadNewMessages (line 148) | public static void DownloadNewMessages (HashSet<string> previouslyDown...
    method DownloadNewMessages (line 181) | public static void DownloadNewMessages (HashSet<string> previouslyDown...
    method PrintSslConnectionInfo (line 269) | public static void PrintSslConnectionInfo (string host, int port)

FILE: Documentation/Examples/ProxyExamples.cs
  class ProxyExamples (line 39) | public static class ProxyExamples
    method SendMessageViaProxy (line 42) | public static void SendMessageViaProxy (MimeMessage message)

FILE: Documentation/Examples/SMimeExamples.cs
  class MySecureMimeContext (line 10) | public class MySecureMimeContext : DefaultSecureMimeContext
    method MySecureMimeContext (line 12) | public MySecureMimeContext ()
    method OpenDatabase (line 17) | static IX509CertificateDatabase OpenDatabase (string fileName)
  class SMimeExamples (line 35) | public class SMimeExamples
    method RegisterMySecureMimeContext (line 37) | public void RegisterMySecureMimeContext ()
    method Encrypt (line 48) | public void Encrypt (MimeMessage message)
    method Decrypt (line 65) | public MimeEntity Decrypt (MimeMessage message)
    method MultipartSign (line 80) | public void MultipartSign (MimeMessage message)
    method MultipartSign (line 95) | public void MultipartSign (MimeMessage message, X509Certificate2 certi...
    method Pkcs7Sign (line 109) | public void Pkcs7Sign (MimeMessage message)
    method VerifyMultipartSigned (line 124) | public void VerifyMultipartSigned (MimeMessage message)
    method VerifyPkcs7 (line 148) | public void VerifyPkcs7 (MimeMessage message)

FILE: Documentation/Examples/SmtpExamples.cs
  class SmtpExamples (line 36) | public static class SmtpExamples
    method SaveToPickupDirectory (line 39) | public static void SaveToPickupDirectory (MimeMessage message, string ...
    method LoadFromPickupDirectory (line 93) | public static MimeMessage LoadFromPickupDirectory (string fileName)
    method SendMessage (line 113) | public static void SendMessage (MimeMessage message)
    method PrintCapabilities (line 174) | public static void PrintCapabilities ()
    method SendMessage (line 206) | public static void SendMessage (MimeMessage message)
    method SendMessage (line 264) | public static void SendMessage (MimeMessage message)
    method SendMessage (line 279) | public static void SendMessage (MimeMessage message)
    method SendMessageWithOptions (line 298) | public static void SendMessageWithOptions (MimeMessage message)
    method SendMessages (line 318) | public static void SendMessages (IList<MimeMessage> messages)
    method VerifyAddress (line 335) | public static void VerifyAddress ()
    method ExpandAlias (line 354) | public static void ExpandAlias (string alias)
    class DSNSmtpClient (line 372) | public class DSNSmtpClient : SmtpClient
      method DSNSmtpClient (line 374) | public DSNSmtpClient ()
      method GetEnvelopeId (line 390) | protected override string GetEnvelopeId (MimeMessage message)
      method GetDeliveryStatusNotifications (line 406) | protected override DeliveryStatusNotification? GetDeliveryStatusNoti...
    method PrintSslConnectionInfo (line 417) | public static void PrintSslConnectionInfo (string host, int port)

FILE: Documentation/Examples/SslCertificateValidation.cs
  class SslCertificateValidationExample (line 13) | public static class SslCertificateValidationExample
    method SendMessage (line 15) | public static void SendMessage (MimeMessage message)
    method MySslCertificateValidationCallback (line 35) | static bool MySslCertificateValidationCallback (object sender, X509Cer...

FILE: MailKit/AccessControl.cs
  class AccessControl (line 41) | public class AccessControl
    method AccessControl (line 57) | public AccessControl (string name, IEnumerable<AccessRight> rights)
    method AccessControl (line 80) | public AccessControl (string name, string rights)
    method AccessControl (line 100) | public AccessControl (string name)

FILE: MailKit/AccessControlList.cs
  class AccessControlList (line 40) | public class AccessControlList : List<AccessControl>
    method AccessControlList (line 52) | public AccessControlList (IEnumerable<AccessControl> controls) : base ...
    method AccessControlList (line 62) | public AccessControlList ()

FILE: MailKit/AccessRight.cs
  type AccessRight (line 40) | public readonly struct AccessRight : IEquatable<AccessRight>
    method AccessRight (line 143) | public AccessRight (char right)
    method Equals (line 159) | public bool Equals (AccessRight other)
    method Equals (line 203) | public override bool Equals (object? obj)
    method GetHashCode (line 215) | public override int GetHashCode ()
    method ToString (line 227) | public override string ToString ()

FILE: MailKit/AccessRights.cs
  class AccessRights (line 38) | public class AccessRights : ICollection<AccessRight>
    method AccessRights (line 52) | public AccessRights (IEnumerable<AccessRight> rights)
    method AccessRights (line 67) | public AccessRights (string rights)
    method AccessRights (line 78) | public AccessRights ()
    method Add (line 111) | void ICollection<AccessRight>.Add (AccessRight right)
    method Add (line 124) | public bool Add (AccessRight right)
    method Add (line 142) | public bool Add (char right)
    method AddRange (line 157) | public void AddRange (string rights)
    method AddRange (line 176) | public void AddRange (IEnumerable<AccessRight> rights)
    method Clear (line 191) | public void Clear ()
    method Contains (line 204) | public bool Contains (AccessRight right)
    method CopyTo (line 224) | public void CopyTo (AccessRight[] array, int arrayIndex)
    method Remove (line 243) | public bool Remove (AccessRight right)
    method GetEnumerator (line 277) | public IEnumerator<AccessRight> GetEnumerator ()
    method GetEnumerator (line 293) | IEnumerator IEnumerable.GetEnumerator ()
    method ToString (line 307) | public override string ToString ()

FILE: MailKit/AlertEventArgs.cs
  class AlertEventArgs (line 38) | public class AlertEventArgs : EventArgs
    method AlertEventArgs (line 50) | public AlertEventArgs (string message)

FILE: MailKit/Annotation.cs
  class Annotation (line 39) | public class Annotation
    method Annotation (line 51) | public Annotation (AnnotationEntry entry)

FILE: MailKit/AnnotationAccess.cs
  type AnnotationAccess (line 36) | public enum AnnotationAccess

FILE: MailKit/AnnotationAttribute.cs
  class AnnotationAttribute (line 38) | public class AnnotationAttribute : IEquatable<AnnotationAttribute>
    method AnnotationAttribute (line 90) | AnnotationAttribute (string name, AnnotationScope scope)
    method AnnotationAttribute (line 114) | public AnnotationAttribute (string specifier)
    method Equals (line 184) | public bool Equals (AnnotationAttribute? other)
    method Equals (line 228) | public override bool Equals (object? obj)
    method GetHashCode (line 240) | public override int GetHashCode ()
    method ToString (line 252) | public override string ToString ()

FILE: MailKit/AnnotationEntry.cs
  class AnnotationEntry (line 38) | public class AnnotationEntry : IEquatable<AnnotationEntry>
    method ValidatePath (line 112) | static void ValidatePath (string path)
    method ValidatePartSpecifier (line 155) | static void ValidatePartSpecifier (string partSpecifier)
    method AnnotationEntry (line 175) | AnnotationEntry (string? partSpecifier, string entry, string path, Ann...
    method AnnotationEntry (line 197) | public AnnotationEntry (string path, AnnotationScope scope = Annotatio...
    method AnnotationEntry (line 231) | public AnnotationEntry (string partSpecifier, string path, AnnotationS...
    method AnnotationEntry (line 264) | public AnnotationEntry (BodyPart part, string path, AnnotationScope sc...
    method Equals (line 337) | public bool Equals (AnnotationEntry? other)
    method Equals (line 381) | public override bool Equals (object? obj)
    method GetHashCode (line 393) | public override int GetHashCode ()
    method ToString (line 405) | public override string ToString ()
    method Parse (line 424) | public static AnnotationEntry Parse (string entry)
    method Create (line 510) | internal static AnnotationEntry Create (string entry)

FILE: MailKit/AnnotationScope.cs
  type AnnotationScope (line 38) | [Flags]

FILE: MailKit/AnnotationsChangedEventArgs.cs
  class AnnotationsChangedEventArgs (line 39) | public class AnnotationsChangedEventArgs : MessageEventArgs
    method AnnotationsChangedEventArgs (line 52) | public AnnotationsChangedEventArgs (int index, IEnumerable<Annotation>...

FILE: MailKit/AppendRequest.cs
  class AppendRequest (line 39) | public class AppendRequest : IAppendRequest
    method AppendRequest (line 52) | public AppendRequest (MimeMessage message, MessageFlags flags = Messag...
    method AppendRequest (line 75) | public AppendRequest (MimeMessage message, MessageFlags flags, IEnumer...
    method AppendRequest (line 100) | public AppendRequest (MimeMessage message, MessageFlags flags, DateTim...
    method AppendRequest (line 125) | public AppendRequest (MimeMessage message, MessageFlags flags, IEnumer...

FILE: MailKit/AuthenticatedEventArgs.cs
  class AuthenticatedEventArgs (line 37) | public class AuthenticatedEventArgs : EventArgs
    method AuthenticatedEventArgs (line 49) | public AuthenticatedEventArgs (string message)

FILE: MailKit/BodyPart.cs
  class BodyPart (line 48) | public abstract class BodyPart
    method BodyPart (line 56) | [Obsolete ("Use BodyPart (ContentType, string) instead.")]
    method BodyPart (line 76) | protected BodyPart (ContentType contentType, string partSpecifier)
    method Accept (line 128) | public abstract void Accept (BodyPartVisitor visitor);
    method Encode (line 130) | internal static void Encode (StringBuilder builder, uint value)
    method Encode (line 135) | internal static void Encode (StringBuilder builder, string? value)
    method Encode (line 143) | internal static void Encode (StringBuilder builder, Uri? location)
    method Encode (line 151) | internal static void Encode (StringBuilder builder, string[]? values)
    method Encode (line 170) | internal static void Encode (StringBuilder builder, IList<Parameter> p...
    method Encode (line 191) | internal static void Encode (StringBuilder builder, ContentDisposition...
    method Encode (line 205) | internal static void Encode (StringBuilder builder, ContentType conten...
    method Encode (line 214) | internal static void Encode (StringBuilder builder, BodyPartCollection...
    method Encode (line 229) | internal static void Encode (StringBuilder builder, Envelope? envelope)
    method Encode (line 239) | internal static void Encode (StringBuilder builder, BodyPart? body)
    method Encode (line 258) | protected abstract void Encode (StringBuilder builder);
    method ToString (line 269) | public override string ToString ()
    method IsNIL (line 280) | static bool IsNIL (string text, int index)
    method TryParse (line 285) | static bool TryParse (string text, ref int index, out uint value)
    method TryParse (line 300) | static bool TryParse (string text, ref int index, out string? nstring)
    method TryParse (line 348) | static bool TryParse (string text, ref int index, out string[]? values)
    method TryParse (line 394) | static bool TryParse (string text, ref int index, out Uri? uri)
    method TryParse (line 411) | static bool TryParse (string text, ref int index, [NotNullWhen (true)]...
    method TryParse (line 459) | static bool TryParse (string text, ref int index, out ContentDispositi...
    method TryParse (line 499) | static bool TryParse (string text, ref int index, bool multipart, [Not...
    method TryParse (line 532) | static bool TryParse (string text, ref int index, string prefix, [NotN...
    method TryParse (line 565) | static bool TryParse (string text, ref int index, string path, out Bod...
    method TryParse (line 726) | public static bool TryParse (string text, out BodyPart? part)

FILE: MailKit/BodyPartBasic.cs
  class BodyPartBasic (line 43) | public class BodyPartBasic : BodyPart
    method BodyPartBasic (line 51) | [Obsolete ("Use BodyPartBasic (ContentType, string) instead.")]
    method BodyPartBasic (line 69) | public BodyPartBasic (ContentType contentType, string partSpecifier) :...
    method Accept (line 228) | public override void Accept (BodyPartVisitor visitor)
    method Encode (line 243) | protected override void Encode (StringBuilder builder)

FILE: MailKit/BodyPartCollection.cs
  class BodyPartCollection (line 41) | public class BodyPartCollection : ICollection<BodyPart>
    method BodyPartCollection (line 51) | public BodyPartCollection ()
    method Add (line 87) | public void Add (BodyPart part)
    method Clear (line 101) | public void Clear ()
    method Contains (line 117) | public bool Contains (BodyPart part)
    method CopyTo (line 140) | public void CopyTo (BodyPart[] array, int arrayIndex)
    method Remove (line 162) | public bool Remove (BodyPart part)
    method IndexOf (line 207) | public int IndexOf (Uri uri)
    method GetEnumerator (line 251) | public IEnumerator<BodyPart> GetEnumerator ()
    method GetEnumerator (line 267) | IEnumerator IEnumerable.GetEnumerator ()

FILE: MailKit/BodyPartMessage.cs
  class BodyPartMessage (line 39) | public class BodyPartMessage : BodyPartBasic
    method BodyPartMessage (line 47) | [Obsolete ("Use BodyPartMessage (ContentType, string) instead.")]
    method BodyPartMessage (line 65) | public BodyPartMessage (ContentType contentType, string partSpecifier)...
    method Accept (line 117) | public override void Accept (BodyPartVisitor visitor)
    method Encode (line 132) | protected override void Encode (StringBuilder builder)

FILE: MailKit/BodyPartMultipart.cs
  class BodyPartMultipart (line 39) | public class BodyPartMultipart : BodyPart
    method BodyPartMultipart (line 47) | [Obsolete ("Use BodyPartMultipart (ContentType, string) instead.")]
    method BodyPartMultipart (line 65) | public BodyPartMultipart (ContentType contentType, string partSpecifie...
    method BodyPartMultipart (line 86) | public BodyPartMultipart (ContentType contentType, string partSpecifie...
    method Accept (line 153) | public override void Accept (BodyPartVisitor visitor)
    method Encode (line 168) | protected override void Encode (StringBuilder builder)

FILE: MailKit/BodyPartText.cs
  class BodyPartText (line 42) | public class BodyPartText : BodyPartBasic
    method BodyPartText (line 50) | [Obsolete ("Use BodyPartText (ContentType, string) instead.")]
    method BodyPartText (line 68) | public BodyPartText (ContentType contentType, string partSpecifier) : ...
    method Accept (line 120) | public override void Accept (BodyPartVisitor visitor)
    method Encode (line 135) | protected override void Encode (StringBuilder builder)

FILE: MailKit/BodyPartVisitor.cs
  class BodyPartVisitor (line 35) | public abstract class BodyPartVisitor
    method BodyPartVisitor (line 43) | protected BodyPartVisitor ()
    method Visit (line 54) | public virtual void Visit (BodyPart body)
    method VisitBodyPart (line 66) | protected internal virtual void VisitBodyPart (BodyPart entity)
    method VisitBodyPartBasic (line 77) | protected internal virtual void VisitBodyPartBasic (BodyPartBasic entity)
    method VisitMessage (line 89) | protected virtual void VisitMessage (BodyPart message)
    method VisitBodyPartMessage (line 101) | protected internal virtual void VisitBodyPartMessage (BodyPartMessage ...
    method VisitChildren (line 116) | protected virtual void VisitChildren (BodyPartMultipart multipart)
    method VisitBodyPartMultipart (line 129) | protected internal virtual void VisitBodyPartMultipart (BodyPartMultip...
    method VisitBodyPartText (line 142) | protected internal virtual void VisitBodyPartText (BodyPartText entity)

FILE: MailKit/ByteArrayBuilder.cs
  class ByteArrayBuilder (line 33) | class ByteArrayBuilder : IDisposable
    method ByteArrayBuilder (line 38) | public ByteArrayBuilder (int initialCapacity)
    method EnsureCapacity (line 48) | void EnsureCapacity (int capacity)
    method Append (line 58) | public void Append (byte c)
    method Append (line 64) | public void Append (byte[] text, int startIndex, int count)
    method Clear (line 71) | public void Clear ()
    method ToArray (line 76) | public byte[] ToArray ()
    method ToString (line 85) | public string ToString (Encoding encoding, Encoding fallback)
    method ToString (line 94) | public override string ToString ()
    method Equals (line 99) | public bool Equals (string value, bool ignoreCase = false)
    method TrimNewLine (line 128) | public void TrimNewLine ()
    method TryParse (line 140) | internal static bool TryParse (byte[] text, ref int index, int endInde...
    method TryParse (line 167) | public bool TryParse (int startIndex, int endIndex, out int value)
    method Dispose (line 174) | public void Dispose ()

FILE: MailKit/CommandException.cs
  class CommandException (line 46) | public abstract class CommandException : Exception
    method CommandException (line 60) | [SecuritySafeCritical]
    method CommandException (line 75) | protected CommandException (string message, Exception innerException) ...
    method CommandException (line 87) | protected CommandException (string message) : base (message)
    method CommandException (line 98) | protected CommandException ()

FILE: MailKit/CompressedStream.cs
  class CompressedStream (line 38) | class CompressedStream : Stream
    method CompressedStream (line 43) | public CompressedStream (Stream innerStream)
    method ValidateArguments (line 141) | static void ValidateArguments (byte[] buffer, int offset, int count)
    method CheckDisposed (line 153) | void CheckDisposed ()
    method Read (line 183) | public override int Read (byte[] buffer, int offset, int count)
    method ReadAsync (line 244) | public override async Task<int> ReadAsync (byte[] buffer, int offset, ...
    method Write (line 307) | public override void Write (byte[] buffer, int offset, int count)
    method WriteAsync (line 358) | public override async Task WriteAsync (byte[] buffer, int offset, int ...
    method Flush (line 397) | public override void Flush ()
    method FlushAsync (line 418) | public override Task FlushAsync (CancellationToken cancellationToken)
    method Seek (line 434) | public override long Seek (long offset, SeekOrigin origin)
    method SetLength (line 446) | public override void SetLength (long value)
    method Dispose (line 457) | protected override void Dispose (bool disposing)

FILE: MailKit/ConnectedEventArgs.cs
  class ConnectedEventArgs (line 40) | public class ConnectedEventArgs : EventArgs
    method ConnectedEventArgs (line 51) | public ConnectedEventArgs (string host, int port, SecureSocketOptions ...

FILE: MailKit/DeliveryStatusNotification.cs
  type DeliveryStatusNotification (line 41) | [Flags]

FILE: MailKit/DeliveryStatusNotificationType.cs
  type DeliveryStatusNotificationType (line 41) | public enum DeliveryStatusNotificationType

FILE: MailKit/DisconnectedEventArgs.cs
  class DisconnectedEventArgs (line 38) | public class DisconnectedEventArgs : ConnectedEventArgs
    method DisconnectedEventArgs (line 51) | public DisconnectedEventArgs (string host, int port, SecureSocketOptio...

FILE: MailKit/DuplexStream.cs
  class DuplexStream (line 36) | class DuplexStream : Stream
    method DuplexStream (line 50) | public DuplexStream (Stream istream, Stream ostream)
    method ValidateArguments (line 155) | static void ValidateArguments (byte[] buffer, int offset, int count)
    method CheckDisposed (line 167) | void CheckDisposed ()
    method Read (line 197) | public override int Read (byte[] buffer, int offset, int count)
    method ReadAsync (line 231) | public override Task<int> ReadAsync (byte[] buffer, int offset, int co...
    method Write (line 265) | public override void Write (byte[] buffer, int offset, int count)
    method WriteAsync (line 301) | public override Task WriteAsync (byte[] buffer, int offset, int count,...
    method Flush (line 323) | public override void Flush ()
    method FlushAsync (line 345) | public override Task FlushAsync (CancellationToken cancellationToken)
    method Seek (line 361) | public override long Seek (long offset, SeekOrigin origin)
    method SetLength (line 373) | public override void SetLength (long value)
    method Dispose (line 384) | protected override void Dispose (bool disposing)

FILE: MailKit/Envelope.cs
  class Envelope (line 47) | public class Envelope
    method Envelope (line 55) | public Envelope ()
    method EncodeMailbox (line 177) | static void EncodeMailbox (StringBuilder builder, MailboxAddress mailbox)
    method EncodeInternetAddressListAddresses (line 212) | static void EncodeInternetAddressListAddresses (StringBuilder builder,...
    method EncodeGroup (line 222) | static void EncodeGroup (StringBuilder builder, GroupAddress group)
    method EncodeAddressList (line 231) | static void EncodeAddressList (StringBuilder builder, InternetAddressL...
    method Encode (line 238) | internal void Encode (StringBuilder builder)
    method ToString (line 338) | public override string ToString ()
    method IsNIL (line 347) | static bool IsNIL (string text, int index)
    method TryParse (line 352) | static bool TryParse (string text, ref int index, out string? nstring)
    method TryParse (line 400) | static bool TryParse (string text, ref int index, out InternetAddress?...
    method TryParse (line 446) | static bool TryParse (string text, ref int index, [NotNullWhen (true)]...
    method TryParse (line 511) | internal static bool TryParse (string text, ref int index, out Envelop...
    method TryParse (line 603) | public static bool TryParse (string text, out Envelope? envelope)

FILE: MailKit/FetchRequest.cs
  class FetchRequest (line 39) | public class FetchRequest : IFetchRequest
    method FetchRequest (line 47) | public FetchRequest ()
    method FetchRequest (line 58) | public FetchRequest (MessageSummaryItems items)
    method FetchRequest (line 77) | public FetchRequest (MessageSummaryItems items, IEnumerable<HeaderId> ...
    method FetchRequest (line 96) | public FetchRequest (MessageSummaryItems items, IEnumerable<string> he...

FILE: MailKit/FolderAccess.cs
  type FolderAccess (line 37) | public enum FolderAccess {

FILE: MailKit/FolderAttributes.cs
  type FolderAttributes (line 36) | [Flags]

FILE: MailKit/FolderCreatedEventArgs.cs
  class FolderCreatedEventArgs (line 36) | public class FolderCreatedEventArgs : EventArgs
    method FolderCreatedEventArgs (line 48) | public FolderCreatedEventArgs (IMailFolder folder)

FILE: MailKit/FolderFeature.cs
  type FolderFeature (line 35) | public enum FolderFeature

FILE: MailKit/FolderNamespace.cs
  class FolderNamespace (line 36) | public class FolderNamespace
    method FolderNamespace (line 65) | public FolderNamespace (char directorySeparator, string path)

FILE: MailKit/FolderNamespaceCollection.cs
  class FolderNamespaceCollection (line 41) | public class FolderNamespaceCollection : IEnumerable<FolderNamespace>
    method FolderNamespaceCollection (line 51) | public FolderNamespaceCollection ()
    method Add (line 79) | public void Add (FolderNamespace @namespace)
    method Clear (line 93) | public void Clear ()
    method Contains (line 110) | public bool Contains (FolderNamespace @namespace)
    method Remove (line 130) | public bool Remove (FolderNamespace @namespace)
    method GetEnumerator (line 181) | public IEnumerator<FolderNamespace> GetEnumerator ()
    method GetEnumerator (line 197) | IEnumerator IEnumerable.GetEnumerator ()
    method Escape (line 204) | static bool Escape (char directorySeparator)
    method ToString (line 216) | public override string ToString ()

FILE: MailKit/FolderNotFoundException.cs
  class FolderNotFoundException (line 41) | [Serializable]
    method FolderNotFoundException (line 57) | [Obsolete ("This API supports obsolete formatter-based serialization. ...
    method FolderNotFoundException (line 76) | public FolderNotFoundException (string message, string folderName, Exc...
    method FolderNotFoundException (line 95) | public FolderNotFoundException (string message, string folderName) : b...
    method FolderNotFoundException (line 113) | public FolderNotFoundException (string folderName) : this ("The reques...
    method GetObjectData (line 141) | [SecurityCritical]

FILE: MailKit/FolderNotOpenException.cs
  class FolderNotOpenException (line 44) | [Serializable]
    method FolderNotOpenException (line 60) | [Obsolete ("This API supports obsolete formatter-based serialization. ...
    method FolderNotOpenException (line 87) | public FolderNotOpenException (string folderName, FolderAccess access,...
    method FolderNotOpenException (line 108) | public FolderNotOpenException (string folderName, FolderAccess access,...
    method FolderNotOpenException (line 128) | public FolderNotOpenException (string folderName, FolderAccess access)...
    method GetDefaultMessage (line 154) | static string GetDefaultMessage (FolderAccess access)
    method GetObjectData (line 176) | [Obsolete ("This API supports obsolete formatter-based serialization. ...

FILE: MailKit/FolderQuota.cs
  class FolderQuota (line 37) | public class FolderQuota
    method FolderQuota (line 46) | public FolderQuota (IMailFolder? quotaRoot)

FILE: MailKit/FolderRenamedEventArgs.cs
  class FolderRenamedEventArgs (line 36) | public class FolderRenamedEventArgs : EventArgs
    method FolderRenamedEventArgs (line 51) | public FolderRenamedEventArgs (string oldName, string newName)

FILE: MailKit/HeaderSet.cs
  class HeaderSet (line 40) | public class HeaderSet : ICollection<string>
    method HeaderSet (line 94) | public HeaderSet ()
    method HeaderSet (line 105) | public HeaderSet (IEnumerable<HeaderId> headers)
    method HeaderSet (line 117) | public HeaderSet (IEnumerable<string> headers)
    method CheckReadOnly (line 122) | void CheckReadOnly ()
    method IsAsciiAtom (line 168) | static bool IsAsciiAtom (char c)
    method IsValid (line 173) | static bool IsValid (string header)
    method Add (line 200) | public bool Add (HeaderId header)
    method Add (line 224) | public bool Add (string header)
    method Add (line 250) | void ICollection<string>.Add (string item)
    method AddRange (line 271) | public void AddRange (IEnumerable<HeaderId> headers)
    method AddRange (line 302) | public void AddRange (IEnumerable<string> headers)
    method Clear (line 326) | public void Clear ()
    method CopyTo (line 347) | public void CopyTo (string[] array, int arrayIndex)
    method Contains (line 364) | public bool Contains (HeaderId header)
    method Contains (line 384) | public bool Contains (string header)
    method Remove (line 407) | public bool Remove (HeaderId header)
    method Remove (line 432) | public bool Remove (string header)
    method GetEnumerator (line 449) | public IEnumerator<string> GetEnumerator ()
    method GetEnumerator (line 461) | IEnumerator IEnumerable.GetEnumerator ()

FILE: MailKit/IAppendRequest.cs
  type IAppendRequest (line 39) | public interface IAppendRequest

FILE: MailKit/IAuthenticationSecretDetector.cs
  type AuthenticationSecret (line 37) | public struct AuthenticationSecret
    method AuthenticationSecret (line 65) | public AuthenticationSecret (int startIndex, int length)
  type IAuthenticationSecretDetector (line 78) | public interface IAuthenticationSecretDetector
    method DetectSecrets (line 91) | IList<AuthenticationSecret> DetectSecrets (byte[] buffer, int offset, ...

FILE: MailKit/IFetchRequest.cs
  type IFetchRequest (line 34) | public interface IFetchRequest

FILE: MailKit/IMailFolder.cs
  type IMailFolder (line 49) | public interface IMailFolder : IEnumerable<MimeMessage>
    method Supports (line 362) | bool Supports (FolderFeature feature);
    method Open (line 414) | FolderAccess Open (FolderAccess access, uint uidValidity, ulong highes...
    method OpenAsync (line 466) | Task<FolderAccess> OpenAsync (FolderAccess access, uint uidValidity, u...
    method Open (line 504) | FolderAccess Open (FolderAccess access, CancellationToken cancellation...
    method OpenAsync (line 542) | Task<FolderAccess> OpenAsync (FolderAccess access, CancellationToken c...
    method Close (line 576) | void Close (bool expunge = false, CancellationToken cancellationToken ...
    method CloseAsync (line 611) | Task CloseAsync (bool expunge = false, CancellationToken cancellationT...
    method Create (line 653) | IMailFolder? Create (string name, bool isMessageFolder, CancellationTo...
    method CreateAsync (line 695) | Task<IMailFolder?> CreateAsync (string name, bool isMessageFolder, Can...
    method Create (line 742) | IMailFolder? Create (string name, IEnumerable<SpecialFolder> specialUs...
    method CreateAsync (line 789) | Task<IMailFolder?> CreateAsync (string name, IEnumerable<SpecialFolder...
    method Create (line 834) | IMailFolder? Create (string name, SpecialFolder specialUse, Cancellati...
    method CreateAsync (line 879) | Task<IMailFolder?> CreateAsync (string name, SpecialFolder specialUse,...
    method Rename (line 927) | void Rename (IMailFolder parent, string name, CancellationToken cancel...
    method RenameAsync (line 976) | Task RenameAsync (IMailFolder parent, string name, CancellationToken c...
    method Delete (line 1012) | void Delete (CancellationToken cancellationToken = default);
    method DeleteAsync (line 1049) | Task DeleteAsync (CancellationToken cancellationToken = default);
    method Subscribe (line 1079) | void Subscribe (CancellationToken cancellationToken = default);
    method SubscribeAsync (line 1116) | Task SubscribeAsync (CancellationToken cancellationToken = default);
    method Unsubscribe (line 1146) | void Unsubscribe (CancellationToken cancellationToken = default);
    method UnsubscribeAsync (line 1177) | Task UnsubscribeAsync (CancellationToken cancellationToken = default);
    method GetSubfolders (line 1214) | IList<IMailFolder> GetSubfolders (StatusItems items, bool subscribedOn...
    method GetSubfoldersAsync (line 1250) | Task<IList<IMailFolder>> GetSubfoldersAsync (StatusItems items, bool s...
    method GetSubfolders (line 1282) | IList<IMailFolder> GetSubfolders (bool subscribedOnly = false, Cancell...
    method GetSubfoldersAsync (line 1314) | Task<IList<IMailFolder>> GetSubfoldersAsync (bool subscribedOnly = fal...
    method GetSubfolder (line 1355) | IMailFolder GetSubfolder (string name, CancellationToken cancellationT...
    method GetSubfolderAsync (line 1396) | Task<IMailFolder> GetSubfolderAsync (string name, CancellationToken ca...
    method Check (line 1429) | void Check (CancellationToken cancellationToken = default);
    method CheckAsync (line 1463) | Task CheckAsync (CancellationToken cancellationToken = default);
    method Status (line 1507) | void Status (StatusItems items, CancellationToken cancellationToken = ...
    method StatusAsync (line 1552) | Task StatusAsync (StatusItems items, CancellationToken cancellationTok...
    method GetAccessControlList (line 1586) | AccessControlList GetAccessControlList (CancellationToken cancellation...
    method GetAccessControlListAsync (line 1620) | Task<AccessControlList> GetAccessControlListAsync (CancellationToken c...
    method GetAccessRights (line 1658) | AccessRights GetAccessRights (string name, CancellationToken cancellat...
    method GetAccessRightsAsync (line 1696) | Task<AccessRights> GetAccessRightsAsync (string name, CancellationToke...
    method GetMyAccessRights (line 1730) | AccessRights GetMyAccessRights (CancellationToken cancellationToken = ...
    method GetMyAccessRightsAsync (line 1764) | Task<AccessRights> GetMyAccessRightsAsync (CancellationToken cancellat...
    method AddAccessRights (line 1804) | void AddAccessRights (string name, AccessRights rights, CancellationTo...
    method AddAccessRightsAsync (line 1845) | Task AddAccessRightsAsync (string name, AccessRights rights, Cancellat...
    method RemoveAccessRights (line 1885) | void RemoveAccessRights (string name, AccessRights rights, Cancellatio...
    method RemoveAccessRightsAsync (line 1926) | Task RemoveAccessRightsAsync (string name, AccessRights rights, Cancel...
    method SetAccessRights (line 1966) | void SetAccessRights (string name, AccessRights rights, CancellationTo...
    method SetAccessRightsAsync (line 2007) | Task SetAccessRightsAsync (string name, AccessRights rights, Cancellat...
    method RemoveAccess (line 2044) | void RemoveAccess (string name, CancellationToken cancellationToken = ...
    method RemoveAccessAsync (line 2082) | Task RemoveAccessAsync (string name, CancellationToken cancellationTok...
    method GetQuota (line 2118) | FolderQuota GetQuota (CancellationToken cancellationToken = default);
    method GetQuotaAsync (line 2154) | Task<FolderQuota> GetQuotaAsync (CancellationToken cancellationToken =...
    method SetQuota (line 2192) | FolderQuota SetQuota (uint? messageLimit, uint? storageLimit, Cancella...
    method SetQuotaAsync (line 2230) | Task<FolderQuota> SetQuotaAsync (uint? messageLimit, uint? storageLimi...
    method GetMetadata (line 2265) | string? GetMetadata (MetadataTag tag, CancellationToken cancellationTo...
    method GetMetadataAsync (line 2300) | Task<string?> GetMetadataAsync (MetadataTag tag, CancellationToken can...
    method GetMetadata (line 2338) | MetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, Cancell...
    method GetMetadataAsync (line 2376) | Task<MetadataCollection> GetMetadataAsync (IEnumerable<MetadataTag> ta...
    method GetMetadata (line 2417) | MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<M...
    method GetMetadataAsync (line 2458) | Task<MetadataCollection> GetMetadataAsync (MetadataOptions options, IE...
    method SetMetadata (line 2495) | void SetMetadata (MetadataCollection metadata, CancellationToken cance...
    method SetMetadataAsync (line 2533) | Task SetMetadataAsync (MetadataCollection metadata, CancellationToken ...
    method Expunge (line 2572) | void Expunge (CancellationToken cancellationToken = default);
    method ExpungeAsync (line 2612) | Task ExpungeAsync (CancellationToken cancellationToken = default);
    method Expunge (line 2658) | void Expunge (IList<UniqueId> uids, CancellationToken cancellationToke...
    method ExpungeAsync (line 2705) | Task ExpungeAsync (IList<UniqueId> uids, CancellationToken cancellatio...
    method Append (line 2751) | UniqueId? Append (IAppendRequest request, CancellationToken cancellati...
    method AppendAsync (line 2797) | Task<UniqueId?> AppendAsync (IAppendRequest request, CancellationToken...
    method Append (line 2846) | UniqueId? Append (FormatOptions options, IAppendRequest request, Cance...
    method AppendAsync (line 2895) | Task<UniqueId?> AppendAsync (FormatOptions options, IAppendRequest req...
    method Append (line 2944) | IList<UniqueId> Append (IList<IAppendRequest> requests, CancellationTo...
    method AppendAsync (line 2993) | Task<IList<UniqueId>> AppendAsync (IList<IAppendRequest> requests, Can...
    method Append (line 3045) | IList<UniqueId> Append (FormatOptions options, IList<IAppendRequest> r...
    method AppendAsync (line 3097) | Task<IList<UniqueId>> AppendAsync (FormatOptions options, IList<IAppen...
    method Replace (line 3147) | UniqueId? Replace (UniqueId uid, IReplaceRequest request, Cancellation...
    method ReplaceAsync (line 3197) | Task<UniqueId?> ReplaceAsync (UniqueId uid, IReplaceRequest request, C...
    method Replace (line 3253) | UniqueId? Replace (FormatOptions options, UniqueId uid, IReplaceReques...
    method ReplaceAsync (line 3309) | Task<UniqueId?> ReplaceAsync (FormatOptions options, UniqueId uid, IRe...
    method Replace (line 3360) | UniqueId? Replace (int index, IReplaceRequest request, CancellationTok...
    method ReplaceAsync (line 3411) | Task<UniqueId?> ReplaceAsync (int index, IReplaceRequest request, Canc...
    method Replace (line 3468) | UniqueId? Replace (FormatOptions options, int index, IReplaceRequest r...
    method ReplaceAsync (line 3525) | Task<UniqueId?> ReplaceAsync (FormatOptions options, int index, IRepla...
    method CopyTo (line 3572) | UniqueId? CopyTo (UniqueId uid, IMailFolder destination, CancellationT...
    method CopyToAsync (line 3619) | Task<UniqueId?> CopyToAsync (UniqueId uid, IMailFolder destination, Ca...
    method CopyTo (line 3668) | UniqueIdMap CopyTo (IList<UniqueId> uids, IMailFolder destination, Can...
    method CopyToAsync (line 3717) | Task<UniqueIdMap> CopyToAsync (IList<UniqueId> uids, IMailFolder desti...
    method MoveTo (line 3764) | UniqueId? MoveTo (UniqueId uid, IMailFolder destination, CancellationT...
    method MoveToAsync (line 3811) | Task<UniqueId?> MoveToAsync (UniqueId uid, IMailFolder destination, Ca...
    method MoveTo (line 3860) | UniqueIdMap MoveTo (IList<UniqueId> uids, IMailFolder destination, Can...
    method MoveToAsync (line 3909) | Task<UniqueIdMap> MoveToAsync (IList<UniqueId> uids, IMailFolder desti...
    method CopyTo (line 3953) | void CopyTo (int index, IMailFolder destination, CancellationToken can...
    method CopyToAsync (line 3998) | Task CopyToAsync (int index, IMailFolder destination, CancellationToke...
    method CopyTo (line 4043) | void CopyTo (IList<int> indexes, IMailFolder destination, Cancellation...
    method CopyToAsync (line 4089) | Task CopyToAsync (IList<int> indexes, IMailFolder destination, Cancell...
    method MoveTo (line 4133) | void MoveTo (int index, IMailFolder destination, CancellationToken can...
    method MoveToAsync (line 4178) | Task MoveToAsync (int index, IMailFolder destination, CancellationToke...
    method MoveTo (line 4223) | void MoveTo (IList<int> indexes, IMailFolder destination, Cancellation...
    method MoveToAsync (line 4269) | Task MoveToAsync (IList<int> indexes, IMailFolder destination, Cancell...
    method Fetch (line 4322) | IList<IMessageSummary> Fetch (IList<UniqueId> uids, IFetchRequest requ...
    method FetchAsync (line 4373) | Task<IList<IMessageSummary>> FetchAsync (IList<UniqueId> uids, IFetchR...
    method Fetch (line 4423) | IList<IMessageSummary> Fetch (IList<int> indexes, IFetchRequest reques...
    method FetchAsync (line 4474) | Task<IList<IMessageSummary>> FetchAsync (IList<int> indexes, IFetchReq...
    method Fetch (line 4526) | IList<IMessageSummary> Fetch (int min, int max, IFetchRequest request,...
    method FetchAsync (line 4578) | Task<IList<IMessageSummary>> FetchAsync (int min, int max, IFetchReque...
    method GetHeaders (line 4620) | HeaderList GetHeaders (UniqueId uid, CancellationToken cancellationTok...
    method GetHeadersAsync (line 4662) | Task<HeaderList> GetHeadersAsync (UniqueId uid, CancellationToken canc...
    method GetHeaders (line 4708) | HeaderList GetHeaders (UniqueId uid, BodyPart part, CancellationToken ...
    method GetHeadersAsync (line 4754) | Task<HeaderList> GetHeadersAsync (UniqueId uid, BodyPart part, Cancell...
    method GetHeaders (line 4796) | HeaderList GetHeaders (int index, CancellationToken cancellationToken ...
    method GetHeadersAsync (line 4838) | Task<HeaderList> GetHeadersAsync (int index, CancellationToken cancell...
    method GetHeaders (line 4884) | HeaderList GetHeaders (int index, BodyPart part, CancellationToken can...
    method GetHeadersAsync (line 4930) | Task<HeaderList> GetHeadersAsync (int index, BodyPart part, Cancellati...
    method GetMessage (line 4975) | MimeMessage GetMessage (UniqueId uid, CancellationToken cancellationTo...
    method GetMessageAsync (line 5020) | Task<MimeMessage> GetMessageAsync (UniqueId uid, CancellationToken can...
    method GetMessage (line 5065) | MimeMessage GetMessage (int index, CancellationToken cancellationToken...
    method GetMessageAsync (line 5110) | Task<MimeMessage> GetMessageAsync (int index, CancellationToken cancel...
    method GetBodyPart (line 5159) | MimeEntity GetBodyPart (UniqueId uid, BodyPart part, CancellationToken...
    method GetBodyPartAsync (line 5208) | Task<MimeEntity> GetBodyPartAsync (UniqueId uid, BodyPart part, Cancel...
    method GetBodyPart (line 5254) | MimeEntity GetBodyPart (int index, BodyPart part, CancellationToken ca...
    method GetBodyPartAsync (line 5300) | Task<MimeEntity> GetBodyPartAsync (int index, BodyPart part, Cancellat...
    method GetStream (line 5345) | Stream GetStream (UniqueId uid, CancellationToken cancellationToken = ...
    method GetStreamAsync (line 5390) | Task<Stream> GetStreamAsync (UniqueId uid, CancellationToken cancellat...
    method GetStream (line 5435) | Stream GetStream (int index, CancellationToken cancellationToken = def...
    method GetStreamAsync (line 5480) | Task<Stream> GetStreamAsync (int index, CancellationToken cancellation...
    method GetStream (line 5532) | Stream GetStream (UniqueId uid, int offset, int count, CancellationTok...
    method GetStreamAsync (line 5584) | Task<Stream> GetStreamAsync (UniqueId uid, int offset, int count, Canc...
    method GetStream (line 5635) | Stream GetStream (int index, int offset, int count, CancellationToken ...
    method GetStreamAsync (line 5686) | Task<Stream> GetStreamAsync (int index, int offset, int count, Cancell...
    method GetStream (line 5735) | Stream GetStream (UniqueId uid, BodyPart part, CancellationToken cance...
    method GetStreamAsync (line 5784) | Task<Stream> GetStreamAsync (UniqueId uid, BodyPart part, Cancellation...
    method GetStream (line 5830) | Stream GetStream (int index, BodyPart part, CancellationToken cancella...
    method GetStreamAsync (line 5876) | Task<Stream> GetStreamAsync (int index, BodyPart part, CancellationTok...
    method GetStream (line 5932) | Stream GetStream (UniqueId uid, BodyPart part, int offset, int count, ...
    method GetStreamAsync (line 5988) | Task<Stream> GetStreamAsync (UniqueId uid, BodyPart part, int offset, ...
    method GetStream (line 6043) | Stream GetStream (int index, BodyPart part, int offset, int count, Can...
    method GetStreamAsync (line 6098) | Task<Stream> GetStreamAsync (int index, BodyPart part, int offset, int...
    method GetStream (line 6149) | Stream GetStream (UniqueId uid, string section, CancellationToken canc...
    method GetStreamAsync (line 6200) | Task<Stream> GetStreamAsync (UniqueId uid, string section, Cancellatio...
    method GetStream (line 6258) | Stream GetStream (UniqueId uid, string section, int offset, int count,...
    method GetStreamAsync (line 6316) | Task<Stream> GetStreamAsync (UniqueId uid, string section, int offset,...
    method GetStream (line 6364) | Stream GetStream (int index, string section, CancellationToken cancell...
    method GetStreamAsync (line 6412) | Task<Stream> GetStreamAsync (int index, string section, CancellationTo...
    method GetStream (line 6469) | Stream GetStream (int index, string section, int offset, int count, Ca...
    method GetStreamAsync (line 6526) | Task<Stream> GetStreamAsync (int index, string section, int offset, in...
    method Store (line 6572) | bool Store (UniqueId uid, IStoreFlagsRequest request, CancellationToke...
    method StoreAsync (line 6618) | Task<bool> StoreAsync (UniqueId uid, IStoreFlagsRequest request, Cance...
    method Store (line 6666) | IList<UniqueId> Store (IList<UniqueId> uids, IStoreFlagsRequest reques...
    method StoreAsync (line 6714) | Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreFlagsReq...
    method Store (line 6760) | bool Store (int index, IStoreFlagsRequest request, CancellationToken c...
    method StoreAsync (line 6806) | Task<bool> StoreAsync (int index, IStoreFlagsRequest request, Cancella...
    method Store (line 6854) | IList<int> Store (IList<int> indexes, IStoreFlagsRequest request, Canc...
    method StoreAsync (line 6902) | Task<IList<int>> StoreAsync (IList<int> indexes, IStoreFlagsRequest re...
    method Store (line 6950) | bool Store (UniqueId uid, IStoreLabelsRequest request, CancellationTok...
    method StoreAsync (line 6998) | Task<bool> StoreAsync (UniqueId uid, IStoreLabelsRequest request, Canc...
    method Store (line 7048) | IList<UniqueId> Store (IList<UniqueId> uids, IStoreLabelsRequest reque...
    method StoreAsync (line 7098) | Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, IStoreLabelsRe...
    method Store (line 7146) | bool Store (int index, IStoreLabelsRequest request, CancellationToken ...
    method StoreAsync (line 7194) | Task<bool> StoreAsync (int index, IStoreLabelsRequest request, Cancell...
    method Store (line 7244) | IList<int> Store (IList<int> indexes, IStoreLabelsRequest request, Can...
    method StoreAsync (line 7294) | Task<IList<int>> StoreAsync (IList<int> indexes, IStoreLabelsRequest r...
    method Store (line 7341) | void Store (UniqueId uid, IList<Annotation> annotations, CancellationT...
    method StoreAsync (line 7389) | Task StoreAsync (UniqueId uid, IList<Annotation> annotations, Cancella...
    method Store (line 7438) | void Store (IList<UniqueId> uids, IList<Annotation> annotations, Cance...
    method StoreAsync (line 7488) | Task StoreAsync (IList<UniqueId> uids, IList<Annotation> annotations, ...
    method Store (line 7541) | IList<UniqueId> Store (IList<UniqueId> uids, ulong modseq, IList<Annot...
    method StoreAsync (line 7594) | Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids, ulong modseq, ...
    method Store (line 7641) | void Store (int index, IList<Annotation> annotations, CancellationToke...
    method StoreAsync (line 7689) | Task StoreAsync (int index, IList<Annotation> annotations, Cancellatio...
    method Store (line 7738) | void Store (IList<int> indexes, IList<Annotation> annotations, Cancell...
    method StoreAsync (line 7788) | Task StoreAsync (IList<int> indexes, IList<Annotation> annotations, Ca...
    method Store (line 7841) | IList<int> Store (IList<int> indexes, ulong modseq, IList<Annotation> ...
    method StoreAsync (line 7894) | Task<IList<int>> StoreAsync (IList<int> indexes, ulong modseq, IList<A...
    method Search (line 7936) | IList<UniqueId> Search (SearchQuery query, CancellationToken cancellat...
    method SearchAsync (line 7978) | Task<IList<UniqueId>> SearchAsync (SearchQuery query, CancellationToke...
    method Search (line 8028) | IList<UniqueId> Search (IList<UniqueId> uids, SearchQuery query, Cance...
    method SearchAsync (line 8078) | Task<IList<UniqueId>> SearchAsync (IList<UniqueId> uids, SearchQuery q...
    method Search (line 8123) | SearchResults Search (SearchOptions options, SearchQuery query, Cancel...
    method SearchAsync (line 8168) | Task<SearchResults> SearchAsync (SearchOptions options, SearchQuery qu...
    method Search (line 8221) | SearchResults Search (SearchOptions options, IList<UniqueId> uids, Sea...
    method SearchAsync (line 8274) | Task<SearchResults> SearchAsync (SearchOptions options, IList<UniqueId...
    method Sort (line 8324) | IList<UniqueId> Sort (SearchQuery query, IList<OrderBy> orderBy, Cance...
    method SortAsync (line 8374) | Task<IList<UniqueId>> SortAsync (SearchQuery query, IList<OrderBy> ord...
    method Sort (line 8431) | IList<UniqueId> Sort (IList<UniqueId> uids, SearchQuery query, IList<O...
    method SortAsync (line 8488) | Task<IList<UniqueId>> SortAsync (IList<UniqueId> uids, SearchQuery que...
    method Sort (line 8540) | SearchResults Sort (SearchOptions options, SearchQuery query, IList<Or...
    method SortAsync (line 8592) | Task<SearchResults> SortAsync (SearchOptions options, SearchQuery quer...
    method Sort (line 8651) | SearchResults Sort (SearchOptions options, IList<UniqueId> uids, Searc...
    method SortAsync (line 8711) | Task<SearchResults> SortAsync (SearchOptions options, IList<UniqueId> ...
    method Thread (line 8759) | IList<MessageThread> Thread (ThreadingAlgorithm algorithm, SearchQuery...
    method ThreadAsync (line 8807) | Task<IList<MessageThread>> ThreadAsync (ThreadingAlgorithm algorithm, ...
    method Thread (line 8863) | IList<MessageThread> Thread (IList<UniqueId> uids, ThreadingAlgorithm ...
    method ThreadAsync (line 8919) | Task<IList<MessageThread>> ThreadAsync (IList<UniqueId> uids, Threadin...

FILE: MailKit/IMailFolderAppendExtensions.cs
  class IMailFolderExtensions (line 35) | public static partial class IMailFolderExtensions
    method Append (line 78) | public static UniqueId? Append (this IMailFolder folder, MimeMessage m...
    method AppendAsync (line 122) | public static Task<UniqueId?> AppendAsync (this IMailFolder folder, Mi...
    method Append (line 167) | public static UniqueId? Append (this IMailFolder folder, MimeMessage m...
    method AppendAsync (line 212) | public static Task<UniqueId?> AppendAsync (this IMailFolder folder, Mi...
    method Append (line 261) | public static UniqueId? Append (this IMailFolder folder, MimeMessage m...
    method AppendAsync (line 310) | public static Task<UniqueId?> AppendAsync (this IMailFolder folder, Mi...
    method Append (line 363) | public static UniqueId? Append (this IMailFolder folder, FormatOptions...
    method AppendAsync (line 420) | public static Task<UniqueId?> AppendAsync (this IMailFolder folder, Fo...
    method Append (line 478) | public static UniqueId? Append (this IMailFolder folder, FormatOptions...
    method AppendAsync (line 536) | public static Task<UniqueId?> AppendAsync (this IMailFolder folder, Fo...
    method Append (line 595) | public static UniqueId? Append (this IMailFolder folder, FormatOptions...
    method AppendAsync (line 656) | public static Task<UniqueId?> AppendAsync (this IMailFolder folder, Fo...
    method Append (line 713) | public static IList<UniqueId> Append (this IMailFolder folder, IList<M...
    method AppendAsync (line 764) | public static Task<IList<UniqueId>> AppendAsync (this IMailFolder fold...
    method Append (line 818) | public static IList<UniqueId> Append (this IMailFolder folder, IList<M...
    method AppendAsync (line 872) | public static Task<IList<UniqueId>> AppendAsync (this IMailFolder fold...
    method Append (line 932) | public static IList<UniqueId> Append (this IMailFolder folder, FormatO...
    method AppendAsync (line 1016) | public static Task<IList<UniqueId>> AppendAsync (this IMailFolder fold...
    method Append (line 1103) | public static IList<UniqueId> Append (this IMailFolder folder, FormatO...
    method AppendAsync (line 1196) | public static Task<IList<UniqueId>> AppendAsync (this IMailFolder fold...
    method Replace (line 1284) | public static UniqueId? Replace (this IMailFolder folder, UniqueId uid...
    method ReplaceAsync (line 1338) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, U...
    method Replace (line 1390) | public static UniqueId? Replace (this IMailFolder folder, UniqueId uid...
    method ReplaceAsync (line 1442) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, U...
    method Replace (line 1502) | public static UniqueId? Replace (this IMailFolder folder, FormatOption...
    method ReplaceAsync (line 1566) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, F...
    method Replace (line 1631) | public static UniqueId? Replace (this IMailFolder folder, FormatOption...
    method ReplaceAsync (line 1696) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, F...
    method Replace (line 1754) | public static UniqueId? Replace (this IMailFolder folder, int index, M...
    method ReplaceAsync (line 1808) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, i...
    method Replace (line 1860) | public static UniqueId? Replace (this IMailFolder folder, int index, M...
    method ReplaceAsync (line 1912) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, i...
    method Replace (line 1972) | public static UniqueId? Replace (this IMailFolder folder, FormatOption...
    method ReplaceAsync (line 2036) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, F...
    method Replace (line 2101) | public static UniqueId? Replace (this IMailFolder folder, FormatOption...
    method ReplaceAsync (line 2166) | public static Task<UniqueId?> ReplaceAsync (this IMailFolder folder, F...

FILE: MailKit/IMailFolderFetchExtensions.cs
  class IMailFolderExtensions (line 41) | public static partial class IMailFolderExtensions
    method Fetch (line 93) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 151) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 210) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 270) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 329) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 389) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 450) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 511) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 577) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 643) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 709) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 775) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 829) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 884) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 943) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 1003) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1062) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 1122) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1179) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 1236) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1298) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 1360) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1422) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, I...
    method FetchAsync (line 1484) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1539) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, i...
    method FetchAsync (line 1594) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1656) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, i...
    method FetchAsync (line 1718) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1780) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, i...
    method FetchAsync (line 1842) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 1900) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, i...
    method FetchAsync (line 1958) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 2023) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, i...
    method FetchAsync (line 2088) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...
    method Fetch (line 2150) | public static IList<IMessageSummary> Fetch (this IMailFolder folder, i...
    method FetchAsync (line 2212) | public static Task<IList<IMessageSummary>> FetchAsync (this IMailFolde...

FILE: MailKit/IMailFolderStoreExtensions.cs
  class IMailFolderExtensions (line 33) | public static partial class IMailFolderExtensions
    method GetStoreFlagsRequest (line 37) | static StoreFlagsRequest GetStoreFlagsRequest (StoreAction action, boo...
    method AddFlags (line 90) | public static void AddFlags (this IMailFolder folder, UniqueId uid, Me...
    method AddFlagsAsync (line 137) | public static Task AddFlagsAsync (this IMailFolder folder, UniqueId ui...
    method AddFlags (line 184) | public static void AddFlags (this IMailFolder folder, UniqueId uid, Me...
    method AddFlagsAsync (line 232) | public static Task AddFlagsAsync (this IMailFolder folder, UniqueId ui...
    method AddFlags (line 281) | public static void AddFlags (this IMailFolder folder, IList<UniqueId> ...
    method AddFlagsAsync (line 331) | public static Task AddFlagsAsync (this IMailFolder folder, IList<Uniqu...
    method AddFlags (line 381) | public static void AddFlags (this IMailFolder folder, IList<UniqueId> ...
    method AddFlagsAsync (line 432) | public static Task AddFlagsAsync (this IMailFolder folder, IList<Uniqu...
    method RemoveFlags (line 478) | public static void RemoveFlags (this IMailFolder folder, UniqueId uid,...
    method RemoveFlagsAsync (line 525) | public static Task RemoveFlagsAsync (this IMailFolder folder, UniqueId...
    method RemoveFlags (line 572) | public static void RemoveFlags (this IMailFolder folder, UniqueId uid,...
    method RemoveFlagsAsync (line 620) | public static Task RemoveFlagsAsync (this IMailFolder folder, UniqueId...
    method RemoveFlags (line 669) | public static void RemoveFlags (this IMailFolder folder, IList<UniqueI...
    method RemoveFlagsAsync (line 719) | public static Task RemoveFlagsAsync (this IMailFolder folder, IList<Un...
    method RemoveFlags (line 769) | public static void RemoveFlags (this IMailFolder folder, IList<UniqueI...
    method RemoveFlagsAsync (line 820) | public static Task RemoveFlagsAsync (this IMailFolder folder, IList<Un...
    method SetFlags (line 866) | public static void SetFlags (this IMailFolder folder, UniqueId uid, Me...
    method SetFlagsAsync (line 913) | public static Task SetFlagsAsync (this IMailFolder folder, UniqueId ui...
    method SetFlags (line 957) | public static void SetFlags (this IMailFolder folder, UniqueId uid, Me...
    method SetFlagsAsync (line 1002) | public static Task SetFlagsAsync (this IMailFolder folder, UniqueId ui...
    method SetFlags (line 1048) | public static void SetFlags (this IMailFolder folder, IList<UniqueId> ...
    method SetFlagsAsync (line 1095) | public static Task SetFlagsAsync (this IMailFolder folder, IList<Uniqu...
    method SetFlags (line 1142) | public static void SetFlags (this IMailFolder folder, IList<UniqueId> ...
    method SetFlagsAsync (line 1190) | public static Task SetFlagsAsync (this IMailFolder folder, IList<Uniqu...
    method AddFlags (line 1241) | public static IList<UniqueId> AddFlags (this IMailFolder folder, IList...
    method AddFlagsAsync (line 1292) | public static Task<IList<UniqueId>> AddFlagsAsync (this IMailFolder fo...
    method AddFlags (line 1344) | public static IList<UniqueId> AddFlags (this IMailFolder folder, IList...
    method AddFlagsAsync (line 1396) | public static Task<IList<UniqueId>> AddFlagsAsync (this IMailFolder fo...
    method RemoveFlags (line 1447) | public static IList<UniqueId> RemoveFlags (this IMailFolder folder, IL...
    method RemoveFlagsAsync (line 1498) | public static Task<IList<UniqueId>> RemoveFlagsAsync (this IMailFolder...
    method RemoveFlags (line 1550) | public static IList<UniqueId> RemoveFlags (this IMailFolder folder, IL...
    method RemoveFlagsAsync (line 1602) | public static Task<IList<UniqueId>> RemoveFlagsAsync (this IMailFolder...
    method SetFlags (line 1653) | public static IList<UniqueId> SetFlags (this IMailFolder folder, IList...
    method SetFlagsAsync (line 1704) | public static Task<IList<UniqueId>> SetFlagsAsync (this IMailFolder fo...
    method SetFlags (line 1756) | public static IList<UniqueId> SetFlags (this IMailFolder folder, IList...
    method SetFlagsAsync (line 1808) | public static Task<IList<UniqueId>> SetFlagsAsync (this IMailFolder fo...
    method AddFlags (line 1851) | public static void AddFlags (this IMailFolder folder, int index, Messa...
    method AddFlagsAsync (line 1895) | public static Task AddFlagsAsync (this IMailFolder folder, int index, ...
    method AddFlags (line 1939) | public static void AddFlags (this IMailFolder folder, int index, Messa...
    method AddFlagsAsync (line 1984) | public static Task AddFlagsAsync (this IMailFolder folder, int index, ...
    method AddFlags (line 2030) | public static void AddFlags (this IMailFolder folder, IList<int> index...
    method AddFlagsAsync (line 2077) | public static Task AddFlagsAsync (this IMailFolder folder, IList<int> ...
    method AddFlags (line 2124) | public static void AddFlags (this IMailFolder folder, IList<int> index...
    method AddFlagsAsync (line 2172) | public static Task AddFlagsAsync (this IMailFolder folder, IList<int> ...
    method RemoveFlags (line 2215) | public static void RemoveFlags (this IMailFolder folder, int index, Me...
    method RemoveFlagsAsync (line 2259) | public static Task RemoveFlagsAsync (this IMailFolder folder, int inde...
    method RemoveFlags (line 2303) | public static void RemoveFlags (this IMailFolder folder, int index, Me...
    method RemoveFlagsAsync (line 2348) | public static Task RemoveFlagsAsync (this IMailFolder folder, int inde...
    method RemoveFlags (line 2394) | public static void RemoveFlags (this IMailFolder folder, IList<int> in...
    method RemoveFlagsAsync (line 2441) | public static Task RemoveFlagsAsync (this IMailFolder folder, IList<in...
    method RemoveFlags (line 2488) | public static void RemoveFlags (this IMailFolder folder, IList<int> in...
    method RemoveFlagsAsync (line 2536) | public static Task RemoveFlagsAsync (this IMailFolder folder, IList<in...
    method SetFlags (line 2579) | public static void SetFlags (this IMailFolder folder, int index, Messa...
    method SetFlagsAsync (line 2623) | public static Task SetFlagsAsync (this IMailFolder folder, int index, ...
    method SetFlags (line 2667) | public static void SetFlags (this IMailFolder folder, int index, Messa...
    method SetFlagsAsync (line 2712) | public static Task SetFlagsAsync (this IMailFolder folder, int index, ...
    method SetFlags (line 2758) | public static void SetFlags (this IMailFolder folder, IList<int> index...
    method SetFlagsAsync (line 2805) | public static Task SetFlagsAsync (this IMailFolder folder, IList<int> ...
    method SetFlags (line 2852) | public static void SetFlags (this IMailFolder folder, IList<int> index...
    method SetFlagsAsync (line 2900) | public static Task SetFlagsAsync (this IMailFolder folder, IList<int> ...
    method AddFlags (line 2951) | public static IList<int> AddFlags (this IMailFolder folder, IList<int>...
    method AddFlagsAsync (line 3002) | public static Task<IList<int>> AddFlagsAsync (this IMailFolder folder,...
    method AddFlags (line 3054) | public static IList<int> AddFlags (this IMailFolder folder, IList<int>...
    method AddFlagsAsync (line 3106) | public static Task<IList<int>> AddFlagsAsync (this IMailFolder folder,...
    method RemoveFlags (line 3157) | public static IList<int> RemoveFlags (this IMailFolder folder, IList<i...
    method RemoveFlagsAsync (line 3208) | public static Task<IList<int>> RemoveFlagsAsync (this IMailFolder fold...
    method RemoveFlags (line 3260) | public static IList<int> RemoveFlags (this IMailFolder folder, IList<i...
    method RemoveFlagsAsync (line 3312) | public static Task<IList<int>> RemoveFlagsAsync (this IMailFolder fold...
    method SetFlags (line 3363) | public static IList<int> SetFlags (this IMailFolder folder, IList<int>...
    method SetFlagsAsync (line 3414) | public static Task<IList<int>> SetFlagsAsync (this IMailFolder folder,...
    method SetFlags (line 3466) | public static IList<int> SetFlags (this IMailFolder folder, IList<int>...
    method SetFlagsAsync (line 3518) | public static Task<IList<int>> SetFlagsAsync (this IMailFolder folder,...
    method GetStoreLabelsRequest (line 3527) | static StoreLabelsRequest GetStoreLabelsRequest (StoreAction action, b...
    method AddLabels (line 3579) | public static void AddLabels (this IMailFolder folder, UniqueId uid, I...
    method AddLabelsAsync (line 3626) | public static Task AddLabelsAsync (this IMailFolder folder, UniqueId u...
    method AddLabels (line 3674) | public static void AddLabels (this IMailFolder folder, IList<UniqueId>...
    method AddLabelsAsync (line 3723) | public static Task AddLabelsAsync (this IMailFolder folder, IList<Uniq...
    method RemoveLabels (line 3769) | public static void RemoveLabels (this IMailFolder folder, UniqueId uid...
    method RemoveLabelsAsync (line 3816) | public static Task RemoveLabelsAsync (this IMailFolder folder, UniqueI...
    method RemoveLabels (line 3864) | public static void RemoveLabels (this IMailFolder folder, IList<Unique...
    method RemoveLabelsAsync (line 3913) | public static Task RemoveLabelsAsync (this IMailFolder folder, IList<U...
    method SetLabels (line 3959) | public static void SetLabels (this IMailFolder folder, UniqueId uid, I...
    method SetLabelsAsync (line 4006) | public static Task SetLabelsAsync (this IMailFolder folder, UniqueId u...
    method SetLabels (line 4054) | public static void SetLabels (this IMailFolder folder, IList<UniqueId>...
    method SetLabelsAsync (line 4103) | public static Task SetLabelsAsync (this IMailFolder folder, IList<Uniq...
    method AddLabels (line 4156) | public static IList<UniqueId> AddLabels (this IMailFolder folder, ILis...
    method AddLabelsAsync (line 4209) | public static Task<IList<UniqueId>> AddLabelsAsync (this IMailFolder f...
    method RemoveLabels (line 4262) | public static IList<UniqueId> RemoveLabels (this IMailFolder folder, I...
    method RemoveLabelsAsync (line 4315) | public static Task<IList<UniqueId>> RemoveLabelsAsync (this IMailFolde...
    method SetLabels (line 4368) | public static IList<UniqueId> SetLabels (this IMailFolder folder, ILis...
    method SetLabelsAsync (line 4421) | public static Task<IList<UniqueId>> SetLabelsAsync (this IMailFolder f...
    method AddLabels (line 4467) | public static void AddLabels (this IMailFolder folder, int index, ILis...
    method AddLabelsAsync (line 4514) | public static Task AddLabelsAsync (this IMailFolder folder, int index,...
    method AddLabels (line 4562) | public static void AddLabels (this IMailFolder folder, IList<int> inde...
    method AddLabelsAsync (line 4611) | public static Task AddLabelsAsync (this IMailFolder folder, IList<int>...
    method RemoveLabels (line 4657) | public static void RemoveLabels (this IMailFolder folder, int index, I...
    method RemoveLabelsAsync (line 4704) | public static Task RemoveLabelsAsync (this IMailFolder folder, int ind...
    method RemoveLabels (line 4752) | public static void RemoveLabels (this IMailFolder folder, IList<int> i...
    method RemoveLabelsAsync (line 4801) | public static Task RemoveLabelsAsync (this IMailFolder folder, IList<i...
    method SetLabels (line 4847) | public static void SetLabels (this IMailFolder folder, int index, ILis...
    method SetLabelsAsync (line 4894) | public static Task SetLabelsAsync (this IMailFolder folder, int index,...
    method SetLabels (line 4942) | public static void SetLabels (this IMailFolder folder, IList<int> inde...
    method SetLabelsAsync (line 4991) | public static Task SetLabelsAsync (this IMailFolder folder, IList<int>...
    method AddLabels (line 5044) | public static IList<int> AddLabels (this IMailFolder folder, IList<int...
    method AddLabelsAsync (line 5097) | public static Task<IList<int>> AddLabelsAsync (this IMailFolder folder...
    method RemoveLabels (line 5150) | public static IList<int> RemoveLabels (this IMailFolder folder, IList<...
    method RemoveLabelsAsync (line 5203) | public static Task<IList<int>> RemoveLabelsAsync (this IMailFolder fol...
    method SetLabels (line 5256) | public static IList<int> SetLabels (this IMailFolder folder, IList<int...
    method SetLabelsAsync (line 5309) | public static Task<IList<int>> SetLabelsAsync (this IMailFolder folder...

FILE: MailKit/IMailService.cs
  method Connect (line 363) | void Connect (string host, int port, bool useSsl, CancellationToken canc...
  method ConnectAsync (line 402) | Task ConnectAsync (string host, int port, bool useSsl, CancellationToken...
  method Connect (line 440) | void Connect (string host, int port = 0, SecureSocketOptions options = S...
  method ConnectAsync (line 479) | Task ConnectAsync (string host, int port = 0, SecureSocketOptions option...
  method Connect (line 522) | void Connect (Socket socket, string host, int port = 0, SecureSocketOpti...
  method ConnectAsync (line 566) | Task ConnectAsync (Socket socket, string host, int port = 0, SecureSocke...
  method Connect (line 607) | void Connect (Stream stream, string host, int port = 0, SecureSocketOpti...
  method ConnectAsync (line 649) | Task ConnectAsync (Stream stream, string host, int port = 0, SecureSocke...
  method Authenticate (line 693) | void Authenticate (ICredentials credentials, CancellationToken cancellat...
  method AuthenticateAsync (line 738) | Task AuthenticateAsync (ICredentials credentials, CancellationToken canc...
  method Authenticate (line 785) | void Authenticate (Encoding encoding, ICredentials credentials, Cancella...
  method AuthenticateAsync (line 833) | Task AuthenticateAsync (Encoding encoding, ICredentials credentials, Can...
  method Authenticate (line 883) | void Authenticate (Encoding encoding, string userName, string password, ...
  method AuthenticateAsync (line 934) | Task AuthenticateAsync (Encoding encoding, string userName, string passw...
  method Authenticate (line 984) | void Authenticate (string userName, string password, CancellationToken c...
  method AuthenticateAsync (line 1032) | Task AuthenticateAsync (string userName, string password, CancellationTo...
  method Authenticate (line 1069) | void Authenticate (SaslMechanism mechanism, CancellationToken cancellati...
  method AuthenticateAsync (line 1107) | Task AuthenticateAsync (SaslMechanism mechanism, CancellationToken cance...
  method Disconnect (line 1136) | void Disconnect (bool quit, CancellationToken cancellationToken = default);
  method DisconnectAsync (line 1166) | Task DisconnectAsync (bool quit, CancellationToken cancellationToken = d...
  method NoOp (line 1193) | void NoOp (CancellationToken cancellationToken = default);
  method NoOpAsync (line 1224) | Task NoOpAsync (CancellationToken cancellationToken = default);

FILE: MailKit/IMailSpool.cs
  type IMailSpool (line 42) | public interface IMailSpool : IMailService, IEnumerable<MimeMessage>
    method GetMessageCount (line 77) | int GetMessageCount (CancellationToken cancellationToken = default);
    method GetMessageCountAsync (line 87) | Task<int> GetMessageCountAsync (CancellationToken cancellationToken = ...
    method GetMessageUid (line 99) | string GetMessageUid (int index, CancellationToken cancellationToken =...
    method GetMessageUidAsync (line 111) | Task<string> GetMessageUidAsync (int index, CancellationToken cancella...
    method GetMessageUids (line 122) | IList<string> GetMessageUids (CancellationToken cancellationToken = de...
    method GetMessageUidsAsync (line 133) | Task<IList<string>> GetMessageUidsAsync (CancellationToken cancellatio...
    method GetMessageSize (line 144) | int GetMessageSize (int index, CancellationToken cancellationToken = d...
    method GetMessageSizeAsync (line 155) | Task<int> GetMessageSizeAsync (int index, CancellationToken cancellati...
    method GetMessageSizes (line 165) | IList<int> GetMessageSizes (CancellationToken cancellationToken = defa...
    method GetMessageSizesAsync (line 175) | Task<IList<int>> GetMessageSizesAsync (CancellationToken cancellationT...
    method GetMessageHeaders (line 186) | HeaderList GetMessageHeaders (int index, CancellationToken cancellatio...
    method GetMessageHeadersAsync (line 197) | Task<HeaderList> GetMessageHeadersAsync (int index, CancellationToken ...
    method GetMessageHeaders (line 208) | IList<HeaderList> GetMessageHeaders (IList<int> indexes, CancellationT...
    method GetMessageHeadersAsync (line 219) | Task<IList<HeaderList>> GetMessageHeadersAsync (IList<int> indexes, Ca...
    method GetMessageHeaders (line 231) | IList<HeaderList> GetMessageHeaders (int startIndex, int count, Cancel...
    method GetMessageHeadersAsync (line 243) | Task<IList<HeaderList>> GetMessageHeadersAsync (int startIndex, int co...
    method GetMessage (line 255) | MimeMessage GetMessage (int index, CancellationToken cancellationToken...
    method GetMessageAsync (line 267) | Task<MimeMessage> GetMessageAsync (int index, CancellationToken cancel...
    method GetMessages (line 279) | IList<MimeMessage> GetMessages (IList<int> indexes, CancellationToken ...
    method GetMessagesAsync (line 291) | Task<IList<MimeMessage>> GetMessagesAsync (IList<int> indexes, Cancell...
    method GetMessages (line 304) | IList<MimeMessage> GetMessages (int startIndex, int count, Cancellatio...
    method GetMessagesAsync (line 317) | Task<IList<MimeMessage>> GetMessagesAsync (int startIndex, int count, ...
    method GetStream (line 330) | Stream GetStream (int index, bool headersOnly = false, CancellationTok...
    method GetStreamAsync (line 343) | Task<Stream> GetStreamAsync (int index, bool headersOnly = false, Canc...
    method GetStreams (line 356) | IList<Stream> GetStreams (IList<int> indexes, bool headersOnly = false...
    method GetStreamsAsync (line 369) | Task<IList<Stream>> GetStreamsAsync (IList<int> indexes, bool headersO...
    method GetStreams (line 383) | IList<Stream> GetStreams (int startIndex, int count, bool headersOnly ...
    method GetStreamsAsync (line 397) | Task<IList<Stream>> GetStreamsAsync (int startIndex, int count, bool h...
    method DeleteMessage (line 409) | void DeleteMessage (int index, CancellationToken cancellationToken = d...
    method DeleteMessageAsync (line 422) | Task DeleteMessageAsync (int index, CancellationToken cancellationToke...
    method DeleteMessages (line 434) | void DeleteMessages (IList<int> indexes, CancellationToken cancellatio...
    method DeleteMessagesAsync (line 447) | Task DeleteMessagesAsync (IList<int> indexes, CancellationToken cancel...
    method DeleteMessages (line 460) | void DeleteMessages (int startIndex, int count, CancellationToken canc...
    method DeleteMessagesAsync (line 474) | Task DeleteMessagesAsync (int startIndex, int count, CancellationToken...
    method DeleteAllMessages (line 485) | void DeleteAllMessages (CancellationToken cancellationToken = default);
    method DeleteAllMessagesAsync (line 497) | Task DeleteAllMessagesAsync (CancellationToken cancellationToken = def...
    method Reset (line 508) | void Reset (CancellationToken cancellationToken = default);
    method ResetAsync (line 520) | Task ResetAsync (CancellationToken cancellationToken = default);

FILE: MailKit/IMailStore.cs
  type IMailStore (line 40) | public interface IMailStore : IMailService
    method EnableQuickResync (line 143) | void EnableQuickResync (CancellationToken cancellationToken = default);
    method EnableQuickResyncAsync (line 187) | Task EnableQuickResyncAsync (CancellationToken cancellationToken = def...
    method GetFolder (line 201) | IMailFolder? GetFolder (SpecialFolder folder);
    method GetFolder (line 218) | IMailFolder GetFolder (FolderNamespace @namespace);
    method GetFolders (line 257) | IList<IMailFolder> GetFolders (FolderNamespace @namespace, bool subscr...
    method GetFoldersAsync (line 296) | Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, ...
    method GetFolders (line 336) | IList<IMailFolder> GetFolders (FolderNamespace @namespace, StatusItems...
    method GetFoldersAsync (line 376) | Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace @namespace, ...
    method GetFolder (line 405) | IMailFolder GetFolder (string path, CancellationToken cancellationToke...
    method GetFolderAsync (line 434) | Task<IMailFolder> GetFolderAsync (string path, CancellationToken cance...
    method GetMetadata (line 445) | string? GetMetadata (MetadataTag tag, CancellationToken cancellationTo...
    method GetMetadataAsync (line 456) | Task<string?> GetMetadataAsync (MetadataTag tag, CancellationToken can...
    method GetMetadata (line 467) | MetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, Cancell...
    method GetMetadataAsync (line 478) | Task<MetadataCollection> GetMetadataAsync (IEnumerable<MetadataTag> ta...
    method GetMetadata (line 490) | MetadataCollection GetMetadata (MetadataOptions options, IEnumerable<M...
    method GetMetadataAsync (line 502) | Task<MetadataCollection> GetMetadataAsync (MetadataOptions options, IE...
    method SetMetadata (line 512) | void SetMetadata (MetadataCollection metadata, CancellationToken cance...
    method SetMetadataAsync (line 523) | Task SetMetadataAsync (MetadataCollection metadata, CancellationToken ...

FILE: MailKit/IMailTransport.cs
  type IMailTransport (line 42) | public interface IMailTransport : IMailService
    method Send (line 60) | string Send (MimeMessage message, CancellationToken cancellationToken ...
    method SendAsync (line 78) | Task<string> SendAsync (MimeMessage message, CancellationToken cancell...
    method Send (line 92) | string Send (MimeMessage message, MailboxAddress sender, IEnumerable<M...
    method SendAsync (line 106) | Task<string> SendAsync (MimeMessage message, MailboxAddress sender, IE...
    method Send (line 125) | string Send (FormatOptions options, MimeMessage message, CancellationT...
    method SendAsync (line 144) | Task<string> SendAsync (FormatOptions options, MimeMessage message, Ca...
    method Send (line 159) | string Send (FormatOptions options, MimeMessage message, MailboxAddres...
    method SendAsync (line 174) | Task<string> SendAsync (FormatOptions options, MimeMessage message, Ma...

FILE: MailKit/IMessageSummary.cs
  type IMessageSummary (line 49) | public interface IMessageSummary

FILE: MailKit/IProtocolLogger.cs
  type IProtocolLogger (line 39) | public interface IProtocolLogger : IDisposable
    method LogConnect (line 66) | void LogConnect (Uri uri);
    method LogClient (line 95) | void LogClient (byte[] buffer, int offset, int count);
    method LogServer (line 123) | void LogServer (byte[] buffer, int offset, int count);

FILE: MailKit/IReplaceRequest.cs
  type IReplaceRequest (line 34) | public interface IReplaceRequest : IAppendRequest

FILE: MailKit/IStoreFlagsRequest.cs
  type IStoreFlagsRequest (line 36) | public interface IStoreFlagsRequest : IStoreRequest

FILE: MailKit/IStoreLabelsRequest.cs
  type IStoreLabelsRequest (line 36) | public interface IStoreLabelsRequest : IStoreRequest

FILE: MailKit/IStoreRequest.cs
  type IStoreRequest (line 34) | public interface IStoreRequest

FILE: MailKit/ITransferProgress.cs
  type ITransferProgress (line 34) | public interface ITransferProgress
    method Report (line 47) | void Report (long bytesTransferred, long totalSize);
    method Report (line 56) | void Report (long bytesTransferred);

FILE: MailKit/MailFolder.cs
  class MailFolder (line 51) | public abstract class MailFolder : IMailFolder
    method MailFolder (line 70) | [Obsolete ("Use MailFolder (string fullName, char directorySeparator, ...
    method MailFolder (line 92) | protected MailFolder (string fullName, char directorySeparator, Folder...
    method GetBaseName (line 107) | internal static string GetBaseName (string fullName, char delim)
    method Supports (line 500) | public abstract bool Supports (FolderFeature feature);
    method Open (line 552) | public abstract FolderAccess Open (FolderAccess access, uint uidValidi...
    method OpenAsync (line 604) | public abstract Task<FolderAccess> OpenAsync (FolderAccess access, uin...
    method Open (line 642) | public abstract FolderAccess Open (FolderAccess access, CancellationTo...
    method OpenAsync (line 680) | public abstract Task<FolderAccess> OpenAsync (FolderAccess access, Can...
    method Close (line 714) | public abstract void Close (bool expunge = false, CancellationToken ca...
    method CloseAsync (line 749) | public abstract Task CloseAsync (bool expunge = false, CancellationTok...
    method Create (line 791) | public abstract IMailFolder? Create (string name, bool isMessageFolder...
    method CreateAsync (line 833) | public abstract Task<IMailFolder?> CreateAsync (string name, bool isMe...
    method Create (line 880) | public abstract IMailFolder? Create (string name, IEnumerable<SpecialF...
    method CreateAsync (line 927) | public abstract Task<IMailFolder?> CreateAsync (string name, IEnumerab...
    method Create (line 972) | public virtual IMailFolder? Create (string name, SpecialFolder special...
    method CreateAsync (line 1020) | public virtual Task<IMailFolder?> CreateAsync (string name, SpecialFol...
    method Rename (line 1071) | public abstract void Rename (IMailFolder parent, string name, Cancella...
    method RenameAsync (line 1120) | public abstract Task RenameAsync (IMailFolder parent, string name, Can...
    method Delete (line 1156) | public abstract void Delete (CancellationToken cancellationToken = def...
    method DeleteAsync (line 1193) | public abstract Task DeleteAsync (CancellationToken cancellationToken ...
    method Subscribe (line 1223) | public abstract void Subscribe (CancellationToken cancellationToken = ...
    method SubscribeAsync (line 1254) | public abstract Task SubscribeAsync (CancellationToken cancellationTok...
    method Unsubscribe (line 1284) | public abstract void Unsubscribe (CancellationToken cancellationToken ...
    method UnsubscribeAsync (line 1315) | public abstract Task UnsubscribeAsync (CancellationToken cancellationT...
    method GetSubfolders (line 1351) | public abstract IList<IMailFolder> GetSubfolders (StatusItems items, b...
    method GetSubfoldersAsync (line 1387) | public abstract Task<IList<IMailFolder>> GetSubfoldersAsync (StatusIte...
    method GetSubfolders (line 1419) | public virtual IList<IMailFolder> GetSubfolders (bool subscribedOnly =...
    method GetSubfoldersAsync (line 1454) | public virtual Task<IList<IMailFolder>> GetSubfoldersAsync (bool subsc...
    method GetSubfolder (line 1498) | public abstract IMailFolder GetSubfolder (string name, CancellationTok...
    method GetSubfolderAsync (line 1539) | public abstract Task<IMailFolder> GetSubfolderAsync (string name, Canc...
    method Check (line 1572) | public abstract void Check (CancellationToken cancellationToken = defa...
    method CheckAsync (line 1606) | public abstract Task CheckAsync (CancellationToken cancellationToken =...
    method Status (line 1650) | public abstract void Status (StatusItems items, CancellationToken canc...
    method StatusAsync (line 1692) | public abstract Task StatusAsync (StatusItems items, CancellationToken...
    method GetAccessControlList (line 1726) | public abstract AccessControlList GetAccessControlList (CancellationTo...
    method GetAccessControlListAsync (line 1760) | public abstract Task<AccessControlList> GetAccessControlListAsync (Can...
    method GetAccessRights (line 1798) | public abstract AccessRights GetAccessRights (string name, Cancellatio...
    method GetAccessRightsAsync (line 1836) | public abstract Task<AccessRights> GetAccessRightsAsync (string name, ...
    method GetMyAccessRights (line 1870) | public abstract AccessRights GetMyAccessRights (CancellationToken canc...
    method GetMyAccessRightsAsync (line 1904) | public abstract Task<AccessRights> GetMyAccessRightsAsync (Cancellatio...
    method AddAccessRights (line 1944) | public abstract void AddAccessRights (string name, AccessRights rights...
    method AddAccessRightsAsync (line 1985) | public abstract Task AddAccessRightsAsync (string name, AccessRights r...
    method RemoveAccessRights (line 2025) | public abstract void RemoveAccessRights (string name, AccessRights rig...
    method RemoveAccessRightsAsync (line 2066) | public abstract Task RemoveAccessRightsAsync (string name, AccessRight...
    method SetAccessRights (line 2106) | public abstract void SetAccessRights (string name, AccessRights rights...
    method SetAccessRightsAsync (line 2147) | public abstract Task SetAccessRightsAsync (string name, AccessRights r...
    method RemoveAccess (line 2184) | public abstract void RemoveAccess (string name, CancellationToken canc...
    method RemoveAccessAsync (line 2222) | public abstract Task RemoveAccessAsync (string name, CancellationToken...
    method GetQuota (line 2258) | public abstract FolderQuota GetQuota (CancellationToken cancellationTo...
    method GetQuotaAsync (line 2294) | public abstract Task<FolderQuota> GetQuotaAsync (CancellationToken can...
    method SetQuota (line 2332) | public abstract FolderQuota SetQuota (uint? messageLimit, uint? storag...
    method SetQuotaAsync (line 2370) | public abstract Task<FolderQuota> SetQuotaAsync (uint? messageLimit, u...
    method GetMetadata (line 2405) | public abstract string? GetMetadata (MetadataTag tag, CancellationToke...
    method GetMetadataAsync (line 2440) | public abstract Task<string?> GetMetadataAsync (MetadataTag tag, Cance...
    method GetMetadata (line 2478) | public MetadataCollection GetMetadata (IEnumerable<MetadataTag> tags, ...
    method GetMetadataAsync (line 2519) | public virtual Task<MetadataCollection> GetMetadataAsync (IEnumerable<...
    method GetMetadata (line 2563) | public abstract MetadataCollection GetMetadata (MetadataOptions option...
    method GetMetadataAsync (line 2604) | public abstract Task<MetadataCollection> GetMetadataAsync (MetadataOpt...
    method SetMetadata (line 2641) | public abstract void SetMetadata (MetadataCollection metadata, Cancell...
    method SetMetadataAsync (line 2679) | public abstract Task SetMetadataAsync (MetadataCollection metadata, Ca...
    method Expunge (line 2718) | public abstract void Expunge (CancellationToken cancellationToken = de...
    method ExpungeAsync (line 2758) | public abstract Task ExpungeAsync (CancellationToken cancellationToken...
    method Expunge (line 2804) | public abstract void Expunge (IList<UniqueId> uids, CancellationToken ...
    method ExpungeAsync (line 2851) | public abstract Task ExpungeAsync (IList<UniqueId> uids, CancellationT...
    method Append (line 2897) | public virtual UniqueId? Append (IAppendRequest request, CancellationT...
    method AppendAsync (line 2946) | public virtual Task<UniqueId?> AppendAsync (IAppendRequest request, Ca...
    method Append (line 2998) | public abstract UniqueId? Append (FormatOptions options, IAppendReques...
    method AppendAsync (line 3047) | public abstract Task<UniqueId?> AppendAsync (FormatOptions options, IA...
    method Append (line 3096) | public virtual IList<UniqueId> Append (IList<IAppendRequest> requests,...
    method AppendAsync (line 3148) | public virtual Task<IList<UniqueId>> AppendAsync (IList<IAppendRequest...
    method Append (line 3203) | public abstract IList<UniqueId> Append (FormatOptions options, IList<I...
    method AppendAsync (line 3255) | public abstract Task<IList<UniqueId>> AppendAsync (FormatOptions optio...
    method Replace (line 3305) | public virtual UniqueId? Replace (UniqueId uid, IReplaceRequest reques...
    method ReplaceAsync (line 3358) | public virtual Task<UniqueId?> ReplaceAsync (UniqueId uid, IReplaceReq...
    method Replace (line 3417) | public abstract UniqueId? Replace (FormatOptions options, UniqueId uid...
    method ReplaceAsync (line 3473) | public abstract Task<UniqueId?> ReplaceAsync (FormatOptions options, U...
    method Replace (line 3524) | public virtual UniqueId? Replace (int index, IReplaceRequest request, ...
    method ReplaceAsync (line 3578) | public virtual Task<UniqueId?> ReplaceAsync (int index, IReplaceReques...
    method Replace (line 3638) | public abstract UniqueId? Replace (FormatOptions options, int index, I...
    method ReplaceAsync (line 3695) | public abstract Task<UniqueId?> ReplaceAsync (FormatOptions options, i...
    method CopyTo (line 3742) | public virtual UniqueId? CopyTo (UniqueId uid, IMailFolder destination...
    method CopyToAsync (line 3797) | public virtual async Task<UniqueId?> CopyToAsync (UniqueId uid, IMailF...
    method CopyTo (line 3854) | public abstract UniqueIdMap CopyTo (IList<UniqueId> uids, IMailFolder ...
    method CopyToAsync (line 3903) | public abstract Task<UniqueIdMap> CopyToAsync (IList<UniqueId> uids, I...
    method MoveTo (line 3950) | public virtual UniqueId? MoveTo (UniqueId uid, IMailFolder destination...
    method MoveToAsync (line 4005) | public virtual async Task<UniqueId?> MoveToAsync (UniqueId uid, IMailF...
    method MoveTo (line 4062) | public abstract UniqueIdMap MoveTo (IList<UniqueId> uids, IMailFolder ...
    method MoveToAsync (line 4111) | public abstract Task<UniqueIdMap> MoveToAsync (IList<UniqueId> uids, I...
    method CopyTo (line 4155) | public virtual void CopyTo (int index, IMailFolder destination, Cancel...
    method CopyToAsync (line 4206) | public virtual Task CopyToAsync (int index, IMailFolder destination, C...
    method CopyTo (line 4257) | public abstract void CopyTo (IList<int> indexes, IMailFolder destinati...
    method CopyToAsync (line 4303) | public abstract Task CopyToAsync (IList<int> indexes, IMailFolder dest...
    method MoveTo (line 4347) | public virtual void MoveTo (int index, IMailFolder destination, Cancel...
    method MoveToAsync (line 4398) | public virtual Task MoveToAsync (int index, IMailFolder destination, C...
    method MoveTo (line 4449) | public abstract void MoveTo (IList<int> indexes, IMailFolder destinati...
    method MoveToAsync (line 4495) | public abstract Task MoveToAsync (IList<int> indexes, IMailFolder dest...
    method Fetch (line 4548) | public abstract IList<IMessageSummary> Fetch (IList<UniqueId> uids, IF...
    method FetchAsync (line 4599) | public abstract Task<IList<IMessageSummary>> FetchAsync (IList<UniqueI...
    method Fetch (line 4649) | public abstract IList<IMessageSummary> Fetch (IList<int> indexes, IFet...
    method FetchAsync (line 4700) | public abstract Task<IList<IMessageSummary>> FetchAsync (IList<int> in...
    method Fetch (line 4752) | public abstract IList<IMessageSummary> Fetch (int min, int max, IFetch...
    method FetchAsync (line 4804) | public abstract Task<IList<IMessageSummary>> FetchAsync (int min, int ...
    method GetHeaders (line 4846) | public abstract HeaderList GetHeaders (UniqueId uid, CancellationToken...
    method GetHeadersAsync (line 4888) | public abstract Task<HeaderList> GetHeadersAsync (UniqueId uid, Cancel...
    method GetHeaders (line 4934) | public abstract HeaderList GetHeaders (UniqueId uid, BodyPart part, Ca...
    method GetHeadersAsync (line 4980) | public abstract Task<HeaderList> GetHeadersAsync (UniqueId uid, BodyPa...
    method GetHeaders (line 5022) | public abstract HeaderList GetHeaders (int index, CancellationToken ca...
    method GetHeadersAsync (line 5064) | public abstract Task<HeaderList> GetHeadersAsync (int index, Cancellat...
    method GetHeaders (line 5110) | public abstract HeaderList GetHeaders (int index, BodyPart part, Cance...
    method GetHeadersAsync (line 5156) | public abstract Task<HeaderList> GetHeadersAsync (int index, BodyPart ...
    method GetMessage (line 5201) | public abstract MimeMessage GetMessage (UniqueId uid, CancellationToke...
    method GetMessageAsync (line 5246) | public abstract Task<MimeMessage> GetMessageAsync (UniqueId uid, Cance...
    method GetMessage (line 5291) | public abstract MimeMessage GetMessage (int index, CancellationToken c...
    method GetMessageAsync (line 5336) | public abstract Task<MimeMessage> GetMessageAsync (int index, Cancella...
    method GetBodyPart (line 5385) | public abstract MimeEntity GetBodyPart (UniqueId uid, BodyPart part, C...
    method GetBodyPartAsync (line 5431) | public abstract Task<MimeEntity> GetBodyPartAsync (UniqueId uid, BodyP...
    method GetBodyPart (line 5477) | public abstract MimeEntity GetBodyPart (int index, BodyPart part, Canc...
    method GetBodyPartAsync (line 5523) | public abstract Task<MimeEntity> GetBodyPartAsync (int index, BodyPart...
    method GetStream (line 5568) | public virtual Stream GetStream (UniqueId uid, CancellationToken cance...
    method GetStreamAsync (line 5616) | public virtual Task<Stream> GetStreamAsync (UniqueId uid, Cancellation...
    method GetStream (line 5664) | public virtual Stream GetStream (int index, CancellationToken cancella...
    method GetStreamAsync (line 5712) | public virtual Task<Stream> GetStreamAsync (int index, CancellationTok...
    method GetStream (line 5767) | public abstract Stream GetStream (UniqueId uid, int offset, int count,...
    method GetStreamAsync (line 5819) | public abstract Task<Stream> GetStreamAsync (UniqueId uid, int offset,...
    method GetStream (line 5870) | public abstract Stream GetStream (int index, int offset, int count, Ca...
    method GetStreamAsync (line 5921) | public abstract Task<Stream> GetStreamAsync (int index, int offset, in...
    method GetStream (line 5970) | public virtual Stream GetStream (UniqueId uid, BodyPart part, Cancella...
    method GetStreamAsync (line 6028) | public virtual Task<Stream> GetStreamAsync (UniqueId uid, BodyPart par...
    method GetStream (line 6083) | public virtual Stream GetStream (int index, BodyPart part, Cancellatio...
    method GetStreamAsync (line 6138) | public virtual Task<Stream> GetStreamAsync (int index, BodyPart part, ...
    method GetStream (line 6203) | public virtual Stream GetStream (UniqueId uid, BodyPart part, int offs...
    method GetStreamAsync (line 6274) | public virtual Task<Stream> GetStreamAsync (UniqueId uid, BodyPart par...
    method GetStream (line 6344) | public virtual Stream GetStream (int index, BodyPart part, int offset,...
    method GetStreamAsync (line 6414) | public virtual Task<Stream> GetStreamAsync (int index, BodyPart part, ...
    method GetStream (line 6480) | public abstract Stream GetStream (UniqueId uid, string section, Cancel...
    method GetStreamAsync (line 6531) | public abstract Task<Stream> GetStreamAsync (UniqueId uid, string sect...
    method GetStream (line 6589) | public abstract Stream GetStream (UniqueId uid, string section, int of...
    method GetStreamAsync (line 6647) | public abstract Task<Stream> GetStreamAsync (UniqueId uid, string sect...
    method GetStream (line 6695) | public abstract Stream GetStream (int index, string section, Cancellat...
    method GetStreamAsync (line 6743) | public abstract Task<Stream> GetStreamAsync (int index, string section...
    method GetStream (line 6800) | public abstract Stream GetStream (int index, string section, int offse...
    method GetStreamAsync (line 6857) | public abstract Task<Stream> GetStreamAsync (int index, string section...
    method Store (line 6903) | public virtual bool Store (UniqueId uid, IStoreFlagsRequest request, C...
    method StoreAsync (line 6954) | public virtual async Task<bool> StoreAsync (UniqueId uid, IStoreFlagsR...
    method Store (line 7007) | public abstract IList<UniqueId> Store (IList<UniqueId> uids, IStoreFla...
    method StoreAsync (line 7055) | public abstract Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids...
    method Store (line 7101) | public virtual bool Store (int index, IStoreFlagsRequest request, Canc...
    method StoreAsync (line 7152) | public virtual async Task<bool> StoreAsync (int index, IStoreFlagsRequ...
    method Store (line 7205) | public abstract IList<int> Store (IList<int> indexes, IStoreFlagsReque...
    method StoreAsync (line 7253) | public abstract Task<IList<int>> StoreAsync (IList<int> indexes, IStor...
    method Store (line 7301) | public virtual bool Store (UniqueId uid, IStoreLabelsRequest request, ...
    method StoreAsync (line 7354) | public virtual async Task<bool> StoreAsync (UniqueId uid, IStoreLabels...
    method Store (line 7409) | public abstract IList<UniqueId> Store (IList<UniqueId> uids, IStoreLab...
    method StoreAsync (line 7459) | public abstract Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids...
    method Store (line 7507) | public virtual bool Store (int index, IStoreLabelsRequest request, Can...
    method StoreAsync (line 7560) | public virtual async Task<bool> StoreAsync (int index, IStoreLabelsReq...
    method Store (line 7615) | public abstract IList<int> Store (IList<int> indexes, IStoreLabelsRequ...
    method StoreAsync (line 7665) | public abstract Task<IList<int>> StoreAsync (IList<int> indexes, IStor...
    method Store (line 7712) | public virtual void Store (UniqueId uid, IList<Annotation> annotations...
    method StoreAsync (line 7763) | public virtual Task StoreAsync (UniqueId uid, IList<Annotation> annota...
    method Store (line 7815) | public abstract void Store (IList<UniqueId> uids, IList<Annotation> an...
    method StoreAsync (line 7865) | public abstract Task StoreAsync (IList<UniqueId> uids, IList<Annotatio...
    method Store (line 7918) | public abstract IList<UniqueId> Store (IList<UniqueId> uids, ulong mod...
    method StoreAsync (line 7971) | public abstract Task<IList<UniqueId>> StoreAsync (IList<UniqueId> uids...
    method Store (line 8018) | public virtual void Store (int index, IList<Annotation> annotations, C...
    method StoreAsync (line 8069) | public virtual Task StoreAsync (int index, IList<Annotation> annotatio...
    method Store (line 8121) | public abstract void Store (IList<int> indexes, IList<Annotation> anno...
    method StoreAsync (line 8171) | public abstract Task StoreAsync (IList<int> indexes, IList<Annotation>...
    method Store (line 8224) | public abstract IList<int> Store (IList<int> indexes, ulong modseq, IL...
    method StoreAsync (line 8277) | public abstract Task<IList<int>> StoreAsync (IList<int> indexes, ulong...
    method Search (line 8319) | public virtual IList<UniqueId> Search (SearchQuery query, Cancellation...
    method SearchAsync (line 8366) | public virtual async Task<IList<UniqueId>> SearchAsync (SearchQuery qu...
    method Search (line 8421) | public virtual IList<UniqueId> Search (IList<UniqueId> uids, SearchQue...
    method SearchAsync (line 8479) | public virtual Task<IList<UniqueId>> SearchAsync (IList<UniqueId> uids...
    method Search (line 8532) | public abstract SearchResults Search (SearchOptions options, SearchQue...
    method SearchAsync (line 8577) | public abstract Task<SearchResults> SearchAsync (SearchOptions options...
    method Search (line 8630) | public virtual SearchResults Search (SearchOptions options, IList<Uniq...
    method SearchAsync (line 8691) | public virtual Task<SearchResults> SearchAsync (SearchOptions options,...
    method Sort (line 8749) | public virtual IList<UniqueId> Sort (SearchQuery query, IList<OrderBy>...
    method SortAsync (line 8804) | public virtual async Task<IList<UniqueId>> SortAsync (SearchQuery quer...
    method Sort (line 8866) | public virtual IList<UniqueId> Sort (IList<UniqueId> uids, SearchQuery...
    method SortAsync (line 8931) | public virtual Task<IList<UniqueId>> SortAsync (IList<UniqueId> uids, ...
    method Sort (line 8991) | public abstract SearchResults Sort (SearchOptions options, SearchQuery...
    method SortAsync (line 9043) | public abstract Task<SearchResults> SortAsync (SearchOptions options, ...
    method Sort (line 9102) | public virtual SearchResults Sort (SearchOptions options, IList<Unique...
    method SortAsync (line 9170) | public virtual Task<SearchResults> SortAsync (SearchOptions options, I...
    method Thread (line 9226) | public abstract IList<MessageThread> Thread (ThreadingAlgorithm algori...
    method ThreadAsync (line 9274) | public abstract Task<IList<MessageThread>> ThreadAsync (ThreadingAlgor...
    method Thread (line 9330) | public abstract IList<MessageThread> Thread (IList<UniqueId> uids, Thr...
    method ThreadAsync (line 9386) | public abstract Task<IList<MessageThread>> ThreadAsync (IList<UniqueId...
    method OnOpened (line 9402) | protected virtual void OnOpened ()
    method OnClosed (line 9421) | internal protected virtual void OnClosed ()
    method OnDeleted (line 9449) | protected virtual void OnDeleted ()
    method OnRenamed (line 9470) | protected virtual void OnRenamed (string oldName, string newName)
    method OnParentFolderRenamed (line 9483) | protected virtual void OnParentFolderRenamed ()
    method OnParentFolderRenamed (line 9487) | void OnParentFolderRenamed (object? sender, FolderRenamedEventArgs e)
    method OnSubscribed (line 9511) | protected virtual void OnSubscribed ()
    method OnUnsubscribed (line 9530) | protected virtual void OnUnsubscribed ()
    method OnMessageExpunged (line 9553) | protected virtual void OnMessageExpunged (MessageEventArgs args)
    method OnMessagesVanished (line 9573) | protected virtual void OnMessagesVanished (MessagesVanishedEventArgs a...
    method OnMessageFlagsChanged (line 9596) | protected virtual void OnMessageFlagsChanged (MessageFlagsChangedEvent...
    method OnMessageLabelsChanged (line 9616) | protected virtual void OnMessageLabelsChanged (MessageLabelsChangedEve...
    method OnAnnotationsChanged (line 9636) | protected virtual void OnAnnotationsChanged (AnnotationsChangedEventAr...
    method OnMessageSummaryFetched (line 9686) | protected virtual void OnMessageSummaryFetched (IMessageSummary message)
    method OnMetadataChanged (line 9706) | internal protected virtual void OnMetadataChanged (Metadata metadata)
    method OnModSeqChanged (line 9726) | protected virtual void OnModSeqChanged (ModSeqChangedEventArgs args)
    method OnHighestModSeqChanged (line 9745) | protected virtual void OnHighestModSeqChanged ()
    method OnUidNextChanged (line 9764) | protected virtual void OnUidNextChanged ()
    method OnUidValidityChanged (line 9783) | protected virtual void OnUidValidityChanged ()
    method OnIdChanged (line 9802) | protected virtual void OnIdChanged ()
    method OnSizeChanged (line 9821) | protected virtual void OnSizeChanged ()
    method OnCountChanged (line 9843) | protected virtual void OnCountChanged ()
    method OnRecentChanged (line 9862) | protected virtual void OnRecentChanged ()
    method OnUnreadChanged (line 9881) | protected virtual void OnUnreadChanged ()
    method GetEnumerator (line 9907) | public abstract IEnumerator<MimeMessage> GetEnumerator ();
    method GetEnumerator (line 9928) | IEnumerator IEnumerable.GetEnumerator ()
    method ToString (line 9942) | public override string ToString ()

FILE: MailKit/MailService.cs
  method MailService (line 64) | protected MailService (IProtocolLogger protocolLogger)
  method MailService (line 89) | protected MailService () : this (new NullProtocolLogger ())
  method DefaultServerCertificateValidationCallback (line 457) | protected static bool DefaultServerCertificateValidationCallback (object...
  method GetSslClientAuthenticationOptions (line 472) | protected virtual SslClientAuthenticationOptions GetSslClientAuthenticat...
  method ConnectNetwork (line 489) | internal Stream ConnectNetwork (string host, int port, CancellationToken...
  method ConnectNetworkAsync (line 502) | internal async Task<Stream> ConnectNetworkAsync (string host, int port, ...
  method Connect (line 555) | public abstract void Connect (string host, int port = 0, SecureSocketOpt...
  method ConnectAsync (line 595) | public abstract Task ConnectAsync (string host, int port = 0, SecureSock...
  method Connect (line 638) | public abstract void Connect (Socket socket, string host, int port = 0, ...
  method ConnectAsync (line 682) | public abstract Task ConnectAsync (Socket socket, string host, int port ...
  method Connect (line 723) | public abstract void Connect (Stream stream, string host, int port = 0, ...
  method ConnectAsync (line 765) | public abstract Task ConnectAsync (Stream stream, string host, int port ...
  method IsAny (line 767) | static bool IsAny (string value, params string[] anyOf)
  method GetSecureSocketOptions (line 777) | internal SecureSocketOptions GetSecureSocketOptions (Uri uri)
  method Connect (line 842) | public void Connect (Uri uri, CancellationToken cancellationToken = defa...
  method ConnectAsync (line 888) | public Task ConnectAsync (Uri uri, CancellationToken cancellationToken =...
  method Connect (line 949) | public void Connect (string host, int port, bool useSsl, CancellationTok...
  method ConnectAsync (line 1012) | public Task ConnectAsync (string host, int port, bool useSsl, Cancellati...
  method Authenticate (line 1071) | public abstract void Authenticate (Encoding encoding, ICredentials crede...
  method AuthenticateAsync (line 1119) | public abstract Task AuthenticateAsync (Encoding encoding, ICredentials ...
  method Authenticate (line 1163) | public void Authenticate (ICredentials credentials, CancellationToken ca...
  method AuthenticateAsync (line 1211) | public Task AuthenticateAsync (ICredentials credentials, CancellationTok...
  method Authenticate (line 1264) | public void Authenticate (Encoding encoding, string userName, string pas...
  method AuthenticateAsync (line 1329) | public Task AuthenticateAsync (Encoding encoding, string userName, strin...
  method Authenticate (line 1393) | public void Authenticate (string userName, string password, Cancellation...
  method AuthenticateAsync (line 1444) | public Task AuthenticateAsync (string userName, string password, Cancell...
  method Authenticate (line 1484) | public abstract void Authenticate (SaslMechanism mechanism, Cancellation...
  method AuthenticateAsync (line 1522) | public abstract Task AuthenticateAsync (SaslMechanism mechanism, Cancell...
  method Disconnect (line 1538) | public abstract void Disconnect (bool quit, CancellationToken cancellati...
  method DisconnectAsync (line 1552) | public abstract Task DisconnectAsync (bool quit, CancellationToken cance...
  method NoOp (line 1581) | public abstract void NoOp (CancellationToken cancellationToken = default);
  method NoOpAsync (line 1611) | public abstract Task NoOpAsync (CancellationToken cancellationToken = de...
  method OnConnected (line 1631) | protected virtual void OnConnected (string host, int port, SecureSocketO...
  method OnDisconnected (line 1655) | protected virtual void OnDisconnected (string host, int port, SecureSock...
  method OnAuthenticated (line 1676) | protected virtual void OnAuthenticated (string message)
  method Dispose (line 1691) | protected virtual void Dispose (bool disposing)
  method Dispose (line 1704) | public void Dispose ()

FILE: MailKit/MailSpool.cs
  class MailSpool (line 43) | public abstract class MailSpool : MailService, IMailSpool
    method MailSpool (line 55) | protected MailSpool (IProtocolLogger protocolLogger) : base (protocolL...
    method GetMessageCount (line 138) | public abstract int GetMessageCount (CancellationToken cancellationTok...
    method GetMessageCountAsync (line 169) | public abstract Task<int> GetMessageCountAsync (CancellationToken canc...
    method GetMessageUid (line 208) | public abstract string GetMessageUid (int index, CancellationToken can...
    method GetMessageUidAsync (line 247) | public abstract Task<string> GetMessageUidAsync (int index, Cancellati...
    method GetMessageUids (line 285) | public abstract IList<string> GetMessageUids (CancellationToken cancel...
    method GetMessageUidsAsync (line 320) | public abstract Task<IList<string>> GetMessageUidsAsync (CancellationT...
    method GetMessageSize (line 355) | public abstract int GetMessageSize (int index, CancellationToken cance...
    method GetMessageSizeAsync (line 390) | public abstract Task<int> GetMessageSizeAsync (int index, Cancellation...
    method GetMessageSizes (line 421) | public abstract IList<int> GetMessageSizes (CancellationToken cancella...
    method GetMessageSizesAsync (line 452) | public abstract Task<IList<int>> GetMessageSizesAsync (CancellationTok...
    method GetMessageHeaders (line 487) | public abstract HeaderList GetMessageHeaders (int index, CancellationT...
    method GetMessageHeadersAsync (line 522) | public abstract Task<HeaderList> GetMessageHeadersAsync (int index, Ca...
    method GetMessageHeaders (line 562) | public abstract IList<HeaderList> GetMessageHeaders (IList<int> indexe...
    method GetMessageHeadersAsync (line 602) | public abstract Task<IList<HeaderList>> GetMessageHeadersAsync (IList<...
    method GetMessageHeaders (line 639) | public abstract IList<HeaderList> GetMessageHeaders (int startIndex, i...
    method GetMessageHeadersAsync (line 676) | public abstract Task<IList<HeaderList>> GetMessageHeadersAsync (int st...
    method GetMessage (line 715) | public abstract MimeMessage GetMessage (int index, CancellationToken c...
    method GetMessageAsync (line 751) | public abstract Task<MimeMessage> GetMessageAsync (int index, Cancella...
    method GetMessages (line 792) | public abstract IList<MimeMessage> GetMessages (IList<int> indexes, Ca...
    method GetMessagesAsync (line 833) | public abstract Task<IList<MimeMessage>> GetMessagesAsync (IList<int> ...
    method GetMessages (line 874) | public abstract IList<MimeMessage> GetMessages (int startIndex, int co...
    method GetMessagesAsync (line 912) | public abstract Task<IList<MimeMessage>> GetMessagesAsync (int startIn...
    method GetStream (line 949) | public abstract Stream GetStream (int index, bool headersOnly = false,...
    method GetStreamAsync (line 986) | public abstract Task<Stream> GetStreamAsync (int index, bool headersOn...
    method GetStreams (line 1031) | public abstract IList<Stream> GetStreams (IList<int> indexes, bool hea...
    method GetStreamsAsync (line 1073) | public abstract Task<IList<Stream>> GetStreamsAsync (IList<int> indexe...
    method GetStreams (line 1115) | public abstract IList<Stream> GetStreams (int startIndex, int count, b...
    method GetStreamsAsync (line 1154) | public abstract Task<IList<Stream>> GetStreamsAsync (int startIndex, i...
    method DeleteMessage (line 1193) | public abstract void DeleteMessage (int index, CancellationToken cance...
    method DeleteMessageAsync (line 1230) | public abstract Task DeleteMessageAsync (int index, CancellationToken ...
    method DeleteMessages (line 1271) | public abstract void DeleteMessages (IList<int> indexes, CancellationT...
    method DeleteMessagesAsync (line 1313) | public abstract Task DeleteMessagesAsync (IList<int> indexes, Cancella...
    method DeleteMessages (line 1354) | public abstract void DeleteMessages (int startIndex, int count, Cancel...
    method DeleteMessagesAsync (line 1393) | public abstract Task DeleteMessagesAsync (int startIndex, int count, C...
    method DeleteAllMessages (line 1425) | public abstract void DeleteAllMessages (CancellationToken cancellation...
    method DeleteAllMessagesAsync (line 1458) | public abstract Task DeleteAllMessagesAsync (CancellationToken cancell...
    method Reset (line 1490) | public abstract void Reset (CancellationToken cancellationToken = defa...
    method ResetAsync (line 1523) | public abstract Task ResetAsync (CancellationToken cancellationToken =...
    method GetEnumerator (line 1553) | public abstract IEnumerator<MimeMessage> GetEnumerator ();
    method GetEnumerator (line 1583) | IEnumerator IEnumerable.GetEnumerator ()

FILE: MailKit/MailStore.cs
  class MailStore (line 39) | public abstract class MailStore : MailService, IMailStore
    method MailStore (line 51) | protected MailStore (IProtocolLogger protocolLogger) : base (protocolL...
    method EnableQuickResync (line 168) | public abstract void EnableQuickResync (CancellationToken cancellation...
    method EnableQuickResyncAsync (line 212) | public abstract Task EnableQuickResyncAsync (CancellationToken cancell...
    method GetFolder (line 235) | public abstract IMailFolder? GetFolder (SpecialFolder folder);
    method GetFolder (line 260) | public abstract IMailFolder GetFolder (FolderNamespace @namespace);
    method GetFolders (line 296) | public virtual IList<IMailFolder> GetFolders (FolderNamespace @namespa...
    method GetFoldersAsync (line 335) | public virtual Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespa...
    method GetFolders (line 375) | public abstract IList<IMailFolder> GetFolders (FolderNamespace @namesp...
    method GetFoldersAsync (line 412) | public abstract Task<IList<IMailFolder>> GetFoldersAsync (FolderNamesp...
    method GetFolder (line 450) | public abstract IMailFolder GetFolder (string path, CancellationToken ...
    method GetFolderAsync (line 488) | public abstract Task<IMailFolder> GetFolderAsync (string path, Cancell...
    method GetMetadata (line 523) | public abstract string? GetMetadata (MetadataTag tag, CancellationToke...
    method GetMetadataAsync (line 558) | public abstract Task<string?> GetMetadataAsync (MetadataTag tag, Cance...
    method GetMetadata (line 596) | public virtual MetadataCollection GetMetadata (IEnumerable<MetadataTag...
    method GetMetadataAsync (line 637) | public virtual Task<MetadataCollection> GetMetadataAsync (IEnumerable<...
    method GetMetadata (line 681) | public abstract MetadataCollection GetMetadata (MetadataOptions option...
    method GetMetadataAsync (line 722) | public abstract Task<MetadataCollection> GetMetadataAsync (MetadataOpt...
    method SetMetadata (line 759) | public abstract void SetMetadata (MetadataCollection metadata, Cancell...
    method SetMetadataAsync (line 797) | public abstract Task SetMetadataAsync (MetadataCollection metadata, Ca...
    method OnAlert (line 818) | protected virtual void OnAlert (string message)
    method OnFolderCreated (line 838) | protected virtual void OnFolderCreated (IMailFolder folder)
    method OnMetadataChanged (line 858) | protected virtual void OnMetadataChanged (Metadata metadata)

FILE: MailKit/MailTransport.cs
  class MailTransport (line 41) | public abstract class MailTransport : MailService, IMailTransport
    method MailTransport (line 45) | static MailTransport ()
    method MailTransport (line 66) | protected MailTransport (IProtocolLogger protocolLogger) : base (proto...
    method Send (line 118) | public virtual string Send (MimeMessage message, CancellationToken can...
    method SendAsync (line 168) | public virtual Task<string> SendAsync (MimeMessage message, Cancellati...
    method Send (line 218) | public virtual string Send (MimeMessage message, MailboxAddress sender...
    method SendAsync (line 268) | public virtual Task<string> SendAsync (MimeMessage message, MailboxAdd...
    method Send (line 327) | public abstract string Send (FormatOptions options, MimeMessage messag...
    method SendAsync (line 380) | public abstract Task<string> SendAsync (FormatOptions options, MimeMes...
    method Send (line 433) | public abstract string Send (FormatOptions options, MimeMessage messag...
    method SendAsync (line 486) | public abstract Task<string> SendAsync (FormatOptions options, MimeMes...
    method OnMessageSent (line 503) | protected virtual void OnMessageSent (MessageSentEventArgs e)

FILE: MailKit/MessageEventArgs.cs
  class MessageEventArgs (line 36) | public class MessageEventArgs : EventArgs
    method MessageEventArgs (line 48) | public MessageEventArgs (int index)
    method MessageEventArgs (line 67) | public MessageEventArgs (int index, UniqueId uid)

FILE: MailKit/MessageFlags.cs
  type MessageFlags (line 36) | [Flags]

FILE: MailKit/MessageFlagsChangedEventArgs.cs
  class MessageFlagsChangedEventArgs (line 43) | public class MessageFlagsChangedEventArgs : MessageEventArgs
    method MessageFlagsChangedEventArgs (line 52) | internal MessageFlagsChangedEventArgs (int index) : base (index)
    method MessageFlagsChangedEventArgs (line 65) | public MessageFlagsChangedEventArgs (int index, MessageFlags flags) : ...
    method MessageFlagsChangedEventArgs (line 86) | public MessageFlagsChangedEventArgs (int index, MessageFlags flags, IR...
    method MessageFlagsChangedEventArgs (line 107) | public MessageFlagsChangedEventArgs (int index, MessageFlags flags, ul...
    method MessageFlagsChangedEventArgs (line 130) | public MessageFlagsChangedEventArgs (int index, MessageFlags flags, IR...
    method MessageFlagsChangedEventArgs (line 152) | public MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageF...
    method MessageFlagsChangedEventArgs (line 174) | public MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageF...
    method MessageFlagsChangedEventArgs (line 196) | public MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageF...
    method MessageFlagsChangedEventArgs (line 220) | public MessageFlagsChangedEventArgs (int index, UniqueId uid, MessageF...

FILE: MailKit/MessageLabelsChangedEventArgs.cs
  class MessageLabelsChangedEventArgs (line 38) | public class MessageLabelsChangedEventArgs : MessageEventArgs
    method MessageLabelsChangedEventArgs (line 54) | public MessageLabelsChangedEventArgs (int index, IList<string> labels)...
    method MessageLabelsChangedEventArgs (line 77) | public MessageLabelsChangedEventArgs (int index, IList<string> labels,...
    method MessageLabelsChangedEventArgs (line 101) | public MessageLabelsChangedEventArgs (int index, UniqueId uid, IList<s...
    method MessageLabelsChangedEventArgs (line 125) | public MessageLabelsChangedEventArgs (int index, UniqueId uid, IList<s...

FILE: MailKit/MessageNotFoundException.cs
  class MessageNotFoundException (line 47) | public class MessageNotFoundException : Exception
    method MessageNotFoundException (line 61) | [SecuritySafeCritical]
    method MessageNotFoundException (line 78) | public MessageNotFoundException (string message, Exception innerExcept...
    method MessageNotFoundException (line 89) | public MessageNotFoundException (string message) : base (message)

FILE: MailKit/MessageSentEventArgs.cs
  class MessageSentEventArgs (line 38) | public class MessageSentEventArgs : EventArgs
    method MessageSentEventArgs (line 53) | public MessageSentEventArgs (MimeMessage message, string response)

FILE: MailKit/MessageSorter.cs
  class MessageSorter (line 41) | public static class MessageSorter
    class MessageComparer (line 43) | class MessageComparer<T> : IComparer<T> where T : IMessageSummary
      method MessageComparer (line 47) | public MessageComparer (IList<OrderBy> orderBy)
      method CompareDisplayNames (line 54) | static int CompareDisplayNames (InternetAddressList list1, InternetA...
      method CompareMailboxAddresses (line 76) | static int CompareMailboxAddresses (InternetAddressList list1, Inter...
      method Compare (line 96) | public int Compare (T? x, T? y)
    method GetMessageSummaryItems (line 166) | static MessageSummaryItems GetMessageSummaryItems (IList<OrderBy> orde...
    method Sort (line 218) | public static IList<T> Sort<T> (this IEnumerable<T> messages, IList<Or...
    method Sort (line 269) | public static void Sort<T> (this List<T> messages, IList<OrderBy> orde...

FILE: MailKit/MessageSummary.cs
  class MessageSummary (line 52) | public class MessageSummary : IMessageSummary
    method MessageSummary (line 68) | public MessageSummary (int index)
    method MessageSummary (line 90) | public MessageSummary (IMailFolder folder, int index) : this (index)
    method UpdateThreadableSubject (line 98) | [MemberNotNull (nameof (normalizedSubject))]
    method GetMultipartRelatedRoot (line 153) | static BodyPart? GetMultipartRelatedRoot (BodyPartMultipart related)
    method TryGetMultipartAlternativeBody (line 177) | static bool TryGetMultipartAlternativeBody (BodyPartMultipart multipar...
    method TryGetMessageBody (line 206) | static bool TryGetMessageBody (BodyPartMultipart multipart, bool html,...
    method EnumerateBodyParts (line 324) | static IEnumerable<BodyPartBasic> EnumerateBodyParts (BodyPart? entity...

FILE: MailKit/MessageSummaryFetchedEventArgs.cs
  class MessageSummaryFetchedEventArgs (line 36) | public class MessageSummaryFetchedEventArgs : EventArgs
    method MessageSummaryFetchedEventArgs (line 48) | public MessageSummaryFetchedEventArgs (IMessageSummary message)

FILE: MailKit/MessageSummaryItems.cs
  type MessageSummaryItems (line 40) | [Flags]

FILE: MailKit/MessageThread.cs
  class MessageThread (line 36) | public class MessageThread
    method MessageThread (line 45) | public MessageThread (UniqueId? uid)
    method MessageThread (line 58) | public MessageThread (IMessageSummary? message)

FILE: MailKit/MessageThreader.cs
  class MessageThreader (line 50) | public static class MessageThreader
    class ThreadableNode (line 52) | internal class ThreadableNode : IMessageSummary
      method ThreadableNode (line 58) | public ThreadableNode (IMessageSummary? message)
    method CreateIdTable (line 153) | static Dictionary<string, ThreadableNode> CreateIdTable (IEnumerable<I...
    method CreateRoot (line 223) | static ThreadableNode CreateRoot (IDictionary<string, ThreadableNode> ...
    method PruneEmptyContainers (line 235) | static void PruneEmptyContainers (ThreadableNode root)
    method GroupBySubject (line 265) | static void GroupBySubject (ThreadableNode root)
    method GetThreads (line 347) | static void GetThreads (ThreadableNode root, IList<MessageThread> thre...
    method ThreadByReferences (line 360) | static List<MessageThread> ThreadByReferences (IEnumerable<IMessageSum...
    method ThreadBySubject (line 374) | static List<MessageThread> ThreadBySubject (IEnumerable<IMessageSummar...
    method Thread (line 413) | public static IList<MessageThread> Thread (this IEnumerable<IMessageSu...
    method Thread (line 443) | public static IList<MessageThread> Thread (this IEnumerable<IMessageSu...
    method IsForward (line 461) | static bool IsForward (string subject, int index)
    method IsReply (line 469) | static bool IsReply (string subject, int index)
    method SkipWhiteSpace (line 475) | static void SkipWhiteSpace (string subject, ref int index)
    method IsMailingListName (line 481) | static bool IsMailingListName (char c)
    method SkipMailingListName (line 486) | static void SkipMailingListName (string subject, ref int index)
    method SkipDigits (line 492) | static bool SkipDigits (string subject, ref int index, out int value)
    method GetThreadableSubject (line 518) | public static string GetThreadableSubject (string subject, out int rep...

FILE: MailKit/MessagesVanishedEventArgs.cs
  class MessagesVanishedEventArgs (line 38) | public class MessagesVanishedEventArgs : EventArgs
    method MessagesVanishedEventArgs (line 51) | public MessagesVanishedEventArgs (IList<UniqueId> uids, bool earlier)

FILE: MailKit/Metadata.cs
  class Metadata (line 34) | public class Metadata
    method Metadata (line 46) | public Metadata (MetadataTag tag, string value)

FILE: MailKit/MetadataChangedEventArgs.cs
  class MetadataChangedEventArgs (line 36) | public class MetadataChangedEventArgs : EventArgs
    method MetadataChangedEventArgs (line 48) | public MetadataChangedEventArgs (Metadata metadata)

FILE: MailKit/MetadataCollection.cs
  class MetadataCollection (line 36) | public class MetadataCollection : List<Metadata>
    method MetadataCollection (line 44) | public MetadataCollection ()
    method MetadataCollection (line 55) | public MetadataCollection (IEnumerable<Metadata> collection) : base (c...

FILE: MailKit/MetadataOptions.cs
  class MetadataOptions (line 37) | public class MetadataOptions
    method MetadataOptions (line 47) | public MetadataOptions ()

FILE: MailKit/MetadataTag.cs
  type MetadataTag (line 36) | public struct MetadataTag
    method MetadataTag (line 85) | public MetadataTag (string id)
    method Equals (line 116) | public override bool Equals (object? obj)
    method GetHashCode (line 128) | public override int GetHashCode ()
    method ToString (line 140) | public override string ToString ()
    method Create (line 145) | internal static MetadataTag Create (string id)

FILE: MailKit/ModSeqChangedEventArgs.cs
  class ModSeqChangedEventArgs (line 35) | public class ModSeqChangedEventArgs : MessageEventArgs
    method ModSeqChangedEventArgs (line 45) | public ModSeqChangedEventArgs (int index, ulong modseq) : base (index)
    method ModSeqChangedEventArgs (line 59) | public ModSeqChangedEventArgs (int index, UniqueId uid, ulong modseq) ...

FILE: MailKit/Net/ClientMetrics.cs
  class ClientMetrics (line 39) | sealed class ClientMetrics
    method ClientMetrics (line 46) | public ClientMetrics (Meter meter, string meterName, string an, string...
    method TryGetErrorType (line 66) | static bool TryGetErrorType (Exception exception, [NotNullWhen (true)]...
    method GetTags (line 105) | internal static TagList GetTags (Uri uri, Exception? ex)
    method RecordClientDisconnected (line 119) | public void RecordClientDisconnected (long startTimestamp, Uri uri, Ex...

FILE: MailKit/Net/IChannelBindingContext.cs
  type IChannelBindingContext (line 37) | interface IChannelBindingContext
    method TryGetChannelBinding (line 48) | bool TryGetChannelBinding (ChannelBindingKind kind, [NotNullWhen (true...
    method TryGetChannelBindingToken (line 59) | bool TryGetChannelBindingToken (ChannelBindingKind kind, [NotNullWhen ...

FILE: MailKit/Net/Imap/AsyncImapClient.cs
  class ImapClient (line 40) | public partial class ImapClient
    method CompressAsync (line 77) | public async Task CompressAsync (CancellationToken cancellationToken =...
    method EnableQuickResyncAsync (line 130) | public override async Task EnableQuickResyncAsync (CancellationToken c...
    method EnableUTF8Async (line 175) | public async Task EnableUTF8Async (CancellationToken cancellationToken...
    method IdentifyAsync (line 230) | public async Task<ImapImplementation> IdentifyAsync (ImapImplementatio...
    method OnAuthenticatedAsync (line 239) | async Task OnAuthenticatedAsync (string message, CancellationToken can...
    method AuthenticateAsync (line 288) | public override async Task AuthenticateAsync (SaslMechanism mechanism,...
    method AuthenticateAsync (line 392) | public override async Task AuthenticateAsync (Encoding encoding, ICred...
    method SslHandshakeAsync (line 506) | async Task SslHandshakeAsync (SslStream ssl, string host, Cancellation...
    method PostConnectAsync (line 515) | async Task PostConnectAsync (Stream stream, string host, int port, Sec...
    method ConnectAsync (line 649) | public override async Task ConnectAsync (string host, int port = 0, Se...
    method ConnectAsync (line 750) | public override Task ConnectAsync (Socket socket, string host, int por...
    method ConnectAsync (line 820) | public override async Task ConnectAsync (Stream stream, string host, i...
    method DisconnectAsync (line 876) | public override async Task DisconnectAsync (bool quit, CancellationTok...
    method NoOpAsync (line 943) | public override async Task NoOpAsync (CancellationToken cancellationTo...
    method IdleAsync (line 1004) | public async Task IdleAsync (CancellationToken doneToken, Cancellation...
    method NotifyAsync (line 1069) | public async Task NotifyAsync (bool status, IList<ImapEventGroup> even...
    method DisableNotifyAsync (line 1112) | public async Task DisableNotifyAsync (CancellationToken cancellationTo...
    method GetFoldersAsync (line 1159) | public override Task<IList<IMailFolder>> GetFoldersAsync (FolderNamesp...
    method GetFolderAsync (line 1207) | public override Task<IMailFolder> GetFolderAsync (string path, Cancell...
    method GetMetadataAsync (line 1252) | public override async Task<string?> GetMetadataAsync (MetadataTag tag,...
    method GetMetadataAsync (line 1300) | public override async Task<MetadataCollection> GetMetadataAsync (Metad...
    method SetMetadataAsync (line 1346) | public override async Task SetMetadataAsync (MetadataCollection metada...

FILE: MailKit/Net/Imap/IImapClient.cs
  type IImapClient (line 38) | public interface IImapClient : IMailStore
    method Compress (line 137) | void Compress (CancellationToken cancellationToken = default);
    method CompressAsync (line 174) | Task CompressAsync (CancellationToken cancellationToken = default);
    method EnableUTF8 (line 210) | void EnableUTF8 (CancellationToken cancellationToken = default);
    method EnableUTF8Async (line 247) | Task EnableUTF8Async (CancellationToken cancellationToken = default);
    method Identify (line 297) | ImapImplementation Identify (ImapImplementation clientImplementation, ...
    method IdentifyAsync (line 344) | Task<ImapImplementation> IdentifyAsync (ImapImplementation clientImple...
    method Idle (line 400) | void Idle (CancellationToken doneToken, CancellationToken cancellation...
    method IdleAsync (line 454) | Task IdleAsync (CancellationToken doneToken, CancellationToken cancell...
    method Notify (line 504) | void Notify (bool status, IList<ImapEventGroup> eventGroups, Cancellat...
    method NotifyAsync (line 555) | Task NotifyAsync (bool status, IList<ImapEventGroup> eventGroups, Canc...
    method DisableNotify (line 590) | void DisableNotify (CancellationToken cancellationToken = default);
    method DisableNotifyAsync (line 626) | Task DisableNotifyAsync (CancellationToken cancellationToken = default);

FILE: MailKit/Net/Imap/IImapFolder.cs
  type IImapFolder (line 48) | public interface IImapFolder : IMailFolder
    method GetHeaders (line 94) | HeaderList GetHeaders (UniqueId uid, string partSpecifier, Cancellatio...
    method GetHeadersAsync (line 140) | Task<HeaderList> GetHeadersAsync (UniqueId uid, string partSpecifier, ...
    method GetHeaders (line 186) | HeaderList GetHeaders (int index, string partSpecifier, CancellationTo...
    method GetHeadersAsync (line 232) | Task<HeaderList> GetHeadersAsync (int index, string partSpecifier, Can...
    method GetBodyPart (line 280) | MimeEntity GetBodyPart (UniqueId uid, string partSpecifier, Cancellati...
    method GetBodyPartAsync (line 328) | Task<MimeEntity> GetBodyPartAsync (UniqueId uid, string partSpecifier,...
    method GetBodyPart (line 376) | MimeEntity GetBodyPart (int index, string partSpecifier, CancellationT...
    method GetBodyPartAsync (line 424) | Task<MimeEntity> GetBodyPartAsync (int index, string partSpecifier, Ca...
    method GetStreams (line 468) | void GetStreams (IList<UniqueId> uids, ImapFetchStreamCallback callbac...
    method GetStreamsAsync (line 513) | Task GetStreamsAsync (IList<UniqueId> uids, ImapFetchStreamAsyncCallba...
    method GetStreams (line 557) | void GetStreams (IList<int> indexes, ImapFetchStreamCallback callback,...
    method GetStreamsAsync (line 602) | Task GetStreamsAsync (IList<int> indexes, ImapFetchStreamAsyncCallback...
    method GetStreams (line 647) | void GetStreams (int min, int max, ImapFetchStreamCallback callback, C...
    method GetStreamsAsync (line 693) | Task GetStreamsAsync (int min, int max, ImapFetchStreamAsyncCallback c...
    method Search (line 737) | SearchResults Search (string query, CancellationToken cancellationToke...
    method SearchAsync (line 781) | Task<SearchResults> SearchAsync (string query, CancellationToken cance...
    method Sort (line 828) | SearchResults Sort (string query, CancellationToken cancellationToken ...
    method SortAsync (line 875) | Task<SearchResults> SortAsync (string query, CancellationToken cancell...

FILE: MailKit/Net/Imap/ImapAuthenticationSecretDetector.cs
  class ImapAuthenticationSecretDetector (line 31) | class ImapAuthenticationSecretDetector : IAuthenticationSecretDetector
    type ImapAuthCommandState (line 35) | enum ImapAuthCommandState
    type ImapLoginTokenType (line 50) | enum ImapLoginTokenType
    type ImapLiteralState (line 58) | enum ImapLiteralState
    type ImapQStringState (line 68) | enum ImapQStringState
    method ClearLoginTokenState (line 95) | void ClearLoginTokenState ()
    method SkipText (line 104) | bool SkipText (string text, byte[] buffer, ref int index, int endIndex)
    method DetectAuthSecrets (line 119) | IList<AuthenticationSecret> DetectAuthSecrets (byte[] buffer, int offs...
    method SkipLiteralToken (line 188) | bool SkipLiteralToken (List<AuthenticationSecret> secrets, byte[] buff...
    method SkipLoginToken (line 241) | bool SkipLoginToken (List<AuthenticationSecret> secrets, byte[] buffer...
    method DetectLoginSecrets (line 319) | IList<AuthenticationSecret> DetectLoginSecrets (byte[] buffer, int off...
    method DetectSecrets (line 355) | public IList<AuthenticationSecret> DetectSecrets (byte[] buffer, int o...

FILE: MailKit/Net/Imap/ImapCapabilities.cs
  type ImapCapabilities (line 44) | [Flags]

FILE: MailKit/Net/Imap/ImapClient.cs
  method ImapClient (line 91) | public ImapClient () : this (new NullProtocolLogger ())
  method ImapClient (line 112) | public ImapClient (IProtocolLogger protocolLogger) : base (protocolLogger)
  method CheckDisposed (line 222) | void CheckDisposed ()
  method CheckConnected (line 228) | void CheckConnected ()
  method CheckAuthenticated (line 234) | void CheckAuthenticated ()
  method CreateImapFolder (line 252) | protected virtual ImapFolder CreateImapFolder (ImapFolderConstructorArgs...
  method ValidateRemoteCertificate (line 261) | bool ValidateRemoteCertificate (object? sender, X509Certificate? certifi...
  method QueueCompressCommand (line 287) | ImapCommand QueueCompressCommand (CancellationToken cancellationToken)
  method ProcessCompressResponse (line 305) | void ProcessCompressResponse (ImapCommand ic)
  method Compress (line 355) | public void Compress (CancellationToken cancellationToken = default)
  method TryQueueEnableQuickResyncCommand (line 364) | bool TryQueueEnableQuickResyncCommand (CancellationToken cancellationTok...
  method ProcessEnableResponse (line 386) | void ProcessEnableResponse (ImapCommand ic)
  method EnableQuickResync (line 443) | public override void EnableQuickResync (CancellationToken cancellationTo...
  method TryQueueEnableUTF8Command (line 453) | bool TryQueueEnableUTF8Command (CancellationToken cancellationToken, [No...
  method EnableUTF8 (line 509) | public void EnableUTF8 (CancellationToken cancellationToken = default)
  method QueueIdentifyCommand (line 519) | ImapCommand QueueIdentifyCommand (ImapImplementation clientImplementatio...
  method ProcessIdentifyResponse (line 557) | static ImapImplementation ProcessIdentifyResponse (ImapCommand ic)
  method Identify (line 612) | public ImapImplementation Identify (ImapImplementation clientImplementat...
  method CreateAuthenticationException (line 923) | static AuthenticationException CreateAuthenticationException (ImapComman...
  method EmitAndThrowOnAlert (line 936) | void EmitAndThrowOnAlert (ImapCommand ic)
  method IsHexDigit (line 948) | static bool IsHexDigit (char c)
  method HexUnescape (line 953) | static uint HexUnescape (uint c)
  method HexUnescape (line 964) | static char HexUnescape (string pattern, ref int index)
  method UnescapeUserName (line 979) | internal static string UnescapeUserName (string escaped)
  method HexEscape (line 1006) | static void HexEscape (StringBuilder builder, char c)
  method EscapeUserName (line 1013) | internal static void EscapeUserName (StringBuilder builder, string userN...
  method GetSessionIdentifier (line 1032) | string GetSessionIdentifier (string userName)
  method OnAuthenticated (line 1048) | void OnAuthenticated (string message, CancellationToken cancellationToken)
  method CheckCanAuthenticate (line 1055) | void CheckCanAuthenticate (SaslMechanism mechanism, CancellationToken ca...
  method ConfigureSaslMechanism (line 1069) | void ConfigureSaslMechanism (SaslMechanism mechanism, Uri uri)
  method ConfigureSaslMechanism (line 1075) | void ConfigureSaslMechanism (SaslMechanism mechanism)
  method ProcessAuthenticateResponse (line 1082) | void ProcessAuthenticateResponse (ImapCommand ic, SaslMechanism mechanism)
  method Authenticate (line 1140) | public override void Authenticate (SaslMechanism mechanism, Cancellation...
  method CheckCanAuthenticate (line 1195) | void CheckCanAuthenticate (Encoding encoding, ICredentials credentials)
  method CheckCanLogin (line 1210) | void CheckCanLogin (ImapCommand? ic)
  method Authenticate (line 1271) | public override void Authenticate (Encoding encoding, ICredentials crede...
  method ComputeDefaultValues (line 1388) | internal static void ComputeDefaultValues (string host, ref int port, re...
  method CheckCanConnect (line 1431) | void CheckCanConnect (string host, int port)
  method SslHandshake (line 1448) | void SslHandshake (SslStream ssl, string host, CancellationToken cancell...
  method PostConnect (line 1457) | void PostConnect (Stream stream, string host, int port, SecureSocketOpti...
  method Connect (line 1587) | public override void Connect (string host, int port = 0, SecureSocketOpt...
  method CheckCanConnect (line 1623) | void CheckCanConnect (Stream stream, string host, int port)
  method CheckCanConnect (line 1631) | void CheckCanConnect (Socket socket, string host, int port)
  method Connect (line 1703) | public override void Connect (Socket socket, string host, int port = 0, ...
  method Connect (line 1769) | public override void Connect (Stream stream, string host, int port = 0, ...
  method Disconnect (line 1824) | public override void Disconnect (bool quit, CancellationToken cancellati...
  method QueueNoOpCommand (line 1847) | ImapCommand QueueNoOpCommand (CancellationToken cancellationToken)
  method ProcessNoOpResponse (line 1856) | static void ProcessNoOpResponse (ImapCommand ic)
  method NoOp (line 1904) | public override void NoOp (CancellationToken cancellationToken = default)
  method CheckCanIdle (line 1913) | void CheckCanIdle (CancellationToken doneToken)
  method QueueIdleCommand (line 1929) | ImapCommand QueueIdleCommand (ImapIdleContext context, CancellationToken...
  method ProcessIdleResponse (line 1938) | static void ProcessIdleResponse (ImapCommand ic)
  method Idle (line 1997) | public void Idle (CancellationToken doneToken, CancellationToken cancell...
  method QueueNotifyCommand (line 2013) | ImapCommand QueueNotifyCommand (bool status, IList<ImapEventGroup> event...
  method ProcessNotifyResponse (line 2051) | void ProcessNotifyResponse (ImapCommand ic, bool notifySelectedNewExpunge)
  method Notify (line 2106) | public void Notify (bool status, IList<ImapEventGroup> eventGroups, Canc...
  method QueueDisableNotifyCommand (line 2115) | ImapCommand QueueDisableNotifyCommand (CancellationToken cancellationToken)
  method DisableNotify (line 2164) | public void DisableNotify (CancellationToken cancellationToken = default)
  method GetFolder (line 2286) | public override IMailFolder? GetFolder (SpecialFolder folder)
  method GetFolder (line 2334) | public override IMailFolder GetFolder (FolderNamespace @namespace)
  method GetFolders (line 2389) | public override IList<IMailFolder> GetFolders (FolderNamespace @namespac...
  method GetFolder (line 2437) | public override IMailFolder GetFolder (string path, CancellationToken ca...
  method QueueGetMetadataCommand (line 2449) | ImapCommand QueueGetMetadataCommand (MetadataTag tag, CancellationToken ...
  method ProcessGetMetadataResponse (line 2468) | string? ProcessGetMetadataResponse (ImapCommand ic, MetadataTag tag)
  method GetMetadata (line 2521) | public override string? GetMetadata (MetadataTag tag, CancellationToken ...
  method TryQueueGetMetadataCommand (line 2530) | bool TryQueueGetMetadataCommand (MetadataOptions options, IEnumerable<Me...
  method ProcessGetMetadataResponse (line 2594) | MetadataCollection ProcessGetMetadataResponse (ImapCommand ic, MetadataO...
  method GetMetadata (line 2647) | public override MetadataCollection GetMetadata (MetadataOptions options,...
  method TryQueueSetMetadataCommand (line 2657) | bool TryQueueSetMetadataCommand (MetadataCollection metadata, Cancellati...
  method ProcessSetMetadataResponse (line 2699) | static void ProcessSetMetadataResponse (ImapCommand ic)
  method SetMetadata (line 2739) | public override void SetMetadata (MetadataCollection metadata, Cancellat...
  method OnEngineMetadataChanged (line 2751) | void OnEngineMetadataChanged (object? sender, MetadataChangedEventArgs e)
  method OnEngineFolderCreated (line 2756) | void OnEngineFolderCreated (object? sender, FolderCreatedEventArgs e)
  method OnEngineAlert (line 2761) | void OnEngineAlert (object? sender, AlertEventArgs e)
  method OnEngineWebAlert (line 2766) | void OnEngineWebAlert (object? sender, WebAlertEventArgs e)
  method OnWebAlert (line 2793) | protected virtual void OnWebAlert (Uri uri, string message)
  method OnEngineDisconnected (line 2798) | void OnEngineDisconnected (object? sender, EventArgs e)
  method Dispose (line 2821) | protected override void Dispose (bool disposing)

FILE: MailKit/Net/Imap/ImapCommand.cs
  type ImapStringType (line 61) | enum ImapStringType {
  class ImapCommandPart (line 76) | class ImapCommandPart
    method ImapCommandPart (line 82) | public ImapCommandPart (byte[] command, ImapLiteral? literal, bool wai...
  class ImapCommand (line 93) | class ImapCommand
    method ImapCommand (line 143) | public ImapCommand (ImapEngine engine, CancellationToken cancellationT...
    method ImapCommand (line 267) | public ImapCommand (ImapEngine engine, CancellationToken cancellationT...
    method EstimateCommandLength (line 272) | internal static int EstimateCommandLength (ImapEngine engine, FormatOp...
    method EstimateCommandLength (line 359) | internal static int EstimateCommandLength (ImapEngine engine, string f...
    method UpdateProgress (line 364) | void UpdateProgress (int n)
    method IsAtom (line 371) | internal static bool IsAtom (char c)
    method IsQuotedSafe (line 376) | static bool IsQuotedSafe (ImapEngine engine, char c)
    method GetStringType (line 381) | internal static ImapStringType GetStringType (ImapEngine engine, strin...
    method CanUseNonSynchronizedLiteral (line 403) | static bool CanUseNonSynchronizedLiteral (ImapEngine engine, long length)
    method EstimateStringLength (line 409) | static int EstimateStringLength (ImapEngine engine, bool allowAtom, st...
    method AppendString (line 435) | void AppendString (FormatOptions options, bool allowAtom, ByteArrayBui...
    method RegisterUntaggedHandler (line 488) | public void RegisterUntaggedHandler (string atom, ImapUntaggedHandler ...
    method IsOkNoOrBad (line 502) | static bool IsOkNoOrBad (string atom, out ImapCommandResponse response)
    method Step (line 537) | public bool Step ()
    method StepAsync (line 679) | public async Task<bool> StepAsync ()
    method GetResponseCode (line 816) | public ImapResponseCode? GetResponseCode (ImapResponseCodeType type)
    method ThrowIfNotOk (line 832) | public void ThrowIfNotOk (string command)

FILE: MailKit/Net/Imap/ImapCommandException.cs
  class ImapCommandException (line 43) | [Serializable]
    method ImapCommandException (line 59) | [SecuritySafeCritical]
    method Create (line 77) | internal static ImapCommandException Create (string command, ImapComma...
    method ImapCommandException (line 114) | public ImapCommandException (ImapCommandResponse response, string resp...
    method ImapCommandException (line 129) | public ImapCommandException (ImapCommandResponse response, string resp...
    method ImapCommandException (line 143) | public ImapCommandException (ImapCommandResponse response, string resp...
    method GetObjectData (line 184) | [SecurityCritical]

FILE: MailKit/Net/Imap/ImapCommandResponse.cs
  type ImapCommandResponse (line 34) | public enum ImapCommandResponse {

FILE: MailKit/Net/Imap/ImapCommandStatus.cs
  type ImapCommandStatus (line 31) | enum ImapCommandStatus

FILE: MailKit/Net/Imap/ImapEncoding.cs
  class ImapEncoding (line 30) | static class ImapEncoding
    method Decode (line 45) | public static string Decode (string text)
    method Utf7ShiftOut (line 97) | static void Utf7ShiftOut (StringBuilder output, int u, int bits)
    method Encode (line 107) | public static string Encode (string text)

FILE: MailKit/Net/Imap/ImapEngine.cs
  type ImapEngineState (line 47) | enum ImapEngineState {
  type ImapProtocolVersion (line 79) | enum ImapProtocolVersion {
  type ImapUntaggedResult (line 86) | enum ImapUntaggedResult {
  type ImapQuirksMode (line 93) | enum ImapQuirksMode {
  class ImapFolderNameComparer (line 114) | class ImapFolderNameComparer : IEqualityComparer<string>
    method ImapFolderNameComparer (line 118) | public ImapFolderNameComparer (char directorySeparator)
    method Equals (line 123) | public bool Equals (string? x, string? y)
    method GetHashCode (line 131) | public int GetHashCode (string obj)
  class ImapEngine (line 140) | class ImapEngine : IDisposable
    method ImapEngine (line 168) | public ImapEngine (CreateImapFolderDelegate createImapFolderDelegate)
    method CreateImapFolder (line 571) | internal ImapFolder CreateImapFolder (string encodedName, FolderAttrib...
    method UnexpectedToken (line 578) | internal static ImapProtocolException UnexpectedToken (string format, ...
    method AssertToken (line 596) | internal static void AssertToken (ImapToken token, ImapTokenType type,...
    method AssertToken (line 602) | internal static void AssertToken (ImapToken token, ImapTokenType type1...
    method ParseNumber (line 608) | internal static uint ParseNumber (ImapToken token, bool nonZero, strin...
    method ParseNumber64 (line 620) | internal static ulong ParseNumber64 (ImapToken token, bool nonZero, st...
    method TryParseNumber64 (line 630) | internal static bool TryParseNumber64 (ImapToken token, out ulong value)
    method ParseUidSet (line 635) | internal static UniqueIdSet ParseUidSet (ImapToken token, uint validit...
    method SetStream (line 649) | internal void SetStream (ImapStream stream)
    method StartNetworkOperation (line 654) | public NetworkOperation StartNetworkOperation (NetworkOperationKind ki...
    method Initialize (line 663) | [MemberNotNull (nameof (Stream))]
    method ParseConnectedState (line 691) | ImapEngineState ParseConnectedState (ImapToken token, out bool bye)
    method DetectQuirksMode (line 710) | void DetectQuirksMode (string text)
    method Connect (line 756) | public void Connect (ImapStream stream, CancellationToken cancellation...
    method ConnectAsync (line 817) | public async Task ConnectAsync (ImapStream stream, CancellationToken c...
    method RecordClientDisconnected (line 864) | void RecordClientDisconnected (Exception? ex)
    method Disconnect (line 879) | public void Disconnect (Exception? ex)
    method ReadLine (line 921) | public string ReadLine (CancellationToken cancellationToken)
    method ReadLineAsync (line 954) | public async Task<string> ReadLineAsync (CancellationToken cancellatio...
    method ReadToken (line 987) | public ImapToken ReadToken (CancellationToken cancellationToken)
    method ReadTokenAsync (line 1009) | public ValueTask<ImapToken> ReadTokenAsync (CancellationToken cancella...
    method ReadToken (line 1032) | public ImapToken ReadToken (string specials, CancellationToken cancell...
    method ReadTokenAsync (line 1055) | public ValueTask<ImapToken> ReadTokenAsync (string specials, Cancellat...
    method PeekToken (line 1078) | public ImapToken PeekToken (string specials, CancellationToken cancell...
    method PeekTokenAsync (line 1105) | public async ValueTask<ImapToken> PeekTokenAsync (string specials, Can...
    method PeekToken (line 1131) | public ImapToken PeekToken (CancellationToken cancellationToken)
    method PeekTokenAsync (line 1157) | public async ValueTask<ImapToken> PeekTokenAsync (CancellationToken ca...
    method UngetToken (line 1173) | public void UngetToken (ImapToken token)
    method ReadLiteral (line 1192) | public string ReadLiteral (CancellationToken cancellationToken)
    method ReadLiteralAsync (line 1232) | public async Task<string> ReadLiteralAsync (CancellationToken cancella...
    method SkipLine (line 1258) | void SkipLine (CancellationToken cancellationToken)
    method SkipLineAsync (line 1280) | async Task SkipLineAsync (CancellationToken cancellationToken)
    method TryParseUInt32 (line 1302) | static bool TryParseUInt32 (string text, int startIndex, out uint value)
    method ResetCapabilities (line 1313) | void ResetCapabilities ()
    method ProcessCapabilityToken (line 1328) | void ProcessCapabilityToken (string atom)
    method StandardizeCapabilities (line 1482) | void StandardizeCapabilities ()
    method UpdateCapabilities (line 1510) | void UpdateCapabilities (ImapTokenType sentinel, CancellationToken can...
    method UpdateCapabilitiesAsync (line 1537) | async Task UpdateCapabilitiesAsync (ImapTokenType sentinel, Cancellati...
    method UpdateNamespaces (line 1564) | void UpdateNamespaces (CancellationToken cancellationToken)
    method UpdateNamespacesAsync (line 1659) | async ValueTask UpdateNamespacesAsync (CancellationToken cancellationT...
    method ProcessResponseCodes (line 1754) | void ProcessResponseCodes (ImapCommand ic)
    method EmitMetadataChanged (line 1773) | void EmitMetadataChanged (Metadata metadata)
    method FilterMetadata (line 1784) | internal MetadataCollection FilterMetadata (MetadataCollection metadat...
    method ProcessMetadataChanges (line 1798) | internal void ProcessMetadataChanges (MetadataCollection metadata)
    method GetResponseCodeType (line 1804) | internal static ImapResponseCodeType GetResponseCodeType (string atom)
    method ParseResponseCode (line 1930) | public ImapResponseCode ParseResponseCode (bool isTagged, Cancellation...
    method ParseResponseCodeAsync (line 2256) | public async ValueTask<ImapResponseCode> ParseResponseCodeAsync (bool ...
    method UpdateSimpleStatusValue (line 2576) | static bool UpdateSimpleStatusValue (ImapFolder? folder, string atom, ...
    method UpdateStatus (line 2641) | void UpdateStatus (CancellationToken cancellationToken)
    method UpdateStatusAsync (line 2705) | async ValueTask UpdateStatusAsync (CancellationToken cancellationToken)
    method IsOkNoOrBad (line 2769) | static bool IsOkNoOrBad (string atom, out ImapUntaggedResult result)
    method ProcessUntaggedResponse (line 2797) | internal void ProcessUntaggedResponse (ImapCommand ic, CancellationTok...
    method ProcessUntaggedResponseAsync (line 2951) | internal async Task ProcessUntaggedResponseAsync (ImapCommand ic, Canc...
    method PopNextCommand (line 3099) | [MemberNotNull (nameof (current))]
    method OnImapProtocolException (line 3131) | void OnImapProtocolException (ImapCommand ic, ImapProtocolException ex)
    method Iterate (line 3154) | void Iterate ()
    method IterateAsync (line 3181) | async Task IterateAsync ()
    method Run (line 3212) | public ImapCommandResponse Run (ImapCommand ic)
    method RunAsync (line 3234) | public async Task<ImapCommandResponse> RunAsync (ImapCommand ic)
    method CreateCommands (line 3249) | public IEnumerable<ImapCommand> CreateCommands (CancellationToken canc...
    method QueueCommands (line 3299) | public IEnumerable<ImapCommand> QueueCommands (CancellationToken cance...
    method QueueCommand (line 3316) | public ImapCommand QueueCommand (CancellationToken cancellationToken, ...
    method QueueCommand (line 3331) | public ImapCommand QueueCommand (CancellationToken cancellationToken, ...
    method QueueCommand (line 3340) | public void QueueCommand (ImapCommand ic)
    method QueryCapabilities (line 3353) | public ImapCommandResponse QueryCapabilities (CancellationToken cancel...
    method QueryCapabilitiesAsync (line 3365) | public Task<ImapCommandResponse> QueryCapabilitiesAsync (CancellationT...
    method CacheFolder (line 3376) | public void CacheFolder (ImapFolder folder)
    method TryGetCachedFolder (line 3390) | public bool TryGetCachedFolder (string encodedName, [NotNullWhen (true...
    method RequiresParentLookup (line 3395) | bool RequiresParentLookup (ImapFolder folder, [NotNullWhen (true)] out...
    method QueueLookupParentFolderCommand (line 3423) | ImapCommand QueueLookupParentFolderCommand (string encodedName, Cancel...
    method ProcessLookupParentFolderResponse (line 3449) | void ProcessLookupParentFolderResponse (ImapCommand ic, List<ImapFolde...
    method LookupParentFolders (line 3466) | internal void LookupParentFolders (IEnumerable<ImapFolder> folders, Ca...
    method LookupParentFoldersAsync (line 3490) | internal async Task LookupParentFoldersAsync (IEnumerable<ImapFolder> ...
    method ProcessNamespaceResponse (line 3509) | void ProcessNamespaceResponse (ImapCommand ic)
    method QueueListNamespaceCommand (line 3517) | ImapCommand QueueListNamespaceCommand (List<ImapFolder> list, Cancella...
    method ProcessListNamespaceResponse (line 3528) | void ProcessListNamespaceResponse (ImapCommand ic, List<ImapFolder> list)
    method QueryNamespaces (line 3552) | public ImapCommandResponse QueryNamespaces (CancellationToken cancella...
    method QueryNamespacesAsync (line 3585) | public async Task<ImapCommandResponse> QueryNamespacesAsync (Cancellat...
    method GetFolder (line 3613) | internal static ImapFolder? GetFolder (List<ImapFolder> folders, strin...
    method AssignSpecialFolder (line 3627) | public void AssignSpecialFolder (ImapFolder folder)
    method AssignSpecialFolders (line 3651) | public void AssignSpecialFolders (IList<ImapFolder> list)
    method QueueListInboxCommand (line 3657) | ImapCommand QueueListInboxCommand (CancellationToken cancellationToken...
    method ProcessListInboxResponse (line 3681) | void ProcessListInboxResponse (ImapCommand ic, StringBuilder command, ...
    method QueueListSpecialUseCommand (line 3690) | ImapCommand QueueListSpecialUseCommand (StringBuilder command, List<Im...
    method QueueXListCommand (line 3722) | ImapCommand QueueXListCommand (List<ImapFolder> list, CancellationToke...
    method QuerySpecialFolders (line 3737) | public void QuerySpecialFolders (CancellationToken cancellationToken)
    method QuerySpecialFoldersAsync (line 3794) | public async Task QuerySpecialFoldersAsync (CancellationToken cancella...
    method ProcessGetQuotaRootResponse (line 3847) | ImapFolder ProcessGetQuotaRootResponse (ImapCommand ic, string quotaRo...
    method GetQuotaRootFolder (line 3869) | public ImapFolder GetQuotaRootFolder (string quotaRoot, CancellationTo...
    method GetQuotaRootFolderAsync (line 3891) | public async Task<ImapFolder> GetQuotaRootFolderAsync (string quotaRoo...
    method QueueGetFolderCommand (line 3907) | ImapCommand QueueGetFolderCommand (string encodedName, CancellationTok...
    method ProcessGetFolderResponse (line 3930) | static ImapFolder ProcessGetFolderResponse (ImapCommand ic, string pat...
    method GetFolder (line 3950) | public ImapFolder GetFolder (string path, CancellationToken cancellati...
    method GetFolderAsync (line 3974) | public async Task<IMailFolder> GetFolderAsync (string path, Cancellati...
    method GetStatusQuery (line 3992) | internal string GetStatusQuery (StatusItems items)
    method QueueGetFoldersCommand (line 4032) | ImapCommand QueueGetFoldersCommand (FolderNamespace @namespace, Status...
    method ToListOfIMailFolder (line 4100) | static IList<IMailFolder> ToListOfIMailFolder (List<ImapFolder> list)
    method GetFolders (line 4120) | public IList<IMailFolder> GetFolders (FolderNamespace @namespace, Stat...
    method GetFoldersAsync (line 4152) | public async Task<IList<IMailFolder>> GetFoldersAsync (FolderNamespace...
    method DecodeMailboxName (line 4178) | public string DecodeMailboxName (string encodedName)
    method EncodeMailboxName (line 4188) | public string EncodeMailboxName (string mailboxName)
    method IsValidMailboxName (line 4199) | public static bool IsValidMailboxName (string mailboxName, char delim)
    method InitializeParser (line 4217) | [MemberNotNull (nameof (parser))]
    method ParseHeaders (line 4226) | public HeaderList ParseHeaders (Stream stream, CancellationToken cance...
    method ParseHeadersAsync (line 4233) | public Task<HeaderList> ParseHeadersAsync (Stream stream, Cancellation...
    method ParseMessage (line 4240) | public MimeMessage ParseMessage (Stream stream, bool persistent, Cance...
    method ParseMessageAsync (line 4247) | public Task<MimeMessage> ParseMessageAsync (Stream stream, bool persis...
    method ParseEntity (line 4254) | public MimeEntity ParseEntity (Stream stream, bool persistent, Cancell...
    method ParseEntityAsync (line 4261) | public Task<MimeEntity> ParseEntityAsync (Stream stream, bool persiste...
    method OnAlert (line 4273) | internal void OnAlert (string message)
    method OnWebAlert (line 4283) | internal void OnWebAlert (Uri uri, string message)
    method OnFolderCreated (line 4293) | internal void OnFolderCreated (IMailFolder folder)
    method OnMetadataChanged (line 4303) | internal void OnMetadataChanged (Metadata metadata)
    method OnNotificationOverflow (line 4313) | internal void OnNotificationOverflow ()
    method OnDisconnected (line 4323) | void OnDisconnected ()
    method Dispose (line 4335) | public void Dispose ()

FILE: MailKit/Net/Imap/ImapEventGroup.cs
  class ImapEventGroup (line 41) | public sealed class ImapEventGroup
    method ImapEventGroup (line 56) | public ImapEventGroup (ImapMailboxFilter mailboxFilter, IList<ImapEven...
    method ImapEventGroup (line 81) | public ImapEventGroup (ImapMailboxFilter mailboxFilter, params ImapEve...
    method Format (line 118) | internal void Format (ImapEngine engine, StringBuilder command, IList<...
  class ImapMailboxFilter (line 178) | public class ImapMailboxFilter
    class Mailboxes (line 242) | public class Mailboxes : ImapMailboxFilter
      method Mailboxes (line 262) | public Mailboxes (IList<IMailFolder> folders) : this ("MAILBOXES", f...
      method Mailboxes (line 282) | public Mailboxes (params IMailFolder[] folders) : this ((IList<IMail...
      method Mailboxes (line 303) | internal Mailboxes (string name, IList<IMailFolder> folders) : base ...
      method Format (line 329) | internal override void Format (ImapEngine engine, StringBuilder comm...
    class Subtree (line 361) | public class Subtree : Mailboxes
      method Subtree (line 379) | public Subtree (IList<IMailFolder> folders) : base ("SUBTREE", folders)
      method Subtree (line 399) | public Subtree (params IMailFolder[] folders) : this ((IList<IMailFo...
    method ImapMailboxFilter (line 411) | internal ImapMailboxFilter (string name)
    method Format (line 434) | internal virtual void Format (ImapEngine engine, StringBuilder command...
  class ImapEvent (line 446) | public class ImapEvent
    method ImapEvent (line 577) | internal ImapEvent (string name, bool isMessageEvent)
    method Format (line 617) | internal virtual void Format (ImapEngine engine, StringBuilder command...
    class MessageNew (line 635) | public class MessageNew : ImapEvent
      method MessageNew (line 649) | public MessageNew (IFetchRequest request) : base ("MessageNew", true)
      method MessageNew (line 665) | public MessageNew (MessageSummaryItems items = MessageSummaryItems.N...
      method MessageNew (line 683) | public MessageNew (MessageSummaryItems items, IEnumerable<HeaderId> ...
      method MessageNew (line 701) | public MessageNew (MessageSummaryItems items, IEnumerable<string> he...
      method Format (line 717) | internal override void Format (ImapEngine engine, StringBuilder comm...

FILE: MailKit/Net/Imap/ImapFolder.cs
  class ImapFolder (line 58) | public partial class ImapFolder : MailFolder, IImapFolder
    method ImapFolder (line 77) | public ImapFolder (ImapFolderConstructorArgs args)
    method Supports (line 141) | public override bool Supports (FolderFeature feature)
    method CheckState (line 157) | void CheckState (bool open, bool rw)
    method CheckAllowIndexes (line 176) | void CheckAllowIndexes ()
    method CheckValidDestination (line 184) | void CheckValidDestination (IMailFolder destination)
    method Reset (line 193) | internal void Reset ()
    method OnParentFolderRenamed (line 218) | protected override void OnParentFolderRenamed ()
    method ProcessResponseCodes (line 235) | void ProcessResponseCodes (ImapCommand ic, IMailFolder? folder, bool t...
    method SelectOrExamine (line 314) | static string SelectOrExamine (FolderAccess access)
    method UntaggedQResyncFetchHandler (line 319) | static Task UntaggedQResyncFetchHandler (ImapEngine engine, ImapComman...
    method QueueOpenCommand (line 331) | ImapCommand QueueOpenCommand (FolderAccess access, uint uidValidity, u...
    method ProcessOpenResponse (line 370) | void ProcessOpenResponse (ImapCommand ic, FolderAccess access)
    method Open (line 377) | FolderAccess Open ()
    method Open (line 395) | FolderAccess Open (ImapCommand ic, FolderAccess access)
    method OpenAsync (line 419) | async Task<FolderAccess> OpenAsync (ImapCommand ic, FolderAccess access)
    method Open (line 493) | public override FolderAccess Open (FolderAccess access, uint uidValidi...
    method OpenAsync (line 550) | public override Task<FolderAccess> OpenAsync (FolderAccess access, uin...
    method QueueOpenCommand (line 557) | ImapCommand QueueOpenCommand (FolderAccess access, CancellationToken c...
    method Open (line 618) | public override FolderAccess Open (FolderAccess access, CancellationTo...
    method OpenAsync (line 661) | public override Task<FolderAccess> OpenAsync (FolderAccess access, Can...
    method QueueCloseCommand (line 668) | ImapCommand? QueueCloseCommand (bool expunge, CancellationToken cancel...
    method ProcessCloseResponse (line 685) | void ProcessCloseResponse (ImapCommand ic, bool expunge)
    method Close (line 692) | void Close ()
    method Close (line 735) | public override void Close (bool expunge = false, CancellationToken ca...
    method CloseAsync (line 781) | public override async Task CloseAsync (bool expunge = false, Cancellat...
    method QueueGetCreatedFolderCommand (line 794) | ImapCommand QueueGetCreatedFolderCommand (string encodedName, Cancella...
    method ProcessGetCreatedFolderResponse (line 805) | IMailFolder? ProcessGetCreatedFolderResponse (ImapCommand ic, string e...
    method QueueCreateCommand (line 827) | ImapCommand QueueCreateCommand (string name, bool isMessageFolder, Can...
    method ProcessCreateResponse (line 850) | MailboxIdResponseCode? ProcessCreateResponse (ImapCommand ic)
    method Create (line 860) | IMailFolder? Create (ImapCommand ic, string encodedName, bool specialU...
    method CreateAsync (line 874) | async Task<IMailFolder?> CreateAsync (ImapCommand ic, string encodedNa...
    method Create (line 928) | public override IMailFolder? Create (string name, bool isMessageFolder...
    method CreateAsync (line 975) | public override Task<IMailFolder?> CreateAsync (string name, bool isMe...
    method QueueCreateCommand (line 982) | ImapCommand QueueCreateCommand (string name, IEnumerable<SpecialFolder...
    method Create (line 1085) | public override IMailFolder? Create (string name, IEnumerable<SpecialF...
    method CreateAsync (line 1137) | public override Task<IMailFolder?> CreateAsync (string name, IEnumerab...
    method QueueRenameCommand (line 1144) | ImapCommand QueueRenameCommand (IMailFolder parent, string name, Cance...
    method ProcessRenameResponse (line 1178) | void ProcessRenameResponse (ImapCommand ic, IMailFolder parent, string...
    method Rename (line 1252) | public override void Rename (IMailFolder parent, string name, Cancella...
    method RenameAsync (line 1308) | public override async Task RenameAsync (IMailFolder parent, string nam...
    method QueueDeleteCommand (line 1317) | ImapCommand QueueDeleteCommand (CancellationToken cancellationToken)
    method ProcessDeleteResponse (line 1327) | void ProcessDeleteResponse (ImapCommand ic)
    method Delete (line 1377) | public override void Delete (CancellationToken cancellationToken = def...
    method DeleteAsync (line 1419) | public override async Task DeleteAsync (CancellationToken cancellation...
    method QueueSubscribeCommand (line 1428) | ImapCommand QueueSubscribeCommand (CancellationToken cancellationToken)
    method ProcessSubscribeResponse (line 1435) | void ProcessSubscribeResponse (ImapCommand ic)
    method Subscribe (line 1476) | public override void Subscribe (CancellationToken cancellationToken = ...
    method SubscribeAsync (line 1514) | public override async Task SubscribeAsync (CancellationToken cancellat...
    method QueueUnsubscribeCommand (line 1523) | ImapCommand QueueUnsubscribeCommand (CancellationToken cancellationToken)
    method ProcessUnsubscribeResponse (line 1530) | void ProcessUnsubscribeResponse (ImapCommand ic)
    method Unsubscribe (line 1571) | public override void Unsubscribe (CancellationToken cancellationToken ...
    method UnsubscribeAsync (line 1609) | public override async Task UnsubscribeAsync (CancellationToken cancell...
    method TryQueueGetSubfoldersCommand (line 1618) | bool TryQueueGetSubfoldersCommand (StatusItems items, bool subscribedO...
    method ProcessGetSubfoldersResponse (line 1703) | IList<IMailFolder> ProcessGetSubfoldersResponse (ImapCommand ic, List<...
    method GetSubfolders (line 1768) | public override IList<IMailFolder> GetSubfolders (StatusItems items, b...
    method GetSubfoldersAsync (line 1823) | public override async Task<IList<IMailFolder>> GetSubfoldersAsync (Sta...
    method TryQueueGetSubfolderCommand (line 1847) | bool TryQueueGetSubfolderCommand (string name, CancellationToken cance...
    method ProcessGetSubfolderResponse (line 1889) | ImapFolder? ProcessGetSubfolderResponse (ImapCommand ic, List<ImapFold...
    method GetSubfolder (line 1942) | public override IMailFolder GetSubfolder (string name, CancellationTok...
    method GetSubfolderAsync (line 2002) | public override async Task<IMailFolder> GetSubfolderAsync (string name...
    method QueueCheckCommand (line 2023) | ImapCommand QueueCheckCommand (CancellationToken cancellationToken)
    method ProcessCheckResponse (line 2030) | void ProcessCheckResponse (ImapCommand ic)
    method Check (line 2071) | public override void Check (CancellationToken cancellationToken = defa...
    method CheckAsync (line 2115) | public override async Task CheckAsync (CancellationToken cancellationT...
    method QueueStatusCommand (line 2124) | ImapCommand? QueueStatusCommand (StatusItems items, CancellationToken ...
    method ProcessStatusResponse (line 2139) | void ProcessStatusResponse (ImapCommand ic, bool throwNotFound)
    method Status (line 2146) | internal void Status (StatusItems items, bool throwNotFound, Cancellat...
    method StatusAsync (line 2158) | internal async Task StatusAsync (StatusItems items, bool throwNotFound...
    method Status (line 2214) | public override void Status (StatusItems items, CancellationToken canc...
    method StatusAsync (line 2264) | public override Task StatusAsync (StatusItems items, CancellationToken...
    method ParseAcl (line 2269) | static void ParseAcl (ImapEngine engine, ImapCommand ic)
    method ParseAclAsync (line 2289) | static async Task ParseAclAsync (ImapEngine engine, ImapCommand ic)
    method UntaggedAclHandler (line 2309) | static Task UntaggedAclHandler (ImapEngine engine, ImapCommand ic, int...
    method QueueGetAccessControlListCommand (line 2319) | ImapCommand QueueGetAccessControlListCommand (CancellationToken cancel...
    method ProcessGetAccessControlListResponse (line 2335) | AccessControlList ProcessGetAccessControlListResponse (ImapCommand ic)
    method GetAccessControlList (line 2376) | public override AccessControlList GetAccessControlList (CancellationTo...
    method GetAccessControlListAsync (line 2417) | public override async Task<AccessControlList> GetAccessControlListAsyn...
    method ParseListRights (line 2426) | static void ParseListRights (ImapEngine engine, ImapCommand ic)
    method ParseListRightsAsync (line 2447) | static async Task ParseListRightsAsync (ImapEngine engine, ImapCommand...
    method UntaggedListRightsHandler (line 2468) | static Task UntaggedListRightsHandler (ImapEngine engine, ImapCommand ...
    method QueueGetAccessRightsCommand (line 2478) | ImapCommand QueueGetAccessRightsCommand (string name, CancellationToke...
    method ProcessGetAccessRightsResponse (line 2497) | AccessRights ProcessGetAccessRightsResponse (ImapCommand ic)
    method GetAccessRights (line 2542) | public override AccessRights GetAccessRights (string name, Cancellatio...
    method GetAccessRightsAsync (line 2587) | public override async Task<AccessRights> GetAccessRightsAsync (string ...
    method ParseMyRights (line 2596) | static void ParseMyRights (ImapEngine engine, ImapCommand ic)
    method ParseMyRightsAsync (line 2608) | static async Task ParseMyRightsAsync (ImapEngine engine, ImapCommand ic)
    method UntaggedMyRightsHandler (line 2620) | static Task UntaggedMyRightsHandler (ImapEngine engine, ImapCommand ic...
    method QueueGetMyAccessRightsCommand (line 2630) | ImapCommand QueueGetMyAccessRightsCommand (CancellationToken cancellat...
    method ProcessGetMyAccessRightsResponse (line 2646) | AccessRights ProcessGetMyAccessRightsResponse (ImapCommand ic)
    method GetMyAccessRights (line 2687) | public override AccessRights GetMyAccessRights (CancellationToken canc...
    method GetMyAccessRightsAsync (line 2728) | public override async Task<AccessRights> GetMyAccessRightsAsync (Cance...
    method QueueModifyAccessRightsCommand (line 2737) | ImapCommand QueueModifyAccessRightsCommand (string name, string action...
    method ProcessModifyAccessRightsResponse (line 2756) | void ProcessModifyAccessRightsResponse (ImapCommand ic)
    method AddAccessRights (line 2804) | public override void AddAccessRights (string name, AccessRights rights...
    method AddAccessRightsAsync (line 2855) | public override async Task AddAccessRightsAsync (string name, AccessRi...
    method RemoveAccessRights (line 2905) | public override void RemoveAccessRights (string name, AccessRights rig...
    method RemoveAccessRightsAsync (line 2956) | public override async Task RemoveAccessRightsAsync (string name, Acces...
    method SetAccessRights (line 3003) | public override void SetAccessRights (string name, AccessRights rights...
    method SetAccessRightsAsync (line 3051) | public override async Task SetAccessRightsAsync (string name, AccessRi...
    method QueueRemoveAccessCommand (line 3060) | ImapCommand QueueRemoveAccessCommand (string name, CancellationToken c...
    method ProcessRemoveAccessResponse (line 3073) | void ProcessRemoveAccessResponse (ImapCommand ic)
    method RemoveAccess (line 3115) | public override void RemoveAccess (string name, CancellationToken canc...
    method RemoveAccessAsync (line 3160) | public override async Task RemoveAccessAsync (string name, Cancellatio...
    method QueueGetMetadataCommand (line 3169) | ImapCommand QueueGetMetadataCommand (MetadataTag tag, CancellationToke...
    method ProcessGetMetadataResponse (line 3186) | string? ProcessGetMetadataResponse (ImapCommand ic, MetadataTag tag)
    method GetMetadata (line 3242) | public override string? GetMetadata (MetadataTag tag, CancellationToke...
    method GetMetadataAsync (line 3284) | public override async Task<string?> GetMetadataAsync (MetadataTag tag,...
    method QueueGetMetadataCommand (line 3293) | ImapCommand? QueueGetMetadataCommand (MetadataOptions options, IEnumer...
    method ProcessGetMetadataResponse (line 3355) | MetadataCollection ProcessGetMetadataResponse (ImapCommand ic, Metadat...
    method GetMetadata (line 3407) | public override MetadataCollection GetMetadata (MetadataOptions option...
    method GetMetadataAsync (line 3458) | public override async Task<MetadataCollection> GetMetadataAsync (Metad...
    method QueueSetMetadataCommand (line 3470) | ImapCommand? QueueSetMetadataCommand (MetadataCollection metadata, Can...
    method ProcessSetMetadataResponse (line 3510) | void ProcessSetMetadataResponse (ImapCommand ic)
    method SetMetadata (line 3552) | public override void SetMetadata (MetadataCollection metadata, Cancell...
    method SetMetadataAsync (line 3600) | public override async Task SetMetadataAsync (MetadataCollection metada...
    class Quota (line 3612) | class Quota
    class QuotaContext (line 3620) | class QuotaContext
      method QuotaContext (line 3622) | public QuotaContext ()
    method ParseQuotaRoot (line 3637) | static void ParseQuotaRoot (ImapEngine engine, ImapCommand ic)
    method ParseQuotaRootAsync (line 3656) | static async Task ParseQuotaRootAsync (ImapEngine engine, ImapCommand ic)
    method UntaggedQuotaRootHandler (line 3683) | static Task UntaggedQuotaRootHandler (ImapEngine engine, ImapCommand i...
    method ParseQuota (line 3693) | static void ParseQuota (ImapEngine engine, ImapCommand ic)
    method ParseQuotaAsync (line 3743) | static async Task ParseQuotaAsync (ImapEngine engine, ImapCommand ic)
    method UntaggedQuotaHandler (line 3801) | static Task UntaggedQuotaHandler (ImapEngine engine, ImapCommand ic, i...
    method QueueGetQuotaCommand (line 3811) | ImapCommand QueueGetQuotaCommand (CancellationToken cancellationToken)
    method TryProcessGetQuotaResponse (line 3830) | bool TryProcessGetQuotaResponse (ImapCommand ic, [NotNullWhen (true)] ...
    method GetQuota (line 3885) | public override FolderQuota GetQuota (CancellationToken cancellationTo...
    method GetQuotaAsync (line 3938) | public override async Task<FolderQuota> GetQuotaAsync (CancellationTok...
    method QueueSetQuotaCommand (line 3957) | ImapCommand QueueSetQuotaCommand (uint? messageLimit, uint? storageLim...
    method ProcessSetQuotaResponse (line 3989) | FolderQuota ProcessSetQuotaResponse (ImapCommand ic)
    method SetQuota (line 4045) | public override FolderQuota SetQuota (uint? messageLimit, uint? storag...
    method SetQuotaAsync (line 4090) | public override async Task<FolderQuota> SetQuotaAsync (uint? messageLi...
    method QueueExpungeCommand (line 4099) | ImapCommand QueueExpungeCommand (CancellationToken cancellationToken)
    method ProcessExpungeResponse (line 4106) | void ProcessExpungeResponse (ImapCommand ic)
    method Expunge (line 4152) | public override void Expunge (CancellationToken cancellationToken = de...
    method ExpungeAsync (line 4201) | public override async Task ExpungeAsync (CancellationToken cancellatio...
    method Expunge (line 4265) | public override void Expunge (IList<UniqueId> uids, CancellationToken ...
    method ExpungeAsync (line 4359) | public override async Task ExpungeAsync (IList<UniqueId> uids, Cancell...
    method CreateAppendOptions (line 4397) | FormatOptions CreateAppendOptions (FormatOptions options)
    method QueueAppendCommand (line 4415) | ImapCommand QueueAppendCommand (FormatOptions options, IAppendRequest ...
    method ProcessAppendResponse (line 4474) | UniqueId? ProcessAppendResponse (ImapCommand ic)
    method Append (line 4532) | public override UniqueId? Append (FormatOptions options, IAppendReques...
    method AppendAsync (line 4588) | public override async Task<UniqueId?> AppendAsync (FormatOptions optio...
    method ValidateArguments (line 4597) | void ValidateArguments (FormatOptions options, IList<IAppendRequest> r...
    method QueueMultiAppendCommand (line 4617) | ImapCommand QueueMultiAppendCommand (FormatOptions options, IList<IApp...
    method ProcessMultiAppendResponse (line 4674) | IList<UniqueId> ProcessMultiAppendResponse (ImapCommand ic)
    method Append (line 4738) | public override IList<UniqueId> Append (FormatOptions options, IList<I...
    method AppendAsync (line 4820) | public override async Task<IList<UniqueId>> AppendAsync (FormatOptions...
    method ValidateArguments (line 4852) | void ValidateArguments (FormatOptions options, UniqueId uid, IReplaceR...
    method QueueReplaceCommand (line 4872) | ImapCommand QueueReplaceCommand (FormatOptions options, UniqueId uid, ...
    method ProcessReplaceResponse (line 4919) | UniqueId? ProcessReplaceResponse (ImapCommand ic)
    method Replace (line 4984) | public override UniqueId? Replace (FormatOptions options, UniqueId uid...
    method ReplaceAsync (line 5058) | public override async Task<UniqueId?> ReplaceAsync (FormatOptions opti...
    method QueueReplaceCommand (line 5078) | ImapCommand QueueReplaceCommand (FormatOptions options, int index, IRe...
    method ValidateArguments (line 5126) | void ValidateArguments (FormatOptions options, int index, IReplaceRequ...
    method Replace (line 5201) | public override UniqueId? Replace (FormatOptions options, int index, I...
    method ReplaceAsync (line 5274) | public override async Task<UniqueId?> ReplaceAsync (FormatOptions opti...
    method QueueGetIndexesCommand (line 5292) | ImapCommand QueueGetIndexesCommand (IList<UniqueId> uids, Cancellation...
    method ProcessGetIndexesResponse (line 5308) | IList<int> ProcessGetIndexesResponse (ImapCommand ic)
    method GetIndexes (line 5318) | IList<int> GetIndexes (IList<UniqueId> uids, CancellationToken cancell...
    method GetIndexesAsync (line 5327) | async Task<IList<int>> GetIndexesAsync (IList<UniqueId> uids, Cancella...
    method ValidateArguments (line 5336) | void ValidateArguments (IList<UniqueId> uids, IMailFolder destination)
    method GetCopiedUids (line 5344) | static void GetCopiedUids (ImapCommand ic, ref UniqueIdSet? src, ref U...
    method ProcessCopyToResponse (line 5359) | void ProcessCopyToResponse (ImapCommand ic, IMailFolder destination, r...
    method CopyTo (line 5416) | public override UniqueIdMap CopyTo (IList<UniqueId> uids, IMailFolder ...
    method CopyToAsync (line 5496) | public override async Task<UniqueIdMap> CopyToAsync (IList<UniqueId> u...
    method ProcessMoveToResponse (line 5526) | void ProcessMoveToResponse (ImapCommand ic, IMailFolder destination, r...
    method MoveTo (line 5591) | public override UniqueIdMap MoveTo (IList<UniqueId> uids, IMailFolder ...
    method MoveToAsync (line 5686) | public override async Task<UniqueIdMap> MoveToAsync (IList<UniqueId> u...
    method ValidateArguments (line 5723) | void ValidateArguments (IList<int> indexes, IMailFolder destination)
    method QueueCopyToCommand (line 5731) | ImapCommand? QueueCopyToCommand (IList<int> indexes, IMailFolder desti...
    method ProcessCopyToResponse (line 5748) | void ProcessCopyToResponse (ImapCommand ic, IMailFolder destination)
    method CopyTo (line 5804) | public override void CopyTo (IList<int> indexes, IMailFolder destinati...
    method CopyToAsync (line 5866) | public override async Task CopyToAsync (IList<int> indexes, IMailFolde...
    method QueueMoveToCommand (line 5878) | ImapCommand? QueueMoveToCommand (IList<int> indexes, IMailFolder desti...
    method ProcessMoveToResponse (line 5895) | void ProcessMoveToResponse (ImapCommand ic, IMailFolder destination)
    method MoveTo (line 5952) | public override void MoveTo (IList<int> indexes, IMailFolder destinati...
    method MoveToAsync (line 6021) | public override async Task MoveToAsync (IList<int> indexes, IMailFolde...
    method GetEnumerator (line 6060) | public override IEnumerator<MimeMessage> GetEnumerator ()
    method OnExists (line 6074) | internal void OnExists (int count)
    method OnExpunge (line 6082) | internal void OnExpunge (int index)
    method FlushQueuedEvents (line 6093) | internal void FlushQueuedEvents ()
    method OnFetchAsyncCompleted (line 6101) | void OnFetchAsyncCompleted (MessageSummary message)
    method OnUntaggedFetchResponse (line 6148) | internal void OnUntaggedFetchResponse (ImapEngine engine, int index, C...
    method OnUntaggedFetchResponseAsync (line 6155) | internal Task OnUntaggedFetchResponseAsync (ImapEngine engine, int ind...
    method OnRecent (line 6162) | internal void OnRecent (int count)
    method OnVanished (line 6172) | void OnVanished (bool earlier, ImapToken token)
    method OnVanished (line 6185) | internal void OnVanished (ImapEngine engine, CancellationToken cancell...
    method OnVanishedAsync (line 6211) | internal async Task OnVanishedAsync (ImapEngine engine, CancellationTo...
    method UpdateAttributes (line 6237) | internal void UpdateAttributes (FolderAttributes attrs)
    method UpdateAcceptedFlags (line 6262) | internal void UpdateAcceptedFlags (MessageFlags flags, IReadOnlySetOfS...
    method UnsetAcceptedFlags (line 6268) | internal void UnsetAcceptedFlags ()
    method UnsetPermanentFlags (line 6274) | internal void UnsetPermanentFlags ()
    method UpdateIsNamespace (line 6280) | internal void UpdateIsNamespace (bool value)
    method UpdateUnread (line 6285) | internal void UpdateUnread (int count)
    method UpdateUidNext (line 6295) | internal void UpdateUidNext (UniqueId uid)
    method UpdateAppendLimit (line 6305) | internal void UpdateAppendLimit (uint? limit)
    method UpdateSize (line 6310) | internal void UpdateSize (ulong? size)
    method UpdateId (line 6320) | internal void UpdateId (string id)
    method UpdateHighestModSeq (line 6330) | internal void UpdateHighestModSeq (ulong modseq)
    method UpdateUidValidity (line 6340) | internal void UpdateUidValidity (uint validity)
    method OnRenamed (line 6350) | internal void OnRenamed (string encodedName, char delim, FolderAttribu...

FILE: MailKit/Net/Imap/ImapFolderAnnotations.cs
  class ImapFolder (line 37) | public partial class ImapFolder
    method QueueStoreCommands (line 39) | IEnumerable<ImapCommand> QueueStoreCommands (IList<UniqueId> uids, ulo...
    method ProcessStoreAnnotationsResponse (line 76) | void ProcessStoreAnnotationsResponse (ImapCommand ic)
    method Store (line 134) | public override void Store (IList<UniqueId> uids, IList<Annotation> an...
    method StoreAsync (line 191) | public override async Task StoreAsync (IList<UniqueId> uids, IList<Ann...
    method Store (line 251) | public override IList<UniqueId> Store (IList<UniqueId> uids, ulong mod...
    method StoreAsync (line 320) | public override async Task<IList<UniqueId>> StoreAsync (IList<UniqueId...
    method TryQueueStoreCommand (line 338) | bool TryQueueStoreCommand (IList<int> indexes, ulong? modseq, IList<An...
    method Store (line 426) | public override void Store (IList<int> indexes, IList<Annotation> anno...
    method StoreAsync (line 484) | public override async Task StoreAsync (IList<int> indexes, IList<Annot...
    method Store (line 545) | public override IList<int> Store (IList<int> indexes, ulong modseq, IL...
    method StoreAsync (line 608) | public override async Task<IList<int>> StoreAsync (IList<int> indexes,...

FILE: MailKit/Net/Imap/ImapFolderConstructorArgs.cs
  class ImapFolderConstructorArgs (line 38) | public sealed class ImapFolderConstructorArgs
    method ImapFolderConstructorArgs (line 50) | internal ImapFolderConstructorArgs (ImapEngine engine, string encodedN...

FILE: MailKit/Net/Imap/ImapFolderFetch.cs
  class ImapFolder (line 46) | public partial class ImapFolder
    class FetchSummaryContext (line 52) | class FetchSummaryContext
      method FetchSummaryContext (line 56) | public FetchSummaryContext (int capacity)
      method BinarySearch (line 61) | int BinarySearch (int index, bool insert)
      method Add (line 87) | public void Add (int index, MessageSummary message)
      method TryGetValue (line 97) | public bool TryGetValue (int index, [NotNullWhen (true)] out Message...
      method OnMessageExpunged (line 111) | public void OnMessageExpunged (object? sender, MessageEventArgs args)
    method ReadLiteralData (line 127) | static void ReadLiteralData (ImapEngine engine, CancellationToken canc...
    method ReadLiteralDataAsync (line 141) | static async Task ReadLiteralDataAsync (ImapEngine engine, Cancellatio...
    method SkipParenthesizedList (line 155) | static void SkipParenthesizedList (ImapEngine engine, CancellationToke...
    method SkipParenthesizedListAsync (line 179) | static async Task SkipParenthesizedListAsync (ImapEngine engine, Cance...
    method ReadDateTimeOffsetToken (line 203) | static DateTimeOffset? ReadDateTimeOffsetToken (ImapEngine engine, str...
    method ReadDateTimeOffsetTokenAsync (line 218) | static async Task<DateTimeOffset?> ReadDateTimeOffsetTokenAsync (ImapE...
    method ParseSummaryItems (line 235) | void ParseSummaryItems (ImapEngine engine, MessageSummary message, Fet...
    method ParseSummaryItemsAsync (line 479) | async Task ParseSummaryItemsAsync (ImapEngine engine, MessageSummary m...
    method UntaggedFetchSummaryItemsHandler (line 723) | Task UntaggedFetchSummaryItemsHandler (ImapEngine engine, ImapCommand ...
    method IsEmptyExclude (line 740) | static bool IsEmptyExclude (HeaderSet headers, bool requestReferences)
    method FormatSummaryItems (line 746) | internal static string FormatSummaryItems (ImapEngine engine, IFetchRe...
    class FetchPreviewTextContext (line 887) | class FetchPreviewTextContext : FetchStreamContextBase
      method FetchPreviewTextContext (line 895) | public FetchPreviewTextContext (ImapFolder folder, FetchSummaryConte...
      method Add (line 901) | public override void Add (Section section, CancellationToken cancell...
      method SetUniqueId (line 946) | public override void SetUniqueId (int index, UniqueId uid, Cancellat...
    method ProcessFetchResponse (line 952) | void ProcessFetchResponse (ImapCommand ic)
    method QueueFetchPreviewTextCommand (line 959) | ImapCommand QueueFetchPreviewTextCommand (FetchSummaryContext sctx, Ke...
    method FetchPreviewText (line 989) | void FetchPreviewText (FetchSummaryContext sctx, Dictionary<string, Un...
    method FetchPreviewTextAsync (line 1005) | async Task FetchPreviewTextAsync (FetchSummaryContext sctx, Dictionary...
    method CreateFetchPreviewTextMappings (line 1021) | void CreateFetchPreviewTextMappings (FetchSummaryContext sctx, out Dic...
    method GetPreviewText (line 1054) | void GetPreviewText (FetchSummaryContext sctx, CancellationToken cance...
    method GetPreviewTextAsync (line 1068) | async Task GetPreviewTextAsync (FetchSummaryContext sctx, Cancellation...
    method IsEmptyFetchRequest (line 1082) | internal static bool IsEmptyFetchRequest (IFetchRequest request)
    method CheckCanFetch (line 1087) | bool CheckCanFetch (IList<UniqueId> uids, IFetchRequest request)
    method CreateFetchCommand (line 1103) | string CreateFetchCommand (IList<UniqueId> uids, IFetchRequest request...
    method EstimateInitialCapacity (line 1117) | static int EstimateInitialCapacity (IList<UniqueId> uids)
    method Fetch (line 1184) | public override IList<IMessageSummary> Fetch (IList<UniqueId> uids, IF...
    method FetchAsync (line 1269) | public override async Task<IList<IMessageSummary>> FetchAsync (IList<U...
    method Che
Copy disabled (too large) Download .json
Condensed preview — 1080 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (20,954K chars).
[
  {
    "path": ".config/dotnet-tools.json",
    "chars": 471,
    "preview": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"altcover.global\": {\n      \"version\": \"9.0.102\",\n      \"commands\": "
  },
  {
    "path": ".editorconfig",
    "chars": 8442,
    "preview": "# Remove the line below if you want to inherit .editorconfig settings from higher directories\nroot = true\n\n# C# files\n[*"
  },
  {
    "path": ".gitattributes",
    "chars": 96,
    "preview": "*.csproj text\n*.nuspec text\n*.sln eol=crlf\n*.msg text\n*.txt text\n*.yml text\n*.cs text\n*.md text\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 18,
    "preview": "github: jstedfast\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 1632,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\nA clear and concise descriptio"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 560,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\n**Is your feature request related to a problem? "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 316,
    "preview": "# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabo"
  },
  {
    "path": ".github/workflows/aot-compatibility.yml",
    "chars": 807,
    "preview": "name: AOT Compatibility\n\non:\n  push:\n    branches: [ 'master' ]\n    paths-ignore:\n    - '**.md'\n  pull_request:\n    bran"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "chars": 2307,
    "preview": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 6225,
    "preview": "name: Build\n\non: [push, pull_request, workflow_dispatch]\n\njobs:\n  ci:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      "
  },
  {
    "path": ".gitignore",
    "chars": 205,
    "preview": "MailKit/Resources/Resource.designer.cs\n*.csproj.nuget.dgspec.json\n*.csproj.nuget.cache\n*project.lock.json\n*.userprefs\n*."
  },
  {
    "path": ".gitmodules",
    "chars": 108,
    "preview": "[submodule \"submodules/MimeKit\"]\n\tpath = submodules/MimeKit\n\turl = https://github.com/jstedfast/MimeKit.git\n"
  },
  {
    "path": "AotCompatibility/AotCompatibility.csproj",
    "chars": 1631,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</Targ"
  },
  {
    "path": "AotCompatibility/Program.cs",
    "chars": 1941,
    "preview": "//\n// Program.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2024 .NET Foundation "
  },
  {
    "path": "Documentation/Content/Creating-Messages.aml",
    "chars": 3927,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Creating-Messages\" revisionNumber=\"1\">\n  <developerConceptualDocument"
  },
  {
    "path": "Documentation/Content/Frequently-Asked-Questions.aml",
    "chars": 51506,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Frequently-Asked-Questions\" revisionNumber=\"1\">\n  <developerConceptual"
  },
  {
    "path": "Documentation/Content/Getting-Started.aml",
    "chars": 3268,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Getting-Started\" revisionNumber=\"1\">\n  <developerConceptualDocument\n  "
  },
  {
    "path": "Documentation/Content/Introduction.aml",
    "chars": 9740,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Introduction\" revisionNumber=\"1\">\n  <developerConceptualDocument xmlns"
  },
  {
    "path": "Documentation/Content/License.aml",
    "chars": 2097,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"License\" revisionNumber=\"1\">\n  <developerConceptualDocument\n    xmlns="
  },
  {
    "path": "Documentation/Content/Parsing-Messages.aml",
    "chars": 2289,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Parsing-Messages\" revisionNumber=\"1\">\n  <developerConceptualDocument\n"
  },
  {
    "path": "Documentation/Content/Working-With-Messages.aml",
    "chars": 11565,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Working-With-Messages\" revisionNumber=\"1\">\n  <developerConceptualDocum"
  },
  {
    "path": "Documentation/Content/Working-With-OpenPGP.aml",
    "chars": 6239,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Working-With-OpenPGP\" revisionNumber=\"1\">\n  <developerConceptualDocume"
  },
  {
    "path": "Documentation/Content/Working-With-SMime.aml",
    "chars": 8828,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<topic id=\"Working-With-SMime\" revisionNumber=\"1\">\n  <developerConceptualDocument"
  },
  {
    "path": "Documentation/ContentLayout.content",
    "chars": 802,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Topics>\n  <Topic id=\"Introduction\" visible=\"True\" isDefault=\"true\" />\n  <Topic "
  },
  {
    "path": "Documentation/Documentation.shfbproj",
    "chars": 11864,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
  },
  {
    "path": "Documentation/Examples/ArcSignerExample.cs",
    "chars": 4853,
    "preview": "using System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Co"
  },
  {
    "path": "Documentation/Examples/ArcVerifierExample.cs",
    "chars": 4733,
    "preview": "using System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Co"
  },
  {
    "path": "Documentation/Examples/AttachmentExamples.cs",
    "chars": 1956,
    "preview": "using System;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n\tpublic static class AttachmentExamples\n\t{\n\t\tpublic static "
  },
  {
    "path": "Documentation/Examples/BodyBuilder.cs",
    "chars": 2356,
    "preview": "using MimeKit;\n\nnamespace BodyBuilderExamples\n{\n\tpublic class Program\n\t{\n\t\tpublic static void Complex ()\n\t\t{\n\t\t\t#region"
  },
  {
    "path": "Documentation/Examples/CreateMultipartAlternative.cs",
    "chars": 674,
    "preview": "var attachment = CreateImageAttachment ();\nvar plain = CreateTextPlainPart ();\nvar html = CreateTextHtmlPart ();\n\n// No"
  },
  {
    "path": "Documentation/Examples/CreateMultipartMixed.cs",
    "chars": 1143,
    "preview": "var message = new MimeMessage ();\nmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\nmessage.To.Add (n"
  },
  {
    "path": "Documentation/Examples/CreateSimpleMessage.cs",
    "chars": 428,
    "preview": "var message = new MimeMessage ();\nmessage.From.Add (new MailboxAddress (\"Joey\", \"joey@friends.com\"));\nmessage.To.Add (n"
  },
  {
    "path": "Documentation/Examples/DecodingContent.cs",
    "chars": 279,
    "preview": "// This will get the name of the file as specified by the sending mail client.\n// Note: this value *may* be null, so yo"
  },
  {
    "path": "Documentation/Examples/DkimExamples.cs",
    "chars": 1121,
    "preview": "using System;\nusing System.IO;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n    public static class DkimExamples\n    {"
  },
  {
    "path": "Documentation/Examples/DkimVerifierExample.cs",
    "chars": 4786,
    "preview": "using System;\nusing System.IO;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Co"
  },
  {
    "path": "Documentation/Examples/ForwardExamples.cs",
    "chars": 3514,
    "preview": "//\n// ForwardExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Fou"
  },
  {
    "path": "Documentation/Examples/ImapBodyPartExamples.cs",
    "chars": 13141,
    "preview": "//\n// ImapBodyPartExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET"
  },
  {
    "path": "Documentation/Examples/ImapExamples.cs",
    "chars": 9601,
    "preview": "//\n// ImapExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Founda"
  },
  {
    "path": "Documentation/Examples/ImapIdleExample.cs",
    "chars": 7735,
    "preview": "using System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "Documentation/Examples/InlinePGPExample.txt",
    "chars": 1374,
    "preview": "Return-Path: <pgp-enthusiast@example.com>\nReceived: from [127.0.0.1] (hostname.example.com. [201.95.8.17])\n    by mx.go"
  },
  {
    "path": "Documentation/Examples/MessageDeliveryStatusExamples.cs",
    "chars": 3938,
    "preview": "//\n// MessageDeliveryStatusExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-"
  },
  {
    "path": "Documentation/Examples/MimeIterator.cs",
    "chars": 701,
    "preview": "var attachments = new List<MimePart> ();\nvar multiparts = new List<Multipart> ();\n\nusing (var iter = new MimeIterator ("
  },
  {
    "path": "Documentation/Examples/MimeMessageLoad.cs",
    "chars": 78,
    "preview": "// Load a MimeMessage from a stream\nvar message = MimeMessage.Load (stream);\n"
  },
  {
    "path": "Documentation/Examples/MimeParserExamples.cs",
    "chars": 6983,
    "preview": "using System;\nusing System.IO;\nusing System.Linq;\nusing System.Collections.Generic;\n\nusing MimeKit;\n\nnamespace Examples "
  },
  {
    "path": "Documentation/Examples/MimeVisitorExamples.cs",
    "chars": 15896,
    "preview": "//\n// MimeVisitorExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET"
  },
  {
    "path": "Documentation/Examples/MultipartFormDataExamples.cs",
    "chars": 1357,
    "preview": "using System;\nusing System.Net;\n\nusing MimeKit;\n\nnamespace Examples {\n\tclass MultipartFormDataExample\n\t{\n\t\t#region Pars"
  },
  {
    "path": "Documentation/Examples/OAuth2ExchangeExample.cs",
    "chars": 2825,
    "preview": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing MailKit;\nusing MailKit.Net.Imap;\nusing MailKi"
  },
  {
    "path": "Documentation/Examples/OAuth2GMailExample.cs",
    "chars": 2487,
    "preview": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing Google.Apis.Util;\nusing Google.Apis.Util.Stor"
  },
  {
    "path": "Documentation/Examples/OpenPGPExamples.cs",
    "chars": 4246,
    "preview": "using System;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnames"
  },
  {
    "path": "Documentation/Examples/OpeningContent.cs",
    "chars": 292,
    "preview": "using (var stream = part.Content.Open ()) {\n    // At this point, you can now read from the stream as if it were the or"
  },
  {
    "path": "Documentation/Examples/ParameterExamples.cs",
    "chars": 1039,
    "preview": "using System;\n\nusing MimeKit;\n\nnamespace MimeKit.Examples\n{\n    public static class ParameterExamples\n    {\n        publ"
  },
  {
    "path": "Documentation/Examples/Pop3Examples.cs",
    "chars": 10131,
    "preview": "//\n// Pop3Examples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Founda"
  },
  {
    "path": "Documentation/Examples/ProxyExamples.cs",
    "chars": 1964,
    "preview": "//\n// ProxyExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Founda"
  },
  {
    "path": "Documentation/Examples/RecursivelyTraverse.cs",
    "chars": 455,
    "preview": "static void HandleMimeEntity (MimeEntity entity)\n{\n\tvar multipart = entity as Multipart;\n\n\tif (multipart != null) {\n\t\tf"
  },
  {
    "path": "Documentation/Examples/SMimeExamples.cs",
    "chars": 5596,
    "preview": "using System;\n\nusing MimeKit;\nusing MimeKit.Cryptography;\n\nnamespace Examples\n{\n\t#region MySecureMimeContext\n\n\tpublic c"
  },
  {
    "path": "Documentation/Examples/SmtpExamples.cs",
    "chars": 15537,
    "preview": "//\n// SmtpExamples.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2023 .NET Founda"
  },
  {
    "path": "Documentation/Examples/SslCertificateValidation.cs",
    "chars": 3234,
    "preview": "using System;\nusing System.Net.Security;\nusing System.Collections.Generic;\nusing System.Security.Cryptography.X509Certi"
  },
  {
    "path": "Documentation/Examples/VerifySignature.cs",
    "chars": 610,
    "preview": "if (entity is MultipartSigned) {\n    var signed = (MultipartSigned) entity;\n\n    foreach (var signature in signed.Verif"
  },
  {
    "path": "ExchangeOAuth2.md",
    "chars": 14516,
    "preview": "# Using OAuth2 With Exchange (IMAP, POP3 or SMTP)\n\n## Quick Index\n\n* [Registering Your Application with Microsoft](#regi"
  },
  {
    "path": "FAQ.md",
    "chars": 80261,
    "preview": "# Frequently Asked Questions\n\n## Question Index\n\n### General\n\n* [Are MimeKit and MailKit completely free? Can I use them"
  },
  {
    "path": "GMailOAuth2.md",
    "chars": 7711,
    "preview": "# Using OAuth2 With GMail (IMAP, POP3 or SMTP)\n\n## Quick Index\n\n* [Setting up OAuth2 for use with Google Mail](#setting-"
  },
  {
    "path": "LICENSE",
    "chars": 1093,
    "preview": "MIT License\n\nCopyright (C) 2013-2026 .NET Foundation and Contributors\n\nPermission is hereby granted, free of charge, to "
  },
  {
    "path": "MailKit/AccessControl.cs",
    "chars": 4617,
    "preview": "//\n// AccessControl.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/AccessControlList.cs",
    "chars": 2440,
    "preview": "//\n// AccessControlList.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET F"
  },
  {
    "path": "MailKit/AccessRight.cs",
    "chars": 9120,
    "preview": "//\n// AccessRight.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/AccessRights.cs",
    "chars": 9456,
    "preview": "//\n// AccessRights.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/AlertEventArgs.cs",
    "chars": 2388,
    "preview": "//\n// AlertEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foun"
  },
  {
    "path": "MailKit/Annotation.cs",
    "chars": 2659,
    "preview": "//\n// Annotation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/AnnotationAccess.cs",
    "chars": 1787,
    "preview": "//\n// AnnotationAccess.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/AnnotationAttribute.cs",
    "chars": 9960,
    "preview": "//\n// AnnotationAttribute.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET"
  },
  {
    "path": "MailKit/AnnotationEntry.cs",
    "chars": 18555,
    "preview": "//\n// AnnotationEntry.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/AnnotationScope.cs",
    "chars": 1899,
    "preview": "//\n// AnnotationScope.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/AnnotationsChangedEventArgs.cs",
    "chars": 2915,
    "preview": "//\n// AnnotationsChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2"
  },
  {
    "path": "MailKit/AppendRequest.cs",
    "chars": 7283,
    "preview": "//\n// AppendRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/AuthenticatedEventArgs.cs",
    "chars": 2377,
    "preview": "//\n// AuthenticatedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/BodyPart.cs",
    "chars": 18330,
    "preview": "//\n// BodyPart.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation"
  },
  {
    "path": "MailKit/BodyPartBasic.cs",
    "chars": 9360,
    "preview": "//\n// BodyPartBasic.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/BodyPartCollection.cs",
    "chars": 8762,
    "preview": "//\n// BodyPartCollection.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET "
  },
  {
    "path": "MailKit/BodyPartMessage.cs",
    "chars": 4764,
    "preview": "//\n// BodyPartMessage.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/BodyPartMultipart.cs",
    "chars": 6381,
    "preview": "//\n// BodyPartMultipart.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET F"
  },
  {
    "path": "MailKit/BodyPartText.cs",
    "chars": 5031,
    "preview": "//\n// BodyPartText.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/BodyPartVisitor.cs",
    "chars": 4808,
    "preview": "//\n// BodyPartVisitor.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/ByteArrayBuilder.cs",
    "chars": 4446,
    "preview": "//\n// ByteArrayBuilder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/CommandException.cs",
    "chars": 3853,
    "preview": "//\n// CommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/CompressedStream.cs",
    "chars": 16343,
    "preview": "//\n// CompressedStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/ConnectedEventArgs.cs",
    "chars": 2851,
    "preview": "//\n// ConnectedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET "
  },
  {
    "path": "MailKit/DeliveryStatusNotification.cs",
    "chars": 2222,
    "preview": "//\n// DeliveryStatusNotification.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-20"
  },
  {
    "path": "MailKit/DeliveryStatusNotificationType.cs",
    "chars": 2273,
    "preview": "//\n// DeliveryStatusNotificationReturnType.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright ("
  },
  {
    "path": "MailKit/DisconnectedEventArgs.cs",
    "chars": 3106,
    "preview": "//\n// DisconnectedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .N"
  },
  {
    "path": "MailKit/DuplexStream.cs",
    "chars": 14835,
    "preview": "//\n// DuplexStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/Envelope.cs",
    "chars": 15935,
    "preview": "//\n// Envelope.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation"
  },
  {
    "path": "MailKit/FetchRequest.cs",
    "chars": 6239,
    "preview": "//\n// FetchRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/FolderAccess.cs",
    "chars": 1742,
    "preview": "//\n// FolderMode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/FolderAttributes.cs",
    "chars": 3735,
    "preview": "//\n// FolderAttributes.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/FolderCreatedEventArgs.cs",
    "chars": 2333,
    "preview": "//\n// FolderCreatedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/FolderFeature.cs",
    "chars": 2518,
    "preview": "//\n// FolderFeature.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/FolderNamespace.cs",
    "chars": 2476,
    "preview": "//\n// FolderNamespace.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/FolderNamespaceCollection.cs",
    "chars": 7204,
    "preview": "//\n// FolderNamespaceCollection.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-202"
  },
  {
    "path": "MailKit/FolderNotFoundException.cs",
    "chars": 5711,
    "preview": "//\n// FolderNotFoundException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 "
  },
  {
    "path": "MailKit/FolderNotOpenException.cs",
    "chars": 6980,
    "preview": "//\n// FolderNotOpenException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/FolderQuota.cs",
    "chars": 3929,
    "preview": "//\n// FolderQuota.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/FolderRenamedEventArgs.cs",
    "chars": 2829,
    "preview": "//\n// FolderRenamedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/HeaderSet.cs",
    "chars": 15129,
    "preview": "//\n// HeaderSet.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundatio"
  },
  {
    "path": "MailKit/IAppendRequest.cs",
    "chars": 3723,
    "preview": "//\n// IAppendRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foun"
  },
  {
    "path": "MailKit/IAuthenticationSecretDetector.cs",
    "chars": 3130,
    "preview": "//\n// IAuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013"
  },
  {
    "path": "MailKit/IFetchRequest.cs",
    "chars": 4066,
    "preview": "//\n// IFetchRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/IMailFolder.cs",
    "chars": 396651,
    "preview": "//\n// IMailFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/IMailFolderAppendExtensions.cs",
    "chars": 100581,
    "preview": "//\n// IMailFolderAppendExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2"
  },
  {
    "path": "MailKit/IMailFolderFetchExtensions.cs",
    "chars": 106047,
    "preview": "//\n// IMailFolderFetchExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-20"
  },
  {
    "path": "MailKit/IMailFolderStoreExtensions.cs",
    "chars": 247779,
    "preview": "//\n// IMailFolderStoreExtensions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-20"
  },
  {
    "path": "MailKit/IMailService.cs",
    "chars": 58810,
    "preview": "//\n// IMailService.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/IMailSpool.cs",
    "chars": 24051,
    "preview": "//\n// IMailSpool.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/IMailStore.cs",
    "chars": 22434,
    "preview": "//\n// IMailStore.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/IMailTransport.cs",
    "chars": 9596,
    "preview": "//\n// IMailTransport.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foun"
  },
  {
    "path": "MailKit/IMessageSummary.cs",
    "chars": 18445,
    "preview": "//\n// IMessageSummary.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/IProtocolLogger.cs",
    "chars": 5375,
    "preview": "//\n// IProtocolLogger.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/IReplaceRequest.cs",
    "chars": 1926,
    "preview": "//\n// IReplaceRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/IStoreFlagsRequest.cs",
    "chars": 2940,
    "preview": "//\n// IStoreFlagsRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET "
  },
  {
    "path": "MailKit/IStoreLabelsRequest.cs",
    "chars": 2718,
    "preview": "//\n// IStoreLabelsRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET"
  },
  {
    "path": "MailKit/IStoreRequest.cs",
    "chars": 2263,
    "preview": "//\n// IStoreRequest.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/ITransferProgress.cs",
    "chars": 2428,
    "preview": "//\n// ITransferProgress.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET F"
  },
  {
    "path": "MailKit/MailFolder.cs",
    "chars": 423771,
    "preview": "//\n// MailFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/MailKit.csproj",
    "chars": 15689,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>An Open Source cross-platform .NET mail-client lib"
  },
  {
    "path": "MailKit/MailKitLite.csproj",
    "chars": 15652,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>An Open Source cross-platform .NET mail-client lib"
  },
  {
    "path": "MailKit/MailService.cs",
    "chars": 75583,
    "preview": "//\n// MailService.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/MailSpool.cs",
    "chars": 66306,
    "preview": "//\n// MailSpool.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundatio"
  },
  {
    "path": "MailKit/MailStore.cs",
    "chars": 34361,
    "preview": "//\n// MailStore.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundatio"
  },
  {
    "path": "MailKit/MailTransport.cs",
    "chars": 22557,
    "preview": "//\n// MailTransport.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/MessageEventArgs.cs",
    "chars": 3213,
    "preview": "//\n// MessageEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/MessageFlags.cs",
    "chars": 2259,
    "preview": "//\n// MessageFlags.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/MessageFlagsChangedEventArgs.cs",
    "chars": 9831,
    "preview": "//\n// MessageFlagsChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-"
  },
  {
    "path": "MailKit/MessageLabelsChangedEventArgs.cs",
    "chars": 5835,
    "preview": "//\n// LabelsChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/MessageNotFoundException.cs",
    "chars": 3658,
    "preview": "//\n// MessageNotFoundException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026"
  },
  {
    "path": "MailKit/MessageSentEventArgs.cs",
    "chars": 2854,
    "preview": "//\n// MessageSentEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NE"
  },
  {
    "path": "MailKit/MessageSorter.cs",
    "chars": 9403,
    "preview": "//\n// MessageSorter.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/MessageSummary.cs",
    "chars": 25715,
    "preview": "//\n// MessageSummary.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foun"
  },
  {
    "path": "MailKit/MessageSummaryFetchedEventArgs.cs",
    "chars": 2384,
    "preview": "//\n// MessageSummaryFetchedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 201"
  },
  {
    "path": "MailKit/MessageSummaryItems.cs",
    "chars": 9714,
    "preview": "//\n// MessageSummaryItems.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET"
  },
  {
    "path": "MailKit/MessageThread.cs",
    "chars": 3746,
    "preview": "//\n// MessageThread.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/MessageThreader.cs",
    "chars": 19043,
    "preview": "//\n// MessageThreader.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/MessagesVanishedEventArgs.cs",
    "chars": 2977,
    "preview": "//\n// MessagesVanishedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026"
  },
  {
    "path": "MailKit/Metadata.cs",
    "chars": 2272,
    "preview": "//\n// Metadata.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundation"
  },
  {
    "path": "MailKit/MetadataChangedEventArgs.cs",
    "chars": 2302,
    "preview": "//\n// MetadataChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026"
  },
  {
    "path": "MailKit/MetadataCollection.cs",
    "chars": 2075,
    "preview": "//\n// MetadataCollection.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET "
  },
  {
    "path": "MailKit/MetadataOptions.cs",
    "chars": 4263,
    "preview": "//\n// MetadataOptions.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/MetadataTag.cs",
    "chars": 5577,
    "preview": "//\n// MetadataTag.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/ModSeqChangedEventArgs.cs",
    "chars": 2766,
    "preview": "//\n// ModSeqChangedEventArgs.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/Net/ClientMetrics.cs",
    "chars": 4573,
    "preview": "//\n// ClientMetrics.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/Net/IChannelBindingContext.cs",
    "chars": 2666,
    "preview": "//\n// IChannelBindingContext.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/Net/Imap/AsyncImapClient.cs",
    "chars": 57742,
    "preview": "//\n// AsyncImapClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/Net/Imap/IImapClient.cs",
    "chars": 29931,
    "preview": "//\n// IImapClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Imap/IImapFolder.cs",
    "chars": 39463,
    "preview": "//\n// IImapFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Imap/ImapAuthenticationSecretDetector.cs",
    "chars": 10461,
    "preview": "//\n// ImapAuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2"
  },
  {
    "path": "MailKit/Net/Imap/ImapCallbacks.cs",
    "chars": 3250,
    "preview": "//\n// ImapCallbacks.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/Net/Imap/ImapCapabilities.cs",
    "chars": 12139,
    "preview": "//\n// ImapCapabilities.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/Net/Imap/ImapClient.cs",
    "chars": 103077,
    "preview": "//\n// ImapClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommand.cs",
    "chars": 29695,
    "preview": "//\n// ImapCommand.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommandException.cs",
    "chars": 7550,
    "preview": "//\n// ImapCommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NE"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommandResponse.cs",
    "chars": 1809,
    "preview": "//\n// ImapCommandResult.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET F"
  },
  {
    "path": "MailKit/Net/Imap/ImapCommandStatus.cs",
    "chars": 1395,
    "preview": "//\n// ImapCommandStatus.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET F"
  },
  {
    "path": "MailKit/Net/Imap/ImapEncoding.cs",
    "chars": 4250,
    "preview": "//\n// ImapEncoding.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/Net/Imap/ImapEngine.cs",
    "chars": 157653,
    "preview": "//\n// ImapEngine.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Imap/ImapEventGroup.cs",
    "chars": 33231,
    "preview": "//\n// ImapFolderFetch.cs\n//\n// Authors: Steffen Kieß <s-kiess@web.de>\n//          Jeffrey Stedfast <jestedfa@microsoft."
  },
  {
    "path": "MailKit/Net/Imap/ImapFolder.cs",
    "chars": 235609,
    "preview": "//\n// ImapFolder.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderAnnotations.cs",
    "chars": 25548,
    "preview": "//\n// ImapFolderAnnotations.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .N"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderConstructorArgs.cs",
    "chars": 3578,
    "preview": "//\n// ImapFolderInfo.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foun"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderFetch.cs",
    "chars": 216085,
    "preview": "//\n// ImapFolderFetch.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderFlags.cs",
    "chars": 30767,
    "preview": "//\n// ImapFolderFlags.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/Net/Imap/ImapFolderSearch.cs",
    "chars": 79830,
    "preview": "//\n// ImapFolderSearch.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/Net/Imap/ImapIdleContext.cs",
    "chars": 6038,
    "preview": "//\n// ImapIdleContext.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/Net/Imap/ImapImplementation.cs",
    "chars": 6599,
    "preview": "//\n// ImapImplementation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET "
  },
  {
    "path": "MailKit/Net/Imap/ImapLiteral.cs",
    "chars": 6072,
    "preview": "//\n// ImapLiteral.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Imap/ImapProtocolException.cs",
    "chars": 4984,
    "preview": "//\n// ImapException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/Net/Imap/ImapResponseCode.cs",
    "chars": 12226,
    "preview": "//\n// ImapResponseCode.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/Net/Imap/ImapSearchQueryOptimizer.cs",
    "chars": 3167,
    "preview": "//\n// ImapSearchQueryOptimizer.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026"
  },
  {
    "path": "MailKit/Net/Imap/ImapStream.cs",
    "chars": 45373,
    "preview": "//\n// ImapStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Imap/ImapToken.cs",
    "chars": 8232,
    "preview": "//\n// ImapToken.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundatio"
  },
  {
    "path": "MailKit/Net/Imap/ImapUtils.cs",
    "chars": 110352,
    "preview": "//\n// ImapUtils.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundatio"
  },
  {
    "path": "MailKit/Net/NetworkOperation.cs",
    "chars": 3785,
    "preview": "//\n// NetworkOperation.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/Net/NetworkStream.cs",
    "chars": 8162,
    "preview": "//\n// NetworkStream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/Net/Pop3/AsyncPop3Client.cs",
    "chars": 72849,
    "preview": "//\n// AsyncPop3Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/Net/Pop3/IPop3Client.cs",
    "chars": 12652,
    "preview": "//\n// IPop3Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3AuthenticationSecretDetector.cs",
    "chars": 8914,
    "preview": "//\n// Pop3AuthenticationSecretDetector.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Capabilities.cs",
    "chars": 5312,
    "preview": "//\n// Pop3Capabilities.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Client.cs",
    "chars": 122255,
    "preview": "//\n// Pop3Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Command.cs",
    "chars": 3136,
    "preview": "//\n// Pop3Command.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3CommandException.cs",
    "chars": 6644,
    "preview": "//\n// Pop3CommandException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NE"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Engine.cs",
    "chars": 23027,
    "preview": "//\n// Pop3Engine.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Language.cs",
    "chars": 2255,
    "preview": "//\n// Pop3Language.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3ProtocolException.cs",
    "chars": 3763,
    "preview": "//\n// Pop3ProtocolException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .N"
  },
  {
    "path": "MailKit/Net/Pop3/Pop3Stream.cs",
    "chars": 38127,
    "preview": "//\n// Pop3Stream.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundati"
  },
  {
    "path": "MailKit/Net/Proxy/HttpProxyClient.cs",
    "chars": 10444,
    "preview": "//\n// HttpProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fou"
  },
  {
    "path": "MailKit/Net/Proxy/HttpsProxyClient.cs",
    "chars": 16369,
    "preview": "//\n// HttpsProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Fo"
  },
  {
    "path": "MailKit/Net/Proxy/IProxyClient.cs",
    "chars": 8557,
    "preview": "//\n// IProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/Net/Proxy/ProxyClient.cs",
    "chars": 16915,
    "preview": "//\n// ProxyClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  },
  {
    "path": "MailKit/Net/Proxy/ProxyProtocolException.cs",
    "chars": 3534,
    "preview": "//\n// ProxyProtocolException.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 ."
  },
  {
    "path": "MailKit/Net/Proxy/Socks4Client.cs",
    "chars": 13314,
    "preview": "//\n// Socks4Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/Net/Proxy/Socks4aClient.cs",
    "chars": 3714,
    "preview": "//\n// Socks4aClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Found"
  },
  {
    "path": "MailKit/Net/Proxy/Socks5Client.cs",
    "chars": 19419,
    "preview": "//\n// Socks5Client.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Founda"
  },
  {
    "path": "MailKit/Net/Proxy/SocksClient.cs",
    "chars": 3915,
    "preview": "//\n// SocksClient.cs\n//\n// Author: Jeffrey Stedfast <jestedfa@microsoft.com>\n//\n// Copyright (c) 2013-2026 .NET Foundat"
  }
]

// ... and 880 more files (download for full content)

About this extraction

This page contains the full source code of the jstedfast/MailKit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1080 files (19.0 MB), approximately 5.0M tokens, and a symbol index with 5201 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!