<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[The webmail portal at /portal]]></title><description><![CDATA[<p dir="auto"><code>/portal</code> is the self-service webmail hMailServer serves out of its REST listener. A mailbox owner signs in with their own address and password and gets folders, search, compose, drafts, flags and inline images. It is not a calendar and not a groupware suite. 6.3.3 added CardDAV for the account's address book, but that is served on the web services HTTPS listener, not this one.</p>
<p dir="auto"><strong>It is compiled into the binary.</strong> There is no web root to deploy and no file to lose. At 6.3.3 the page is <code>Portal.html</code> and <code>Portal.js</code>, embedded at build time. So if the Control Deck answers and the portal does not, an absent file is not the cause. Check you are asking for <code>/portal</code> exactly, because the server answers that path and nothing below it, and check no proxy is rewriting it. <a href="https://www.progressiverobot.com/hmailserver-documentation/#3614-troubleshooting" rel="nofollow ugc">36.14</a> has the rest of the symptom table.</p>
<p dir="auto"><strong>It fetches nothing externally.</strong> No font, no image, no stylesheet, no script from a CDN. Its Content-Security-Policy is <code>default-src 'none'; script-src 'self'; style-src 'unsafe-inline'; img-src data:; connect-src 'self'; frame-src 'self'; form-action 'none'; frame-ancestors 'none'; base-uri 'none'</code>. Note <code>img-src data:</code>, which permits no image from any host, including this one. A sender's HTML is never merged into the page. It goes into an iframe sandboxed without <code>allow-scripts</code> and without <code>allow-same-origin</code>, under its own policy of <code>img-src data:</code>, so a remote tracking pixel stays in the markup and is blocked. Opening a message tells its sender nothing, and there is no setting that changes that. <a href="https://www.progressiverobot.com/hmailserver-documentation/#3610-how-inline-images-work-and-why" rel="nofollow ugc">36.10</a> explains why the obvious design cannot work.</p>
<p dir="auto"><strong>It is not an administration interface.</strong> Everything the portal does is under <code>/api/v1/me/</code>, and those routes answer to an account's own credentials and to nothing else. The administrator password is refused on every one of them, and so is an API key. Administration is the other page, the Control Deck at <code>/</code>. Both sit on one listener behind one switch, <code>RestApiPort</code>, so exposing one exposes the other. If mailbox owners reach <code>/portal</code> from the internet, split the surfaces at a reverse proxy: <code>/portal</code>, <code>/portal.js</code> and <code>/api/v1/me/*</code> public, <code>/api/v1/session</code> public because both pages sign in through it, and <code>/</code> plus everything else under <code>/api/v1/</code> on the internal network. <a href="https://www.progressiverobot.com/hmailserver-documentation/#3613-deploying-them-safely" rel="nofollow ugc">36.13</a></p>
<p dir="auto"><strong>IMAP clients are unaffected.</strong> The portal is another client against the same store. A flag change requires the rights <code>STORE</code> requires, and every IMAP session on the folder is told. A move is IMAP <code>MOVE</code>: a copy with a new UID, then the original expunged. Folder create, rename and delete run IMAP's checks in IMAP's order and refuse with IMAP's own sentences. The new-mail probe reads the cached per-folder collection that IMAP, POP3 and delivery already share, so polling opens no message file. Outlook, Thunderbird, Apple Mail and phones carry on unchanged, and Roundcube pointed at the IMAP port remains a reasonable choice.</p>
<p dir="auto">Full reference: <a href="https://www.progressiverobot.com/hmailserver-documentation/#366-the-portal-what-a-user-gets" rel="nofollow ugc">36.6 The portal: what a user gets</a>.</p>
]]></description><link>https://www.hmailserver.co.uk/topic/28191/the-webmail-portal-at-portal</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 04:09:23 GMT</lastBuildDate><atom:link href="https://www.hmailserver.co.uk/topic/28191.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2026 01:30:00 GMT</pubDate><ttl>60</ttl></channel></rss>