Skip to content

Instantly share code, notes, and snippets.

@marcozingaro
Forked from alexiskattan/.gitignore
Last active August 29, 2015 14:17
Show Gist options
  • Select an option

  • Save marcozingaro/fa73ff607253d87cbe01 to your computer and use it in GitHub Desktop.

Select an option

Save marcozingaro/fa73ff607253d87cbe01 to your computer and use it in GitHub Desktop.
config.json
reading-image.png

Some examples of sending and receiving emails with Node.js

{
"name": "My Name"
"email": "user@domain.com",
"username": "user@gmail.com",
"password": "MYPASSWORD",
"imap": {
"host": "imap.gmail.com",
"port": 993,
"secure": true
},
"smtp": {
"host": "smtp.gmail.com",
"ssl": true
}
}
# This example script opens an IMAP connection to the server and
# seeks unread messages sent by the user himself. It will then
# download those messages, parse them, and write their attachments
# to disk.
# Install node-imap with `npm install imap`
imap = require "imap"
# Install mailparser with `npm install mailparser`
mailparser = require "mailparser"
# You need a config file with your email settings
fs = require "fs"
config = JSON.parse fs.readFileSync "#{process.cwd()}/config.json", "utf-8"
server = new imap.ImapConnection
username: config.username
password: config.password
host: config.imap.host
port: config.imap.port
secure: config.imap.secure
exitOnErr = (err) ->
console.error err
do process.exit
server.connect (err) ->
exitOnErr err if err
server.openBox "INBOX", false, (err, box) ->
exitOnErr err if err
console.log "You have #{box.messages.total} messages in your INBOX"
server.search ["UNSEEN", ["SINCE", "Sep 18, 2011"], ["FROM", config.email]], (err, results) ->
exitOnErr err if err
unless results.length
console.log "No unread messages from #{config.email}"
do server.logout
return
fetch = server.fetch results,
request:
body: "full"
headers: false
fetch.on "message", (message) ->
fds = {}
filenames = {}
parser = new mailparser.MailParser
parser.on "headers", (headers) ->
console.log "Message: #{headers.subject}"
parser.on "astart", (id, headers) ->
filenames[id] = headers.filename
fds[id] = fs.openSync headers.filename, 'w'
parser.on "astream", (id, buffer) ->
fs.writeSync fds[id], buffer, 0, buffer.length, null
parser.on "aend", (id) ->
return unless fds[id]
fs.close fds[id], (err) ->
return console.error err if err
console.log "Writing #{filenames[id]} completed"
message.on "data", (data) ->
parser.feed data.toString()
message.on "end", ->
do parser.end
fetch.on "end", ->
do server.logout
# This script will send an image as an email attachment to the
# user himself. The receiving part of this is in read.coffee
# Install EmailJS with `npm install emailjs`
email = require "emailjs"
# You need a config file with your email settings
fs = require "fs"
config = JSON.parse fs.readFileSync "#{process.cwd()}/config.json", "utf-8"
server = email.server.connect
user: config.username
password: config.password
host: config.smtp.host
ssl: config.smtp.ssl
message = email.message.create
text: "This is test"
from: "#{config.name} <#{config.email}>"
to: "#{config.name} <#{config.email}>"
subject: "Testing Node.js email capabilities"
message.attach "reading.png", "image/png", "reading-image.png"
server.send message, (err, message) ->
return console.error err if err
console.log "Message sent with id #{message['header']['message-id']}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment