5.4 KiB
Executable File
5.4 KiB
Executable File
id, aliases, tags
| id | aliases | tags |
|---|---|---|
| Etc Mail-server |
- *** id: Etc Mail-server aliases: [] tags: []
mysql -u mailuser -p mailserver
-- Add work subdomain if needed (optional)
INSERT INTO virtual_domains (name) VALUES ('liphlink.xyz');
-- Get domain IDs
SELECT id, name FROM virtual_domains;
-- Add aliases (replace domain_id with correct IDs)
-- Alias: work@liphlink.xyz -> phil@liphlink.xyz
INSERT INTO virtual_aliases (domain_id, source, destination)
VALUES (1, 'p.waibel@liphlink.xyz', 'phil@liphlink.xyz');
-- Alias: phil@work.liphlink.xyz -> phil@liphlink.xyz
INSERT INTO virtual_aliases (domain_id, source, destination)
VALUES (2, 'phil@work.liphlink.xyz', 'phil@liphlink.xyz');
-- Verify
SELECT * FROM virtual_aliases;
EXIT;
example setup for multiple users, aliases and mailboxes
-- Connect to database
USE mailserver;
-- 1. Create the actual mailboxes (real users)
INSERT INTO virtual_users (domain_id, email, password) VALUES
(4, 'phil@liphlink.xyz', '{SHA512-CRYPT}$6$jBiwDe/FJozZFzKV$D0GFlDuY4xLt.T9OavIBkEZ.7.q6KnRhWzHXCxwDQmaI4p3wkHwZEjc1e4.KllL1xeYzKARdDrqWl0ScHli05/'), -- Person 1's mailbox
(4, 'spam@liphlink.xyz', '{SHA512-CRYPT}$6$S8UOlG0ImhGWLwy5$evkDoMMh8NYGrQljiEV7iM6.0vBkMpq4Q/7ybpGW182w7aRtaFFWMnP9VYD1.PMuJosVEBDbE0SsC0xwR44851'), -- Person 1's spam mailbox
(4, 'home@liphlink.xyz', '{SHA512-CRYPT}$6$wD6/BL3lrikvipl4$TE6STLy6oOs3t2fAwAjfEPwB1gLhYrJbC08ZLUlz/qbikscnA3ssexDEzUjLIBHYP/SAYIg5B2RpMhYEdG0Ru/'), -- Person 1 & 2's shared mailbox
(4, 'miri@liphlink.xyz', '{SHA512-CRYPT}$6$ofVB6CU..zVerp/c$TTFn6YAt1zBHK4FMyUb2FWMqQMQAVuXPxOZzds6HlfHLCh1jbbDmDsE0MU7iNvSsoopV2OwNQTCCLXIQOUUld.'), -- Person 2's mailbox
(4, 'coaching@liphlink.xyz', '{SHA512-CRYPT}$6$wp.Bxin7aZjsJDwZ$OKzgR2Vu8puw7xUKvjHzqZgCgj0rfbjBzbdZcu8hxtRo0q9aHxUaL9.tYMGHGOMzELCteIMOo8oicg4EbpZ2E1'); -- Person 2's work mailbox
-- 2. Person 1's aliases (both forward to person1@liphlink.xyz)
INSERT INTO virtual_aliases (domain_id, source, destination) VALUES
(4, 'p.waibel@liphlink.xyz', 'phil@liphlink.xyz'),
(4, 'philipp.waibel@liphlink.xyz', 'phil@liphlink.xyz'),
(4, 'pw@liphlink.xyz', 'phil@liphlink.xyz');
-- 2. Person 1's spam adress (both forward to person1@liphlink.xyz)
INSERT INTO virtual_aliases (domain_id, source, destination) VALUES
(4, 'blue@liphlink.xyz', 'spam@liphlink.xyz'),
(4, 'red@liphlink.xyz', 'spam@liphlink.xyz');
-- 4. Person 2's aliases (all three forward to person2@liphlink.xyz)
INSERT INTO virtual_aliases (domain_id, source, destination) VALUES
(4, 'mh@liphlink.xyz', 'miri@liphlink.xyz'),
(4, 'miriam.herten@liphlink.xyz', 'miri@liphlink.xyz'),
(4, 'miriam@liphlink.xyz', 'miri@liphlink.xyz');
-- 2. Person 1's spam adress (both forward to person1@liphlink.xyz)
INSERT INTO virtual_aliases (domain_id, source, destination) VALUES
(4, 'zelgi@liphlink.xyz', 'home@liphlink.xyz');
INSERT INTO virtual_aliases (domain_id, source, destination) VALUES
(4, 'embodiment@liphlink.xyz', 'coaching@liphlink.xyz'),
(4, 'contact@liphlink.xyz', 'coaching@liphlink.xyz');
-- Forward to multiple recipients
INSERT INTO virtual_aliases (domain_id, source, destination)
VALUES (1, 'team@liphlink.xyz', 'phil@liphlink.xyz,alice@liphlink.xyz');
-- View everything
SELECT
'USERS' as type,
id,
email as address,
'MAILBOX' as note
FROM virtual_users
WHERE domain_id = 1
UNION ALL
SELECT
'ALIASES' as type,
id,
CONCAT(source, ' → ', destination) as address,
'FORWARDS TO' as note
FROM virtual_aliases
WHERE domain_id = 1
ORDER BY type, address;
Create Tables
-- Domains table
CREATE TABLE IF NOT EXISTS virtual_domains (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Users table
CREATE TABLE IF NOT EXISTS virtual_users (
id INT NOT NULL AUTO_INCREMENT,
domain_id INT NOT NULL,
password VARCHAR(200) NOT NULL,
email VARCHAR(120) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email (email),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Aliases table
CREATE TABLE IF NOT EXISTS virtual_aliases (
id INT NOT NULL AUTO_INCREMENT,
domain_id INT NOT NULL,
source VARCHAR(100) NOT NULL,
destination VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Show table contents
-- Show all domains
SELECT * FROM virtual_domains;
-- Show all users
SELECT * From virtual_users;
-- Show all aliases
SELECT * From virtual_aliases;
Passwords for mailboxes
phil@liphlink.xyz: Fqi5UAyr46e69fG
spam@liphlink.xyz: ANZ6JJPBiB7k1c7k
miri@liphlink.xyz: HORsyzL7jV7jQzP
home@liphlink.xyz: zjlWmau4u7b19MS
coaching@liphlink.xyz: roUHvaetocCWFmgY
Create password files
mkdir -p ~/.mail-passwords echo "Fqi5UAyr46e69fG" > ~/.mail-passwords/phil echo "ANZ6JJPBiB7k1c7k" > ~/.mail-passwords/spam chmod 600 ~/.mail-passwords/*
Update .mbsyncrc
sed -i 's|PassCmd "pass show mail/phil@liphlink.xyz"|PassCmd "cat ~/.mail-passwords/phil"|g' ~/.mbsyncrc sed -i 's|PassCmd "pass show mail/spam@liphlink.xyz"|PassCmd "cat ~/.mail-passwords/spam"|g' ~/.mbsyncrc
Test IMAP connection manually
openssl s_client -connect mail.liphlink.xyz:993 -quiet
Then type (use your password):
a LOGIN phil@liphlink.xyz Fqi5UAyr46e69fG b SELECT INBOX c FETCH 1:5 (FLAGS SUBJECT) d LOGOUT