Download email attachments via IMAP
download-email-attachments
downloads all attachements of an email account
to a directory and optionally do some postprocessing. It can either be required as module or used as
a command line tool.
# install download-email-attachments globally
npm install -g download-email-attachments
# download all attachments of joe@example.com (password: secret) since beginning of 2015-01-12
download-email-attachments "joe@example.com":secret@imap-server.com:123 \
--directory ./files \
--filename-template "{day}-{filename}" \
--filename-filter ".xlsx?$" \
--timeout 3000 \
--since 2015-01-12
var onEnd = function (result) {
if (result.error) {
console.log(result.error)
return
}
console.log("done")
console.log(result.latestTime)
}
var downloadEmailAttachments = require('download-email-attachments');
downloadEmailAttachments({
invalidChars: /[^A-Z]/g, //Regex of Characters that are invalid and will be replaced by X
account: '"joe@example.com":secret@imap-server.com:123', // all options and params besides account are optional
directory: './files',
filenameTemplate: '{day}-{filename}',
filenameFilter: /.xlsx?$/,
timeout: 3000,
log: {warn: console.warn, debug: console.info, error, console.error, info: console.info },
since: '2015-01-12',
lastSyncIds: ['234', '234', '5345'] // ids already dowloaded and ignored, helpful because since is only supporting dates without time
attachmentHandler: function (attachmentData, callback, errorCB) {
console.log(attachmentData)
callback()
}
}, onEnd)
You have to pass an imap account with password, the format is:
username:password@host:port
username
If username contains@
or:
, put it in quotes, e.g. `"joe@example.com":secret@example.compassword
If password contains@
or:
, put it in quotes, e.g. `joe:"123:@456"@example.comhost
This is the imap domainport
Optional, defaults to993
Optional. Defaults to ./
Directory where attachments shall be downloaded to.
Optional. Defaults to {filename}
Filenames the attachments shall be saved as. Using /
will
create subfolders. The following placeholders are available
{filename}
, e.g.data.xls
{basename}
, e.g.data
{extension}
, e.g.xls
{day}
, e.g.2015-01-01
{recipientAddress}
, e.g.reciepient@example.com
{senderAddress}
, e.g.sender@example.com
{id}
, unique content ID, e.g.c361f45d-98b6-9b18-96ac-f66aee2cb760
{nr}
, starts at 1 and increments for every stored file.
Optional
Pass a regular expression, only attachments matching it will be downloaded.
Optional, defaults to 10000
Timeout in millisecond to wait for data from the imap server until closing the connection.
Optional. Defaults to today's date in YYYY-MM-DD
format
git clone git@github.com:gr2m/download-email-attachments.git
cd download-email-attachments
npm install
Run all tests
npm test
Note: There is no full stack test yet, because of the complexity of stubbing an imap server. If someone could help here, that'd be much appreciated! Ping me
MIT