Setting up the PostfixMe App

1

Have a functioning PostfixMe API installation

You or your mail administrator must have already setup the PostfixMe API on their PostfixAdmin web service. Without the PostfixMe API, the PostfixMe App will be useless to you.

2

Install the PostfixMe app

The PostfixMe app is available on the Apple app store. Search for it by name and install it on your iOS device. The app requires iOS 18 or later.

3

Start the PostfixMe app

On first start, the app will need three inputs to sign you into the PostfixMe API:

  • Server URL: The URL of your PostfixAdmin web interface (e.g.: https://pfa.yourdomain.example) where the PostfixMe API is also installed. This is the same URL you would normally use to log directly into PostfixAdmin via web browser.
  • Mailbox: Your actual, real mailbox on the mail server (not one of your aliases). This is the account address you use when you setup your mail client to send and receive email; it is typically the full email address (e.g.: [email protected]).
  • Password: The password for that mailbox.

Setting up the PostfixMe API

This is all greatly simplified if you use Docker Compose and base your stack definition on the example provided with the PostfixMe API source. The steps below are just the main beats of the topical overview; refer to the API documentation for details.

1

Have a functioning Postfix mail server

You must already have a functioning Postfix mail server. If you don't have one, there are many tutorials online for setting up Postfix.

2

Deploy PostfixAdmin via Docker

PostfixMe requires PostfixAdmin for mailbox and alias management. The easiest way to get PostfixAdmin running is via the official Docker image running in a healthy Docker Compose stack. Follow the instructions in the PostfixAdmin documentation to deploy it and connect it to your Postfix server.

3

Apply the PostfixMe API database schema

The API requires several new tables to be added to your PostfixAdmin database (none of the existing tables are modified). Sample schema migration scripts are included in the example Docker Compose configuration and are shown to run automatically via the example Docker entrypoint.

4

Add the PostfixMe API Service

To your existing Docker Compose stack that runs PostfixAdmin, add the PostfixMe API service. Use the sample stack definition as guidance but tailor it to match your own choices (i.e.: you may not be using MariaDB for PostfixAdmin). Be sure to share the PostfixAdmin source code between the PostfixAdmin and PostfixMe API service containers (setup a shared volume between them and set the POSTFIXADMIN_SOURCE_PATH environment variable correctly for the PostfixMe API service). Set all other configuration environment variables as needed (see the API documentation for details).

5

Add TLS Encryption

Expose the PostfixMe API behind your reverse proxy (e.g.: Apache, nginx, Caddy, or Traefik) with a valid TLS certificate. The API reads the X-Forwarded-Proto header to enforce HTTPS. Configure your trusted proxy CIDR range via the TRUSTED_PROXY_CIDR environment variable. Note that the API will actively refuse non-TLS connections outside of development environments to protect your credentials and data in transit.

6

Open the app and enter your server URL

Install PostfixMe from the App Store. On first launch, enter your PostfixAdmin server URL (e.g., https://pfa.yourdomain.example). Log in with your mailbox credentials.

Frequently asked questions

Does PostfixMe work with GSuite / Google Workspace / ProtonMail / Fastmail?

No. PostfixMe only works with a self-hosted Postfix mail server running PostfixAdmin with the PostfixMe API extension. Hosted email services have their own APIs that PostfixMe does not support and has no plans to support.

What does the app do if I don't have a PostfixMe API server?

The app will not function without a valid server URL which points to a PostfixAdmin installation where the PostfixMe API has also been installed. On first launch, it prompts you to input this server URL. Without a reachable PostfixMe API endpoint, login will fail with a clear error message.

Why does the app require iOS 18 or later?

PostfixMe uses APIs and SwiftUI features introduced in iOS 18, including the adaptive search bar behavior (iOS 18 pins the search bar at the top; iOS 26 floats it at the bottom). Supporting older iOS versions would require significant UI compromises.

What about Google/Android mobile devices?

The PostfixMe author only uses Apple mobile devices. This is a passion project for no money, so non-Apple devices will not be officially supported. That said, the PostfixMe API doesn't care what the connecting device is so long as it handles TLS and JWT properly. So, if you want to build a Google/Andorid version of the app, have at it.

Can I use the app without biometrics?

Yes. Biometric authentication (Face ID / Touch ID) is optional and can be disabled in the app's Settings screen. You will be asked for your credentials at each login if biometrics are disabled.

I'm getting a "TLS required" error. What does that mean?

The PostfixMe API requires HTTPS in non-development deployments. If your API is deployed behind a reverse proxy (Apache, nginx, Caddy, Traefik), ensure the proxy is using a valid TLS certificate, is forwarding the X-Forwarded-Proto: https header, and that your TRUSTED_PROXY_CIDR is set correctly. For local development (localhost), TLS is not required.

Can I self-sign my TLS certificate?

The iOS app uses standard URLSession, which enforces certificate chain validation. Self-signed certificates will be rejected unless you install the certificate as a trusted root on the device (for development only). For production, use a certificate from a trusted CA (Let's Encrypt is free).

I lost access to my server. Are my alias configurations backed up?

Alias configurations live in your PostfixAdmin database on your server. The iOS app only displays and edits them; it is not a backup tool. Regular database backups are your responsibility as the server operator.

Does the app support multiple mail servers?

PostfixMe version 1.0 supports one server at a time. You log out from the Settings view at any time, which clears the current session, then log back in using a different server URL. There are no plans to support multiple servers simultaneously.

Why is the API licensed GPL-2.0 and not MIT or Apache?

GPL-2.0 was chosen to be compatible with the PostfixAdmin license. This also helps ensure that any modifications to the server-side code remain open source. You are free to deploy, modify, and use the API on your own infrastructure. You are not required to open-source the rest of your mail server configuration. You must however share back any modifications you make to the PostfixMe API code itself.

Get in touch

GitHub Issues

API issues, pull requests, technical defects. Questions, comments, and concerns.

GitHub Issues ↗

Response times are not guaranteed; this is not a business. There's no money in this. I'm just one guy sharing something I made so others with similar needs might benefit from my idea. GitHub issues are monitored but are rarely engaged. For urgent Apple App Store review blockers, mark your GitHub issue subject "URGENT: App Review"