Guest User

Untitled

a guest
Dec 8th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. # This example script opens an IMAP connection to the server and
  2. # seeks unread messages sent by the user himself. It will then
  3. # download those messages, parse them, and write their attachments
  4. # to disk.
  5.  
  6. # Install node-imap with `npm install imap`
  7. imap = require "imap"
  8. # Install mailparser with `npm install mailparser`
  9. mailparser = require "mailparser"
  10.  
  11. # You need a config file with your email settings
  12. fs = require "fs"
  13. config = JSON.parse fs.readFileSync "#{process.cwd()}/config.json", "utf-8"
  14.  
  15. server = new imap.ImapConnection
  16. username: config.username
  17. password: config.password
  18. host: config.imap.host
  19. port: config.imap.port
  20. secure: config.imap.secure
  21.  
  22. exitOnErr = (err) ->
  23. console.error err
  24. do process.exit
  25.  
  26. server.connect (err) ->
  27. exitOnErr err if err
  28. server.openBox "INBOX", false, (err, box) ->
  29. exitOnErr err if err
  30. console.log "You have #{box.messages.total} messages in your INBOX"
  31.  
  32. server.search ["UNSEEN", ["SINCE", "Sep 18, 2011"], ["FROM", config.email]], (err, results) ->
  33. exitOnErr err if err
  34.  
  35. unless results.length
  36. console.log "No unread messages from #{config.email}"
  37. do server.logout
  38. return
  39.  
  40. fetch = server.fetch results,
  41. request:
  42. body: "full"
  43. headers: false
  44.  
  45. fetch.on "message", (message) ->
  46. fds = {}
  47. filenames = {}
  48. parser = new mailparser.MailParser
  49.  
  50. parser.on "headers", (headers) ->
  51. console.log "Message: #{headers.subject}"
  52.  
  53. parser.on "astart", (id, headers) ->
  54. filenames[id] = headers.filename
  55. fds[id] = fs.openSync headers.filename, 'w'
  56.  
  57. parser.on "astream", (id, buffer) ->
  58. fs.writeSync fds[id], buffer, 0, buffer.length, null
  59.  
  60. parser.on "aend", (id) ->
  61. return unless fds[id]
  62. fs.close fds[id], (err) ->
  63. return console.error err if err
  64. console.log "Writing #{filenames[id]} completed"
  65.  
  66. message.on "data", (data) ->
  67. parser.feed data.toString()
  68.  
  69. message.on "end", ->
  70. do parser.end
  71.  
  72. fetch.on "end", ->
  73. do server.logout
Add Comment
Please, Sign In to add comment