{"id":11216,"date":"2025-09-24T19:16:26","date_gmt":"2025-09-24T18:16:26","guid":{"rendered":"https:\/\/phoenixgamedevelopment.com\/blog\/?p=11216"},"modified":"2025-10-12T13:24:15","modified_gmt":"2025-10-12T12:24:15","slug":"sillytavern-extension-email-checker","status":"publish","type":"post","link":"https:\/\/phoenixgamedevelopment.com\/blog\/sillytavern-extension-email-checker\/","title":{"rendered":"SillyTavern Extension: Email Checker"},"content":{"rendered":"\n<p>I have completed the first release of my SillyTaven Extension.<\/p>\n\n\n\n<p>The purpose of the extension is simply to connect to a users email inbox and retrieve the most recent number of emails specified by the user.<\/p>\n\n\n\n<p>I am not hugely experienced in nodeJS\/javascript, or with SillyTavern extensions, so the code might be a little rough, but I didn&#8217;t see any other extension out there that does this, and I needed this functionality for my own purposes, so I thought I would release it to the community as well.<\/p>\n\n\n\n<p>I intend to add more features in the future, such as the ability to search for specific emails, (By sender, date, search string, etc).<\/p>\n\n\n\n<p>The extension implements a simple websocket server, and uses imapflow to get the emails.<\/p>\n\n\n\n<p>Due to how github works, I had to upload the client and server folders separately.<br><br>The server folder is <a href=\"https:\/\/github.com\/PhoenixGameDevelopment\/SillyTavern-EmailChecker-Server\" title=\"\">HERE<\/a>, and the client folder is <a href=\"https:\/\/github.com\/PhoenixGameDevelopment\/SillyTavern-EmailChecker-Client\" title=\"\">HERE<\/a>.<\/p>\n\n\n\n<p>The readme is below (The readme is also on the github page).<\/p>\n\n\n\n<p>&#8211;<\/p>\n\n\n\n<p>ST-EmailChecker is a simple client\/server extension for SillyTavern that allows an LLM to connect to a user&#8217;s inbox and download the most recent emails to the LLM.<\/p>\n\n\n\n<p>The emails are stripped of HTML and hyperlinks (Only the message body is returned) and the emails are added to the LLM as &#8220;reasoning&#8221; (Using reasoning-set). This prevents large blocks of text from spamming the chat window.<\/p>\n\n\n\n<p>The purpose of this extension is to allow an LLM to function as a digital assistant\/secretary, checking for important emails, drafting replies, summarising, etc, etc.<\/p>\n\n\n\n<p>In the future, I may add the ability to search for specific strings in emails, or for emails from specific people, search for only unread emails, etc.<\/p>\n\n\n\n<p>If the emails appear to be truncated in SillyTavern, make sure that your &#8220;Response (Tokens)&#8221; is set high enough in AI response configuration.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Usage:<\/p>\n\n\n\n<p>Download the code (You will need both the SERVER and CLIENT repos).<\/p>\n\n\n\n<p>You should have two folders:<\/p>\n\n\n\n<p>emailcheckerserver_git<br>emailcheckerclient_git<\/p>\n\n\n\n<p>Place BOTH of these folders in your SillyTavern\/data\/default-user\/extensions\/ directory.<\/p>\n\n\n\n<p>Open the folder &#8220;emailcheckerserver_git&#8221;.<\/p>\n\n\n\n<p>At the top of the script, you will need to set the hostname, username, and password for your email account.<\/p>\n\n\n\n<p>Now, run:<\/p>\n\n\n\n<p>Node index.js in a command window.<\/p>\n\n\n\n<p>You may need to run:<\/p>\n\n\n\n<p>npm install imapflow<\/p>\n\n\n\n<p>When successful, you should see:<\/p>\n\n\n\n<p>EmailReader: Server Module Loaded Server started on port 3000<\/p>\n\n\n\n<p>Finally, in &#8220;emailcheckerclient_git&#8221;, set the IP address of your server at the top of the script.<\/p>\n\n\n\n<p>If you are running sillytavenr locally, you do not need to do anything.<\/p>\n\n\n\n<p>However, if you are connecting to a LAN server, enter the IP of the server in this script (Without the port).<\/p>\n\n\n\n<p>The client will show up as an extension in sillytavern as &#8220;Email Checker&#8221;.<\/p>\n\n\n\n<p>To use, simply click on the down arrow next to &#8220;Email Checker&#8221;, set the number of emails you wish to return, and click &#8220;Run Email Check&#8221;.<\/p>\n\n\n\n<p>For any questions or comments, I can be contacted at:<\/p>\n\n\n\n<p><a href=\"mailto:contact@phoenixgamedevelopment.com\">contact@NOSPAM.phoenixgamedevelopment.com<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n\n<!-- wp:themify-builder\/canvas \/-->","protected":false},"excerpt":{"rendered":"<p>I have completed the first release of my SillyTaven Extension. The purpose of the extension is simply to connect to a users email inbox and retrieve the most recent number of emails specified by the user. I am not hugely experienced in nodeJS\/javascript, or with SillyTavern extensions, so the code might be a little rough, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11219,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37,12],"tags":[],"class_list":["post-11216","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-tutorials","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"aioseo_notices":[],"builder_content":"","_links":{"self":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/11216"}],"collection":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/comments?post=11216"}],"version-history":[{"count":6,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/11216\/revisions"}],"predecessor-version":[{"id":11248,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/11216\/revisions\/11248"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/media\/11219"}],"wp:attachment":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/media?parent=11216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/categories?post=11216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/tags?post=11216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}