diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/DottedLine.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/DottedLine.gif new file mode 100644 index 00000000..c84ea2e8 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/DottedLine.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperBase.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperBase.gif new file mode 100644 index 00000000..34c5d31e Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperBase.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTop.gif b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTop.gif new file mode 100644 index 00000000..2e22e0de Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/ROMCache/PaperTop.gif differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js index 29dc3928..3b68f1dc 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/listmail.js @@ -62,7 +62,8 @@ if (!intro_seen && !request_headers.query.intro_seen) { message_list_string = "No new mail messages for "; } else { if (total_unread_message_count > 0) { - message_list_string = total_unread_message_count + " new mail message" + ((total_message_count != 1) ? 's' : '') + ", " + total_message_count + " mail message" + ((total_message_count != 1) ? 's' : '') + " for "; + message_list_string = total_unread_message_count + " new mail message" + ((total_message_count != 1) ? 's' : ''); + if (total_message_count - total_unread_message_count > 0) message_list_string += ", " + (total_message_count - total_unread_message_count) + " mail message" + (((total_message_count - total_unread_message_count) != 1) ? 's' : '') + " for "; } else { message_list_string = total_message_count + " mail message" + ((total_message_count != 1) ? 's' : '') + " for "; } @@ -282,7 +283,6 @@ ${username}@${minisrv_config.config.service_name} var message = message_list[k]; var message_font_open = ""; var message_font_close = ""; - console.log(message); if (message.unread) { message_font_open = ``; message_font_close = "" diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js index 23ba6761..fe3eb0e8 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/readmail.js @@ -229,7 +229,7 @@ From: `; if (message.from_name != message.from_addr) { - data += `${html_entities.encode(message.from_addr)}(${html_entities.encode(message.from_name)})`; + data += `${html_entities.encode(message.from_addr)} (${html_entities.encode(message.from_name)})`; } else { data += `${html_entities.encode(message.from_addr)}`; } diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js index e7504c23..9110f618 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-mail/sendmail.js @@ -28,22 +28,33 @@ if (!intro_seen && !request_headers.query.intro_seen) { 'noback': true, }).getURL(); + if (request_headers.query.sendoff == "Send") { + var from_addr = address; + var to_addr = request_headers.query.message_to; + var msg_subject = request_headers.query.message_subject; + var msg_body = request_headers.query.message_body; + var to_name = request_headers.query.whatever_webtv_sends_this_as || null; + var signature = ssid_sessions[socket.ssid].getSessionData("subscriber_signature") || null; + var messagereturn = ssid_sessions[socket.ssid].mailstore.sendMessageToAddr(from_addr, to_addr, msg_body, msg_subject, userdisplayname, to_name, signature); + if (messagereturn !== true) { + var errpage = wtvshared.doErrorPage(400, messagereturn); + headers = errpage[0]; + data = errpage[1]; + } else { + headers = `300 OK +wtv-expire: wtv-mail:/listmail +Location: wtv-mail:/listmail`; + } + } else { - headers = `200 OK + headers = `200 OK Content-type text/html`; - data = ` - - - + data = ` + + + -Write an e-mail message +Write a message - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Mail list +
+
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Address +
+
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Photo +
+
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Recording +
+
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Erase +
+
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Spelling +
+
+
+
+ +
+ +
+ +
+ + + +
+ + + + +
+
Help +
+
+
+
+ +
+ +
+ +
+
+
+
+ + + + +
+
+ + + + + +Write a message + + + +
- - - +
-
- + - -
+ + +
- -
- - - - - -
- - - - - - - - -
-
- - - - -
-
Mail list -
-
-
-
- - - - -
-
Address -
-
-
-
- - - - -
-
Photo -
-
-
-
- - - - - -
-
Recording -
-
-
-
- - - - -
-
Erase -
-
-
-
- -
- - - - - - -
- -
- -
- - -
- - - - - -
-
- - -
- - -
- - - -Write an e-mail message - - - - -
-
-
- - -
- - -
- - - - -
-
- - -
- - - - - + - + - + - + - + - + + +
-From:  - - - + -
+ + + + + + + + + + + + + + + +
+ +From:  + + ${address} -
-(${userdisplayname}) +(${userdisplayname})
- + + +
+
-To:  - + + +
+ +To:  +
- + + +
+
-Subject:  - + + +
+ +Subject:  +
- + + +
+
+ + +
+ +
+growable> + +
+
-`; - if (!ssid_sessions[socket.ssid].getSessionData("subscriber_signature") || ssid_sessions[socket.ssid].getSessionData("subscriber_signature") == "") { - data += `
`; - } else { - data += ` Disable Signature`; - } - data += ` + + + +
+ + + +
+ +
`; + if (!ssid_sessions[socket.ssid].getSessionData("subscriber_signature") || ssid_sessions[socket.ssid].getSessionData("subscriber_signature") == "") { + data += `
`; + } else { + data += ` Disable Signature`; + } + data += `
@@ -334,4 +486,5 @@ USESTYLE NOARGS> `; + } } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/WTVMail.js b/zefie_wtvp_minisrv/WTVMail.js index d34465de..e16a6769 100644 --- a/zefie_wtvp_minisrv/WTVMail.js +++ b/zefie_wtvp_minisrv/WTVMail.js @@ -228,13 +228,23 @@ class WTVMail { var self = this; var files = this.fs.readdirSync(mailbox_path) .map(function (v) { + var message_data_raw = null; + var message_date = null; + var message_path = mailbox_path + self.path.sep + v; + if (self.fs.existsSync(message_path)) message_data_raw = self.fs.readFileSync(message_path); + if (message_data_raw) { + var message_data = JSON.parse(message_data_raw); + if (message_data) message_date = message_data.date; + } + var message_date_ret = (message_date) ? message_date : self.fs.statSync(mailbox_path + self.path.sep + v).mtime.getTime(); + self.fs.statSync(mailbox_path + self.path.sep + v).mtime.getTime() return { name: v, - time: self.fs.statSync(mailbox_path + self.path.sep + v).mtime.getTime() + time: message_date_ret }; }) .sort(function (a, b) { - if (reverse_sort) return b.time - a.time; + if (!reverse_sort) return b.time - a.time; else return a.time - b.time; }) .map(function (v) { @@ -289,7 +299,6 @@ class WTVMail { checkUserExists(username, directory = null) { // returns the user's ssid, and user_id and userid in an array if true, false if not - var username_match = false; var search_dir = this.minisrv_config.config.SessionStore; var return_val = false; var self = this; @@ -299,17 +308,15 @@ class WTVMail { return_val = self.checkUserExists(username, search_dir + self.path.sep + file); } if (!file.match(/.*\.json/ig)) return; - if (username_match) return; try { var temp_session_data_file = self.fs.readFileSync(search_dir + self.path.sep + file, 'Utf8'); var temp_session_data = JSON.parse(temp_session_data_file); if (temp_session_data.subscriber_username.toLowerCase() == username.toLowerCase()) { - username_match = true; - return_val = search_dir.replace(this.minisrv_config.config.SessionStore + self.path.sep, '').replace("user",'').split(self.path.sep); + return_val = search_dir.replace(this.minisrv_config.config.SessionStore + self.path.sep, '').replace("user", '').split(self.path.sep); + return_val.push(temp_session_data.subscriber_name); } } catch (e) { console.error(" # Error parsing Session Data JSON", file, e); - username_match = true; } }); return return_val; @@ -320,18 +327,19 @@ class WTVMail { if (user_data) { var user_wtvsession = new this.WTVClientSessionData(this.minisrv_config, user_data[0]); user_wtvsession.user_id = user_data[1]; - var user_mailstore = new WTVMail(this.minisrv_config, ssid, user_wtvsession) + var user_mailstore = new WTVMail(this.minisrv_config, user_wtvsession) return user_mailstore; } return false; } sendMessageToAddr(from_addr, to_addr, msgbody, subject = null, from_name = null, to_name = null, signature = null) { - if (!to_addr.indexOf('@')) { - return "The m-mail address " + to_addr + " is not a valid m-mail address.

An m-mail address should look like:
: zefie@ZefieTV"; - } + if (!to_addr) return "You must type a destination address for your message."; + + + if (to_addr.indexOf('@') === -1) to_addr += "@"+this.minisrv_config.config.service_name; var username = to_addr.split("@")[0]; - var dest_minisrv = to_addr.split("@")[1]; + var dest_minisrv = to_addr.split("@")[1] || this.minisrv_config.config.service_name; // local only for now if (dest_minisrv.toLowerCase() !== this.minisrv_config.config.service_name.toLowerCase()) { @@ -340,10 +348,15 @@ class WTVMail { // find user if local if (dest_minisrv.toLowerCase() === this.minisrv_config.config.service_name.toLowerCase()) { - var dest_user_mailstore = getUserMailstore(to_addr); + var dest_user_mailstore = this.getUserMailstore(username); // user does not exist if (!dest_user_mailstore) return "The user " + username + " does not exist on MiniSrv " + dest_minisrv + ""; + if (!to_name) { + var userExistsData = this.checkUserExists(username); + to_name = userExistsData[2]; + } + // check if the destination user's Inbox exists yet if (!dest_user_mailstore.mailboxExists(0)) { // mailbox does not yet exist, create it @@ -352,7 +365,7 @@ class WTVMail { if (mailbox_exists) dest_user_mailstore.createWelcomeMessage(); } // if the mailbox exists, deliver the message - if (dest_user_mailstore.mailboxExists(0)) createMessage(0, from_addr, to_addr, msgbody, subject, from_name, to_name, signature); + if (dest_user_mailstore.mailboxExists(0)) this.createMessage(0, from_addr, to_addr, msgbody, subject, from_name, to_name, signature); else return "There was an internal error sending the message to " + to_addr + ". Please try again later"; // clean up @@ -369,12 +382,12 @@ class WTVMail { if (this.checkMessageIdSanity(messageid)) { if (this.mailstoreExists()) { this.fs.readdirSync(this.mailstore_dir).every(mailbox => { - if (mailboxid) return false; - this.fs.readdirSync(this.mailstore_dir + self.path.sep + mailbox).every(file => { - var regexSearch = ".*" + this.msgFileExt; + if (mailboxid) return false; + self.fs.readdirSync(self.mailstore_dir + mailbox).every(file => { + var regexSearch = messageid + self.msgFileExt; var re = new RegExp(regexSearch, "ig"); if (!file.match(re)) return true; - if (file.indexOf(messageid) !== -1) mailboxid = mailbox; + mailboxid = mailbox; return false; }); return true; @@ -386,6 +399,7 @@ class WTVMail { getMessageByID(messageid) { var mailbox_name = this.getMessageMailboxId(messageid); + console.log(mailbox_name); if (!mailbox_name) return false; var mailboxid = this.mailboxes.findIndex((value) => value == mailbox_name);