Created
March 16, 2019 08:48
-
-
Save impuneet/491505c023c9d3a81549b7a417b21d60 to your computer and use it in GitHub Desktop.
Scan for Emails with Attachments and Save Attachments to Files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var os = require('os'); | |
if (os.platform() == 'win32') { | |
if (os.arch() == 'ia32') { | |
var chilkat = require('@chilkat/ck-node11-win-ia32'); | |
} else { | |
var chilkat = require('@chilkat/ck-node11-win64'); | |
} | |
} else if (os.platform() == 'linux') { | |
if (os.arch() == 'arm') { | |
var chilkat = require('@chilkat/ck-node11-arm'); | |
} else if (os.arch() == 'x86') { | |
var chilkat = require('@chilkat/ck-node11-linux32'); | |
} else { | |
var chilkat = require('@chilkat/ck-node11-linux64'); | |
} | |
} else if (os.platform() == 'darwin') { | |
var chilkat = require('@chilkat/ck-node11-macosx'); | |
} | |
function chilkatExample() { | |
// This example requires the Chilkat API to have been previously unlocked. | |
// See Global Unlock Sample for sample code. | |
var imap = new chilkat.Imap(); | |
// Connect to an IMAP server. | |
// Use TLS | |
imap.Ssl = true; | |
imap.Port = 993; | |
var success = imap.Connect("imap.someMailServer.com"); | |
if (success !== true) { | |
console.log(imap.LastErrorText); | |
return; | |
} | |
// Login | |
success = imap.Login("myLogin","myPassword"); | |
if (success !== true) { | |
console.log(imap.LastErrorText); | |
return; | |
} | |
// Select an IMAP mailbox | |
success = imap.SelectMailbox("Inbox"); | |
if (success !== true) { | |
console.log(imap.LastErrorText); | |
return; | |
} | |
// messageSet: MessageSet | |
var messageSet; | |
// We can choose to fetch UIDs or sequence numbers. | |
var fetchUids = true; | |
// Get the message IDs of all the emails in the mailbox | |
messageSet = imap.Search("ALL",fetchUids); | |
if (imap.LastMethodSuccess !== true) { | |
console.log(imap.LastErrorText); | |
return; | |
} | |
// Fetch the email headers into a bundle object: | |
// bundle: EmailBundle | |
var bundle; | |
bundle = imap.FetchHeaders(messageSet); | |
if (imap.LastMethodSuccess !== true) { | |
console.log(imap.LastErrorText); | |
return; | |
} | |
// Scan for emails with attachments, and save the attachments | |
// to a sub-directory. | |
var i; | |
for (i = 0; i <= bundle.MessageCount - 1; i++) { | |
// email: Email | |
var email; | |
email = bundle.GetEmail(i); | |
// Does this email have attachments? | |
// Use GetMailNumAttach because the attachments | |
// are not actually in the email object because | |
// we only downloaded headers. | |
// (Had we downloaded the full emails by | |
// calling mailman.FetchBundle, we could look | |
// at the email object's NumAttachments property.) | |
var numAttach = imap.GetMailNumAttach(email); | |
if (numAttach > 0) { | |
// Download the entire email and save the | |
// attachments. (Remember, we | |
// need to download the entire email because | |
// only the headers were previously downloaded. | |
// If the entire emails were downloaded by | |
// calling FetchBundle instead of FetchHeaders, | |
// this would not be necessary. | |
// The ckx-imap-uid header field is added when | |
// headers are downloaded. This makes it possible | |
// to get the UID from the email object. | |
var uidStr = email.GetHeaderField("ckx-imap-uid"); | |
var uid = uidStr; | |
// fullEmail: Email | |
var fullEmail; | |
fullEmail = imap.FetchSingle(uid,true); | |
if (!(fullEmail == null )) { | |
success = fullEmail.SaveAllAttachments("attachmentsDir"); | |
} | |
var j; | |
for (j = 0; j <= numAttach - 1; j++) { | |
var filename = imap.GetMailAttachFilename(email,j); | |
console.log(filename); | |
} | |
} | |
} | |
// Disconnect from the IMAP server. | |
success = imap.Disconnect(); | |
} | |
chilkatExample(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment