123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- ---
- -- Working Example: https://www.youtube.com/watch?v=PDxTR_KJLhc
- -- @author Miguel (AllAboutEE.com)
- -- @description This example will read the first email in your inbox using IMAP and
- -- display it through serial. The email server must provided unecrypted access. The code
- -- was tested with an AOL and Time Warner cable email accounts (GMail and other services who do
- -- not support no SSL access will not work).
- local imap = require("imap")
- local IMAP_USERNAME = "email@domain.com"
- local IMAP_PASSWORD = "password"
- -- find out your unencrypted imap server and port
- -- from your email provided i.e. google "[my email service] imap settings" for example
- local IMAP_SERVER = "imap.service.com"
- local IMAP_PORT = "143"
- local IMAP_TAG = "t1" -- You do not need to change this
- local IMAP_DEBUG = true -- change to true if you would like to see the entire conversation between
- -- the ESP8266 and IMAP server
- local SSID = "ssid"
- local SSID_PASSWORD = "password"
- local count = 0 -- we will send several IMAP commands/requests, this variable helps keep track of which one to send
- local imap_socket, timer
- ---
- -- @name setup
- -- @description A call back function used to begin reading email
- -- upon sucessfull connection to the IMAP server
- local function setup(sck)
- -- Set the email user name and password, IMAP tag, and if debugging output is needed
- imap.config(IMAP_USERNAME,
- IMAP_PASSWORD,
- IMAP_TAG,
- IMAP_DEBUG)
- imap.login(sck)
- end
- local subject = ""
- local from = ""
- local body = ""
- ---
- -- @name do_next
- -- @description A call back function for a timer alarm used to check if the previous
- -- IMAP command reply has been processed. If the IMAP reply has been processed
- -- this function will call the next IMAP command function necessary to read the email
- local function do_next()
- -- Check if the IMAP reply was processed
- if(imap.response_processed() == true) then
- -- The IMAP reply was processed
- if (count == 0) then
- -- After logging in we need to select the email folder from which we wish to read
- -- in this case the INBOX folder
- imap.examine(imap_socket,"INBOX")
- count = count + 1
- elseif (count == 1) then
- -- After examining/selecting the INBOX folder we can begin to retrieve emails.
- -- Retrieve the SUBJECT of the first/newest email
- imap.fetch_header(imap_socket,imap.get_most_recent_num(),"SUBJECT")
- count = count + 1
- elseif (count == 2) then
- subject = imap.get_header() -- store the SUBJECT response in subject
- -- Retrieve the FROM of the first/newest email
- imap.fetch_header(imap_socket,imap.get_most_recent_num(),"FROM")
- count = count + 1
- elseif (count == 3) then
- from = imap.get_header() -- store the FROM response in from
- -- Retrieve the BODY of the first/newest email
- imap.fetch_body_plain_text(imap_socket,imap.get_most_recent_num())
- count = count + 1
- elseif (count == 4) then
- body = imap.get_body() -- store the BODY response in body
- imap.logout(imap_socket) -- Logout of the email account
- count = count + 1
- else
- -- display the email contents
- -- create patterns to strip away IMAP protocol text from actual message
- local pattern1 = "%*.*}\n" -- to remove "* n command (BODY[n] {n}"
- local pattern2 = "%)\n.+" -- to remove ") t1 OK command completed"
- from = string.gsub(from,pattern1,"")
- from = string.gsub(from,pattern2,"")
- print(from)
- subject = string.gsub(subject,pattern1,"")
- subject = string.gsub(subject,pattern2,"")
- print(subject)
- body = string.gsub(body,pattern1,"")
- body = string.gsub(body,pattern2,"")
- print("Message: " .. body)
- timer:stop() -- Stop the timer alarm
- imap_socket:close() -- close the IMAP socket
- collectgarbage() -- clean up
- end
- end
- end
- do
- -- configure the ESP8266 as a station
- wifi.setmode(wifi.STATION)
- wifi.sta.config(SSID,SSID_PASSWORD)
- wifi.sta.autoconnect(1)
- -- create an unencrypted connection
- imap_socket = net.createConnection(net.TCP,0)
- imap_socket:on("connection",setup) -- call setup() upon connection
- imap_socket:connect(IMAP_PORT,IMAP_SERVER) -- connect to the IMAP server
- -- A timer alarm is sued to check if an IMAP reply has been processed
- timer = tmr.create()
- timer:alarm(1000, tmr.ALARM_AUTO, do_next)
- end
|