mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Catch bad folder error in email node
This commit is contained in:
		@@ -175,69 +175,74 @@ module.exports = function(RED) {
 | 
			
		||||
                node.status({fill:"blue",shape:"dot",text:"fetching"});
 | 
			
		||||
                var pay = {};
 | 
			
		||||
                imap.openBox(node.box, false, function(err, box) {
 | 
			
		||||
                    if (box.messages.total > 0) {
 | 
			
		||||
                        var f = imap.seq.fetch(box.messages.total + ':*', { markSeen:true, bodies: ['HEADER.FIELDS (FROM SUBJECT DATE TO CC BCC)','TEXT'] });
 | 
			
		||||
                        f.on('message', function(msg, seqno) {
 | 
			
		||||
                            node.log('message: #'+ seqno);
 | 
			
		||||
                            var prefix = '(#' + seqno + ') ';
 | 
			
		||||
                            msg.on('body', function(stream, info) {
 | 
			
		||||
                                var buffer = '';
 | 
			
		||||
                                stream.on('data', function(chunk) {
 | 
			
		||||
                                    buffer += chunk.toString('utf8');
 | 
			
		||||
                                });
 | 
			
		||||
                                stream.on('end', function() {
 | 
			
		||||
                                    if (info.which !== 'TEXT') {
 | 
			
		||||
                                        var head = Imap.parseHeader(buffer);
 | 
			
		||||
                                        if (RED.settings.verbose) { node.log(head); }
 | 
			
		||||
                                        pay.from = head.from[0];
 | 
			
		||||
                                        pay.topic = head.subject[0];
 | 
			
		||||
                                        pay.date = head.date[0];
 | 
			
		||||
                                        if (head.hasOwnProperty("to")) { pay.to = head.to; }
 | 
			
		||||
                                        if (head.hasOwnProperty("cc")) { pay.cc = head.cc; }
 | 
			
		||||
                                        if (head.hasOwnProperty("bcc")) { pay.bcc = head.bcc; }
 | 
			
		||||
                                    } else {
 | 
			
		||||
                                        var parts = buffer.split("Content-Type");
 | 
			
		||||
                                        for (var p = 0; p < parts.length; p++) {
 | 
			
		||||
                                            if (parts[p].indexOf("text/plain") >= 0) {
 | 
			
		||||
                                                pay.payload = parts[p].split("\n").slice(1,-2).join("\n").trim();
 | 
			
		||||
                                            }
 | 
			
		||||
                                            else if (parts[p].indexOf("text/html") >= 0) {
 | 
			
		||||
                                                pay.html = parts[p].split("\n").slice(1,-2).join("\n").trim();
 | 
			
		||||
                                            } else {
 | 
			
		||||
                                                pay.payload = parts[0];
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                        //pay.body = buffer;
 | 
			
		||||
                                    }
 | 
			
		||||
                                });
 | 
			
		||||
                            });
 | 
			
		||||
                            msg.on('end', function() {
 | 
			
		||||
                                //node.log('Finished: '+prefix);
 | 
			
		||||
                            });
 | 
			
		||||
                        });
 | 
			
		||||
                        f.on('error', function(err) {
 | 
			
		||||
                            node.warn('fetch error: ' + err);
 | 
			
		||||
                            node.status({fill:"red",shape:"ring",text:"fetch error"});
 | 
			
		||||
                        });
 | 
			
		||||
                        f.on('end', function() {
 | 
			
		||||
                            delete(pay._msgid);
 | 
			
		||||
                            if (JSON.stringify(pay) !== oldmail) {
 | 
			
		||||
                                oldmail = JSON.stringify(pay);
 | 
			
		||||
                                node.send(pay);
 | 
			
		||||
                                node.log('received new email: '+pay.topic);
 | 
			
		||||
                            }
 | 
			
		||||
                            else { node.log('duplicate not sent: '+pay.topic); }
 | 
			
		||||
                            //node.status({fill:"green",shape:"dot",text:"ok"});
 | 
			
		||||
                            node.status({});
 | 
			
		||||
                            imap.end();
 | 
			
		||||
                        });
 | 
			
		||||
                    if (err) {
 | 
			
		||||
                        node.status({fill:"red",shape:"ring",text:"fetch folder error"});
 | 
			
		||||
                        node.error("Failed to fetch folder "+node.box,err);
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        node.log("you have achieved inbox zero");
 | 
			
		||||
                        //node.status({fill:"green",shape:"dot",text:"ok"});
 | 
			
		||||
                        node.status({});
 | 
			
		||||
                        imap.end();
 | 
			
		||||
                        if (box.messages.total > 0) {
 | 
			
		||||
                            var f = imap.seq.fetch(box.messages.total + ':*', { markSeen:true, bodies: ['HEADER.FIELDS (FROM SUBJECT DATE TO CC BCC)','TEXT'] });
 | 
			
		||||
                            f.on('message', function(msg, seqno) {
 | 
			
		||||
                                node.log('message: #'+ seqno);
 | 
			
		||||
                                var prefix = '(#' + seqno + ') ';
 | 
			
		||||
                                msg.on('body', function(stream, info) {
 | 
			
		||||
                                    var buffer = '';
 | 
			
		||||
                                    stream.on('data', function(chunk) {
 | 
			
		||||
                                        buffer += chunk.toString('utf8');
 | 
			
		||||
                                    });
 | 
			
		||||
                                    stream.on('end', function() {
 | 
			
		||||
                                        if (info.which !== 'TEXT') {
 | 
			
		||||
                                            var head = Imap.parseHeader(buffer);
 | 
			
		||||
                                            if (RED.settings.verbose) { node.log(head); }
 | 
			
		||||
                                            pay.from = head.from[0];
 | 
			
		||||
                                            pay.topic = head.subject[0];
 | 
			
		||||
                                            pay.date = head.date[0];
 | 
			
		||||
                                            if (head.hasOwnProperty("to")) { pay.to = head.to; }
 | 
			
		||||
                                            if (head.hasOwnProperty("cc")) { pay.cc = head.cc; }
 | 
			
		||||
                                            if (head.hasOwnProperty("bcc")) { pay.bcc = head.bcc; }
 | 
			
		||||
                                        } else {
 | 
			
		||||
                                            var parts = buffer.split("Content-Type");
 | 
			
		||||
                                            for (var p = 0; p < parts.length; p++) {
 | 
			
		||||
                                                if (parts[p].indexOf("text/plain") >= 0) {
 | 
			
		||||
                                                    pay.payload = parts[p].split("\n").slice(1,-2).join("\n").trim();
 | 
			
		||||
                                                }
 | 
			
		||||
                                                else if (parts[p].indexOf("text/html") >= 0) {
 | 
			
		||||
                                                    pay.html = parts[p].split("\n").slice(1,-2).join("\n").trim();
 | 
			
		||||
                                                } else {
 | 
			
		||||
                                                    pay.payload = parts[0];
 | 
			
		||||
                                                }
 | 
			
		||||
                                            }
 | 
			
		||||
                                            //pay.body = buffer;
 | 
			
		||||
                                        }
 | 
			
		||||
                                    });
 | 
			
		||||
                                });
 | 
			
		||||
                                msg.on('end', function() {
 | 
			
		||||
                                    //node.log('Finished: '+prefix);
 | 
			
		||||
                                });
 | 
			
		||||
                            });
 | 
			
		||||
                            f.on('error', function(err) {
 | 
			
		||||
                                node.warn('fetch message error: ' + err);
 | 
			
		||||
                                node.status({fill:"red",shape:"ring",text:"fetch message error"});
 | 
			
		||||
                            });
 | 
			
		||||
                            f.on('end', function() {
 | 
			
		||||
                                delete(pay._msgid);
 | 
			
		||||
                                if (JSON.stringify(pay) !== oldmail) {
 | 
			
		||||
                                    oldmail = JSON.stringify(pay);
 | 
			
		||||
                                    node.send(pay);
 | 
			
		||||
                                    node.log('received new email: '+pay.topic);
 | 
			
		||||
                                }
 | 
			
		||||
                                else { node.log('duplicate not sent: '+pay.topic); }
 | 
			
		||||
                                //node.status({fill:"green",shape:"dot",text:"ok"});
 | 
			
		||||
                                node.status({});
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                        else {
 | 
			
		||||
                            node.log("you have achieved inbox zero");
 | 
			
		||||
                            //node.status({fill:"green",shape:"dot",text:"ok"});
 | 
			
		||||
                            node.status({});
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    imap.end();
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
            node.status({fill:"grey",shape:"dot",text:"connecting"});
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user