Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... 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.
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 mailman: HCkMailMan; bundle: HCkEmailBundle; dirPath: PWideChar; success: Boolean; bundleIndex: Integer; numMessages: Integer; email: HCkEmail; numAttachments: Integer; attachIndex: Integer; begin // 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. // CopyMail 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 := CkMailMan_CopyMail(mailman); if (CkMailMan_getLastMethodSuccess(mailman) <> True) 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'; bundleIndex := 0; numMessages := CkEmailBundle_getMessageCount(bundle); while (bundleIndex < numMessages) do begin email := CkEmailBundle_GetEmail(bundle,bundleIndex); // 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 <> True) 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 <> True) 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 <> True) 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; CkEmail_Dispose(email); bundleIndex := bundleIndex + 1; end; CkEmailBundle_Dispose(bundle); CkMailMan_Dispose(mailman); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.