Sample code for 30+ languages & platforms
React Native Requires Chilkat v11.0.0+

Download and Save Email Attachments (POP3)

See more POP3 Examples

Downloads emails from a POP3 mailbox and saves all attachments.

Chilkat React Native Downloads

React Native
import { Email, EmailBundle, MailMan } from '@chilkat/react-native'

async function chilkatExample() {
  // 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.
  const mailman = new MailMan();

  // Set the POP3 server's hostname
  mailman.mailHost = 'pop.yourserver.com';

  // Set the POP3 login/password.
  mailman.popUsername = '***';
  mailman.popPassword = '***';

  // 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..
  const bundle = new EmailBundle();
  const keepOnServer = true;
  const headersOnly = false;
  // Irrelevent because we are NOT downloading headers-only
  const numBodyLines = 0;
  try {
    await mailman.fetchAllAsync(keepOnServer, headersOnly, numBodyLines, bundle);
  } catch {
    console.log(mailman.lastErrorText);
    return;
  }

  // The directory path can be relative or absolute.
  // This shows a Windows style directory path.  On other operating systems, the path
  // would be different..
  const dirPath = 'c:/myAttachments';

  const email = new Email();
  let bundleIndex = 0;
  const numMessages = bundle.messageCount;

  while (bundleIndex < numMessages) {
    bundle.emailAt(bundleIndex, email);

    // Save all attachments to the specified directory.
    // The directory is automatically created if it does not yet exist.
    try {
      email.saveAllAttachments(dirPath);
    } catch {
      console.log(email.lastErrorText);
      return;
    }

    // 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...
    email.overwriteExisting = false;
    try {
      email.saveAllAttachments(dirPath);
    } catch {
      console.log(email.lastErrorText);
      return;
    }

    const numAttachments = email.numAttachments;
    let attachIndex = 0;
    while (attachIndex < numAttachments) {
      // If the attachment filename was changed to prevent overwriting,
      // GetAttachmentFilename will return the new filename.
      console.log(email.getAttachmentFilename(attachIndex));
      attachIndex++;
    }

    // Attachments can also be saved individually.
    attachIndex = 0;
    while (attachIndex < numAttachments) {

      console.log(`Original Filename: ${email.getAttachmentFilename(attachIndex)}`);
      try {
        email.saveAttachedFile(attachIndex, dirPath);
      } catch {
        console.log(email.lastErrorText);
        return;
      }

      // 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.
      console.log(`Saved Filename: ${email.getAttachmentFilename(attachIndex)}`);
      attachIndex++;
    }

    bundleIndex++;
  }
}