# SQL: Add a mail alias account

Warning

- This document is applicable to iRedMail-0.9.7 and later releases.
- Here's doc for iRedMail-0.9.6 and earlier releases.

## Create mail alias account with iRedAdmin-Pro

With iRedAdmin-Pro, you can easily add mail alias account by click menu: `Add -> Alias` in main navigation bar.

## Create mail alias account with SQL command line

To create an mail alias account, you need to add SQL records in 2 sql tables. for example: create a mail alias account `alias@mydomain.com` and forward emails to two addresses `someone@gmail.com` and `someone@test.com`:

    sql> USE vmail;

    -- Create mail alias account
    sql> INSERT INTO alias (address, domain, active)
                    VALUES ('alias@mydomain.com', 'mydomain.com', 1);

    -- Forward email to 'someone@gmail.com'
    sql> INSERT INTO forwardings (address, forwarding,
                                  domain, dest_domain,
                                  is_list, active)
                          VALUES ('alias@mydomain.com', 'someone@gmail.com',
                                  'mydomain.com', 'gmail.com',
                                  1, 1);

    -- Forward email to 'someone@test.com'
    sql> INSERT INTO forwardings (address, forwarding,
                                  domain, dest_domain,
                                  is_list, active)
                          VALUES ('alias@mydomain.com', 'someone@test.com',
                                  'mydomain.com', 'test.com',
                                  1, 1);

NOTES:

- Please always use lower cases for email addresses.
- If destination address is a mail user under domain hosted on localhost, it must exist. Otherwise emails sent to alias account will be bounced after expanded to destination addresses.

## Access policy

Attention

Access restriction requires iRedAPD plugin `sql_alias_access_policy`, please make sure it's enabled in iRedAPD config file `/opt/iredapd/settings.py`.

You can restrict which senders are allowed to send email to this mail alias account by adding proper policy name in SQL column `alias.accesspolicy`. For example:

    sql> UPDATE alias SET accesspolicy='domain' WHERE address='alias@mydomain.com';

Available access policies:

Access Policy Name | Comment
--- | ---
`public` | no restrictions
`domain` | all users under same domain are allowed to send email to this mail alias account.
`subdomain` | all users under same domain and all sub-domains are allowed to send email to this mail alias account.
`membersonly` | only members of this mail alias account are allowd.
`moderatorsonly` | only moderators of this mail alias account are allowed.
`membersandmoderatorsonly` | only members and moderators of this mail alias account are allowed.

### How to assign a moderator

Moderators are email addresses stored in SQL table `alias_moderators`. With iRedAPD-1.4.5 and later releases, it's ok to use `*@domain.com` as (one of) moderator for all users under mail domain 'domain.com'.

To assign user `someone@gmail.com` and `someone@outlook.com` as moderator of mail alias `alias@mydomain.com`:

    sql> INSERT INTO alias_moderators (address, moderator, domain, dest_domain)
                              VALUES ('alias@mydomain.com', 'someone@gmail.com', 'mydomain.com', 'gmail.com');

    sql> INSERT INTO alias_moderators (address, moderator, domain, dest_domain)
                              VALUES ('alias@mydomain.com', 'someone@outlook.com', 'mydomain.com', 'outlook.com');

## See also

- Create mailing list for OpenLDAP backend