download-email-attachments
Version:
Download email attachments via IMAP
140 lines (98 loc) • 3.67 kB
Markdown
# download-email-attachments
> Download email attachments via IMAP
[](https://travis-ci.org/eHealthAfrica/download-email-attachments/)
`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.
## Command Line Interface
```
# 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
```
## Using as module
```js
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)
```
## Options
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.com
- `password`
If password contains `@` or `:`, put it in quotes, e.g. `joe:"123:@456"@example.com
- `host`
This is the imap domain
- `port`
Optional, defaults to `993`
### `--directory` / `directory`
**Optional**. Defaults to `./`
Directory where attachments shall be downloaded to.
### `--filename-template` / `filenameTemplate`
**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.
### `--filename-filter` / `filenameFilter`
**Optional**
Pass a regular expression, only attachments matching it will be
downloaded.
### `--timeout` / `timeout`
**Optional**, defaults to 10000
Timeout in millisecond to wait for data from the imap server until
closing the connection.
### `--since` / `since`
**Optional**. Defaults to today's date in `YYYY-MM-DD` format
## Local setup
```
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](https://twitter.com/gr2m)
## License
MIT