📄 idimap4.pas
字号:
function RetrievePartToFilePeek(const AMsgNum: Integer; const APartNum: string;
ALength: Integer; ADestFileNameAndPath: string; AContentTransferEncoding: string): Boolean; overload;
{CC3: Following added for retrieving the text-only part of a message...}
function RetrieveText(const AMsgNum: Integer; var AText: string): Boolean;
{CC4: An alternative for retrieving the text-only part of a message which
may give a better response from some IMAP implementations...}
function RetrieveText2(const AMsgNum: Integer; var AText: string): Boolean;
{CC3: Following added for retrieving the text-only part of a message...}
function RetrieveTextPeek(const AMsgNum: Integer; var AText: string): Boolean;
function RetrieveTextPeek2(const AMsgNum: Integer; var AText: string): Boolean;
//Retrieves only the message header.
function RetrieveHeader (const AMsgNum: Integer; AMsg: TIdMessage): Boolean;
//CCD: Retrieve the header for a particular part...
function RetrievePartHeader(const AMsgNum: Integer; const APartNum: string; AHeaders: TIdHeaderList): Boolean;
//Retrives the current selected mailbox size.
function RetrieveMailBoxSize: Integer;
//Returnes the message size.
function RetrieveMsgSize(const AMsgNum: Integer): Integer;
//Retrieves a whole message while keeping its Seen flag untucked {Do not Localize}
//(preserving the previous value).
function RetrievePeek (const AMsgNum: Integer; AMsg: TIdMessage): Boolean;
//Get the UID corresponding to a relative message number.
function GetUID(const AMsgNum: Integer; var AUID: string): Boolean;
//Copies a message from the current selected mailbox to the specified mailbox. {Do not Localize}
function UIDCopyMsg (const AMsgUID: String; const AMBName: String): Boolean;
{CC8: Added UID version of CopyMsgs...}
function UIDCopyMsgs(const AMsgUIDList: TIdStringList; const AMBName: String): Boolean;
//Checks if the message was read or not.
function UIDCheckMsgSeen (const AMsgUID: String): Boolean;
//Marks a message for deletion, it will be deleted when the mailbox will be purged.
function UIDDeleteMsg(const AMsgUID: String): Boolean;
function UIDDeleteMsgs(const AMsgUIDList: array of String): Boolean;
//Retrieves all headers of the selected mailbox to the specified TIdMessageCollection.
{CC5: This is not, and never was, implemented: why would you use it?}
{CC8: UIDRetrieveAllHeaders is removed, it makes no sense when you think about it,
because it would need a sparse array because of missing UIDs in sequence.}
{function UIDRetrieveAllHeaders (AMsgList: TIdMessageCollection): Boolean;}
//Retrieves all envelope and UID of the selected mailbox to the specified TIdMessageCollection.
function UIDRetrieveAllEnvelopes (AMsgList: TIdMessageCollection): Boolean;
//Retrieves a whole message while marking it read.
function UIDRetrieve (const AMsgUID: String; AMsg: TIdMessage): Boolean;
//Retrieves a whole message "raw" and saves it to file, while marking it read.
function UIDRetrieveNoDecodeToFile (const AMsgUID: String; ADestFile: string): Boolean;
function UIDRetrieveNoDecodeToStream (const AMsgUID: String; AStream: TStream): Boolean;
//Retrieves the message envelope, parses it, and discards the envelope.
function UIDRetrieveEnvelope (const AMsgUID: String; AMsg: TIdMessage): Boolean;
//Retrieves the message envelope into a TIdStringList but does NOT parse it.
function UIDRetrieveEnvelopeRaw(const AMsgUID: String; ADestList: TIdStringList): Boolean;
//Returnes the message flag values.
function UIDRetrieveFlags (const AMsgUID: String; var AFlags: TIdMessageFlagsSet): Boolean;
{CC2: Following added for retrieving individual parts of a message...}
function UIDInternalRetrieveStructure(const AMsgUID: String; AMsg: TIdMessage; AParts: TIdImapMessageParts): Boolean;
//Retrieve only the message structure (this tells you what parts are in the message).
function UIDRetrieveStructure(const AMsgUID: String; AMsg: TIdMessage): Boolean; overload;
function UIDRetrieveStructure(const AMsgUID: String; AParts: TIdImapMessageParts): Boolean; overload;
{CC2: Following added for retrieving individual parts of a message...}
{Retrieve a specific individual part of a message where part is an integer (for backward compatibility)...}
function UIDRetrievePart(const AMsgUID: String; const APartNum: Integer;
{$IFDEF DOTNET}
var ABuffer: TIdBytes;
var ABufferLength: Integer; AContentTransferEncoding: string = 'text'): Boolean; overload; {Do not Localize}
{$ELSE}
var ABuffer: PChar;
var ABufferLength: Integer; AContentTransferEncoding: string = 'text'): Boolean; overload; {Do not Localize}
{$ENDIF}
{Retrieve a specific individual part of a message where part is an integer or sub-part like '2.3'...}
function UIDRetrievePart(const AMsgUID: String; const APartNum: string;
{$IFDEF DOTNET}
var ABuffer: TIdBytes;
{$ELSE}
var ABuffer: PChar;
{$ENDIF}
var ABufferLength: Integer; AContentTransferEncoding: string = 'text'): Boolean; overload; {Do not Localize}
{CC2: Following added for retrieving individual parts of a message...}
{Retrieve a specific individual part of a message where part is an integer (for backward compatibility)...}
function UIDRetrievePartPeek(const AMsgUID: String; const APartNum: Integer;
{$IFDEF DOTNET}
var ABuffer: TIdBytes;
{$ELSE}
var ABuffer: PChar;
{$ENDIF}
var ABufferLength: Integer; AContentTransferEncoding: string = 'text'): Boolean; overload; {Do not Localize}
{Retrieve a specific individual part of a message where part is an integer or sub-part like '2.3'...}
function UIDRetrievePartPeek(const AMsgUID: String; const APartNum: string;
{$IFDEF DOTNET}
var ABuffer: TIdBytes;
{$ELSE}
var ABuffer: PChar;
{$ENDIF}
var ABufferLength: Integer; AContentTransferEncoding: string = 'text'): Boolean; overload; {Do not Localize}
{CC2: Following added for retrieving individual parts and subparts of a message...}
{Retrieve a specific individual part of a message where part is an integer (for backward compatibility)...}
function UIDRetrievePartToFile(const AMsgUID: String; const APartNum: Integer;
ALength: Integer; ADestFileNameAndPath: string; AContentTransferEncoding: string): Boolean; overload;
{Retrieve a specific individual part of a message where part is an integer or sub-part like '2.3'...}
function UIDRetrievePartToFile(const AMsgUID: String; const APartNum: string;
ALength: Integer; ADestFileNameAndPath: string; AContentTransferEncoding: string): Boolean; overload;
{CC2: Following added for retrieving individual parts of a message...}
{Retrieve a specific individual part of a message where part is an integer (for backward compatibility)...}
function UIDRetrievePartToFilePeek(const AMsgUID: String; const APartNum: Integer;
ALength: Integer; ADestFileNameAndPath: string; AContentTransferEncoding: string): Boolean; overload;
{Retrieve a specific individual part of a message where part is an integer or sub-part like '2.3'...}
function UIDRetrievePartToFilePeek(const AMsgUID: String; const APartNum: string;
ALength: Integer; ADestFileNameAndPath: string; AContentTransferEncoding: string): Boolean; overload;
{CC3: Following added for retrieving the text-only part of a message...}
function UIDRetrieveText(const AMsgUID: String; var AText: string): Boolean;
function UIDRetrieveText2(const AMsgUID: String; var AText: string): Boolean;
{CC3: Following added for retrieving the text-only part of a message...}
function UIDRetrieveTextPeek(const AMsgUID: String; var AText: string): Boolean;
function UIDRetrieveTextPeek2(const AMsgUID: String; var AText: string): Boolean;
//Retrieves only the message header.
function UIDRetrieveHeader (const AMsgUID: String; AMsg: TIdMessage): Boolean;
//CCD: Retrieve the header for a particular part...
function UIDRetrievePartHeader(const AMsgUID: String; const APartNum: string; AHeaders: TIdHeaderList): Boolean;
//Retrives the current selected mailbox size.
function UIDRetrieveMailBoxSize: Integer;
//Returnes the message size.
function UIDRetrieveMsgSize(const AMsgUID: String): Integer;
//Retrieves a whole message while keeping its Seen flag untucked {Do not Localize}
//(preserving the previous value).
function UIDRetrievePeek (const AMsgUID: String; AMsg: TIdMessage): Boolean;
//Searches the current selected mailbox for messages matching the SearchRec and
//returnes the results as UIDs to the mailbox SearchResults array.
function UIDSearchMailBox (const ASearchInfo: array of TIdIMAP4SearchRec{Array}): Boolean;//array of TIdIMAP4SearchRec ) : Boolean;
//Changes (adds or removes) message flags.
function UIDStoreFlags (const AMsgUID: String; const AStoreMethod: TIdIMAP4StoreDataItem; const AFlags: TIdMessageFlagsSet): Boolean; overload;
function UIDStoreFlags (const AMsgUIDList: array of String; const AStoreMethod: TIdIMAP4StoreDataItem; const AFlags: TIdMessageFlagsSet): Boolean; overload;
//Removes the specified mailbox name from the server's set of "active" or "subscribed" {Do not Localize}
//mailboxes as returned by the LSUB command.
function UnsubscribeMailBox (const AMBName: String): Boolean;
{ TIdIMAP4 Commands }
{ IdTCPConnection Commands }
function GetInternalResponse (const ATag: String; AExpectedResponses: array of String; ASingleLineMode: Boolean; ASingleLineMayBeSplit: Boolean = False): string; reintroduce; overload;
function GetResponse: string; reintroduce; overload;
function SendCmd(const AOut: string; AExpectedResponses: array of String): string; overload; //overload; override;
function SendCmd(const ATag, AOut: string; AExpectedResponses: array of String): string; overload; //reintroduce; overload;
function ReadLnWait: string;
procedure WriteLn(AOut: string);
{ IdTCPConnection Commands }
published
property OnAlert: TIdAlertEvent read FOnAlert write FOnAlert;
property Password;
property RetrieveOnSelect: TIdRetrieveOnSelect read FRetrieveOnSelect write FRetrieveOnSelect default rsDisabled;
property Port default IdPORT_IMAP4;
property Username;
property MailBoxSeparator: Char read FMailBoxSeparator write FMailBoxSeparator default '/'; {Do not Localize}
{CC7: GreetingBanner added because it may help identify the server...}
property GreetingBanner : string read FGreetingBanner;
property Host;
property UseTLS;
{CC7: AuthenticationType removed, SASLMechanisms and AuthType added when
LoginSASL moved from TIdMessageSASLClient to TIdSASLList}
property SASLMechanisms : TIdSASLEntries read FSASLMechanisms write FSASLMechanisms;
property AuthType : TIdIMAP4AuthenticationType read FAuthType write FAuthType default DEF_IMAP4_AUTH;
property MilliSecsToWaitToClearBuffer: integer read FMilliSecsToWaitToClearBuffer write FMilliSecsToWaitToClearBuffer;
{The following is the OnWork property for use when retrieving PARTS of a message.
It is also used for AppendMsg and Retrieve. The reason is that all those methods
dynamically create a TIdTCPStream to do the byte-count transfer.
This is in addition to the normal OnWork property, which is exposed by TIdIMAP4, but
which is only activated during IMAP sending & receiving of commands (subject
to the general OnWork caveats, i.e. it is only called during certain methods,
note OnWork[Begin][End] are all only called in the methods AllData(),
PerformCapture() and Read/WriteStream() ).
When a PART of a message is processed, a TIdTCPStream is opened, and this exposes
that stream's OnWork property. Use this for progress notification of retrieval
of IMAP parts, such as retrieving attachments. OnWorkBegin and OnWorkEnd are not
exposed, because they won't be activated during the processing of a part.}
property OnWorkForPart: TWorkEvent read FOnWorkForPart write FOnWorkForPart;
property OnWorkBeginForPart: TWorkBeginEvent read FOnWorkBeginForPart write FOnWorkBeginForPart;
property OnWorkEndForPart: TWorkEndEvent read FOnWorkEndForPart write FOnWorkEndForPart;
end;
implementation
uses
IdEMailAddress,
IdResourceStrings,
IdExplicitTLSClientServerBase, {Indy 10 SSL support - framework supports DotNET}
SysUtils, {CC3: SysUtils added to support Exception}
IdGlobalProtocols,
IdExceptionCore,
IdStack,
IdTCPStream,
IdText,
IdAttachment,
IdResourceStringsProtocols,
IdStreamVCL,
{$IFDEF DOTNET}
IdBuffer,
{$ENDIF}
IdAttachmentMemory,
IdReplyIMAP4, {CC6: for Indy 10 changes}
IdTCPConnection;
type
TIdIMAP4FetchDataItem =
( fdAll, //Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
fdBody, //Non-extensible form of BODYSTRUCTURE.
fdBodyExtensible,
fdBodyPeek,
fdBodyStructure, //The [MIME-IMB] body structure of the message. This
//is computed by the server by parsing the [MIME-IMB]
//header fields in the [RFC-822] header and [MIME-IMB] headers.
fdEnvelope, //The envelope structure of the message. This is
//computed by the server by parsing the [RFC-822]
//header into the component parts, defaulting various
//fields as necessary.
fdFast, //Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE)
fdFlags, //The flags that are set for this message.
fdFull, //Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)
fdInternalDate, //The internal date of the message.
fdRFC822, //Functionally equivalent to BODY[], differing in the
//syntax of the resulting untagged FETCH data (RFC822
//is returned).
fdRFC822Header, //Functionally equivalent to BODY.PEEK[HEADER],
//differing in the syntax of the resulting untagged
//FETCH data (RFC822.HEADER is returned).
fdRFC822Size, //The [RFC-822] size of the message.
fdRFC822Text, //Functionally equivalent to BODY[TEXT], differing in
//the syntax of the resulting untagged FETCH data
//(RFC822.TEXT is returned).
fdHeader, //CC: Added to get the header of a part
fdUID ); //The unique identifier for the message.
const
IMAP4Commands : array [cmdCapability..cmdXCmd] of String =
(
{ Client Commands - Any State}
'CAPABILITY', {Do not Localize}
'NOOP', {Do not Localize}
'LOGOUT', {Do not Localize}
{ Client Commands - Non Authenticated State}
'AUTHENTICATE', {Do not Localize}
'LOGIN', {Do not Localize}
{ Client Commands - Authenticated State}
'SELECT', {Do not Localize}
'EXAMINE', {Do not Localize}
'CREATE', {Do not Localize}
'DELETE', {Do not Localize}
'RENAME', {Do not Locali
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -