![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Delphi DLL) Download and Save Email Attachments (POP3)See more POP3 ExamplesDownloads emails from a POP3 mailbox and saves all attachments.Note: This example requires Chilkat v11.0.0 or greater.
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MailMan, EmailBundle, Email; ... procedure TForm1.Button1Click(Sender: TObject); var success: Boolean; mailman: HCkMailMan; bundle: HCkEmailBundle; keepOnServer: Boolean; headersOnly: Boolean; numBodyLines: Integer; dirPath: PWideChar; email: HCkEmail; bundleIndex: Integer; numMessages: Integer; numAttachments: Integer; attachIndex: Integer; begin success := False; // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // The mailman object is used for receiving (POP3) // and sending (SMTP) email. mailman := CkMailMan_Create(); // Set the POP3 server's hostname CkMailMan_putMailHost(mailman,'pop.yourserver.com'); // Set the POP3 login/password. CkMailMan_putPopUsername(mailman,'***'); CkMailMan_putPopPassword(mailman,'***'); // Copy the all email from the user's POP3 mailbox // into a bundle object. The email remains on the server. // FetchAll is a reasonable choice for POP3 maildrops that don't have too many // emails. For larger mail drops, one might download emails one at a time.. bundle := CkEmailBundle_Create(); keepOnServer := True; headersOnly := False; // Irrelevent because we are NOT downloading headers-only numBodyLines := 0; success := CkMailMan_FetchAll(mailman,keepOnServer,headersOnly,numBodyLines,bundle); if (success = False) then begin Memo1.Lines.Add(CkMailMan__lastErrorText(mailman)); Exit; end; // The directory path can be relative or absolute. // This shows a Windows style directory path. On other operating systems, the path // would be different.. dirPath := 'c:/myAttachments'; email := CkEmail_Create(); bundleIndex := 0; numMessages := CkEmailBundle_getMessageCount(bundle); while (bundleIndex < numMessages) do begin CkEmailBundle_EmailAt(bundle,bundleIndex,email); // Save all attachments to the specified directory. // The directory is automatically created if it does not yet exist. success := CkEmail_SaveAllAttachments(email,dirPath); if (success = False) then begin Memo1.Lines.Add(CkEmail__lastErrorText(email)); Exit; end; // The OverwriteExisting property controls whether already-existing files // are automatically overwritten. By default, it is set to True so that existing // files will be overwritten. // Setting OverwriteExisting = False will cause the attachment-saving methods to generate // unique filenames if a file with the same name already exists. The actual filename(s) // saved will be present by calling GetAttachmentFilename for each attachment *after* // saving. // For example... CkEmail_putOverwriteExisting(email,False); success := CkEmail_SaveAllAttachments(email,dirPath); if (success = False) then begin Memo1.Lines.Add(CkEmail__lastErrorText(email)); Exit; end; numAttachments := CkEmail_getNumAttachments(email); attachIndex := 0; while (attachIndex < numAttachments) do begin // If the attachment filename was changed to prevent overwriting, // GetAttachmentFilename will return the new filename. Memo1.Lines.Add(CkEmail__getAttachmentFilename(email,attachIndex)); attachIndex := attachIndex + 1; end; // Attachments can also be saved individually. attachIndex := 0; while (attachIndex < numAttachments) do begin Memo1.Lines.Add('Original Filename: ' + CkEmail__getAttachmentFilename(email,attachIndex)); success := CkEmail_SaveAttachedFile(email,attachIndex,dirPath); if (success = False) then begin Memo1.Lines.Add(CkEmail__lastErrorText(email)); Exit; end; // If OverwriteExisting = True, the saved filename will always equal the original filename, // unless there are characters present in the filename that are not allowed by Windows, // such as * ? < > | etc. In those cases the illegal characters are either removed or replaced // with underscore characters to allow the file to be saved. Memo1.Lines.Add('Saved Filename: ' + CkEmail__getAttachmentFilename(email,attachIndex)); attachIndex := attachIndex + 1; end; bundleIndex := bundleIndex + 1; end; CkMailMan_Dispose(mailman); CkEmailBundle_Dispose(bundle); CkEmail_Dispose(email); end; |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.