Add email account to postfix

Have you tested whether the account can send mail?

There are a few ways of doing this, but the easiest is to telnet to port 25 (smtp) on your mailserver (try from the local console):

telnet localhost 25
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 myserver.com ESMTP Postfix
EHLO test.com
250-myserver.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test Message
Test
.
250 2.0.0 Ok: queued as 97B7D7640D0

If you see all those 250 OK messages and your message gets through to the test address, then the account is working fine.

If you get an error, then it will indicate where the problem is in the config. If you get an error after the MAIL FROM: command, then the user is not allowed to send mail at all.

If you get an error after the RCPT TO: command, then the user is not allowed to send mail to the test address.

If you get an error after the body of the mail, or the message never arrived, then check your maillog file. It is pretty useful to have another window with a live view of your maillog - tail -f /var/log/maillog will allow you to see what is happening on your mailserver as it happens. Very helpful when tracking things down.

You can also test by switching to the mailer user, and using the mail command to send a test message - view the maillog at the same time to see what happens.


Postfix is a kind of interface, that accepts mails, and dispatch them depending on their domain destination. Postfix does not have users.

If you need to create users, and thus - on Linux/Unix - local mail recipients, there is the command

useradd

Do a man useradd. This will create the user ; check the options, you may have to specify the home directory and/or create it. Then please follow this link.

Usually the default on Linux is that the local mail will be accepted by Postfix and stored into /var/mail/user where user is a user who exists locally on the server.

Postfix, if configured for accepting and routing external mail, will decide depending on the domain of the mail address (the part after the @) if it has to store it locally (eg user exists locally, no domain is specified or the domain matches the mydestination domains specified in main.cf), or forward it to a relay, depending on the default or the transport table.

Typically a domain not known will be forwarded to the default relay, or Postfix will manage to pass the mail to the destination server based on the DNS MX entries of the destination domain.


In Postfix, you can have a user that will be authorized to send emails without having an actual mailbox.

This user will only be used to perform the send email operation, but postfix does not check that the username matches the email address used to send the email (if you don't ask it too).

In clear, user 'mailer' can send email with a 'mail from' field at [email protected], [email protected], and so on... to anybody.

You can do that in two different way:

  1. If your postfix and your sending application are on the same machine (as in your example), set your postfix configuration as follow

    smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination

    mynetworks = 127.0.0.0/8

  2. If your client is on a different machine, setup SASL Authentication in postfix and set the restriction as follow

    smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

When your user 'mailer' will send a email, postfix will control its credential before authorizing the 'RCPT TO' command. If it matches, 'mailer' will be authorized to perform the operation with any 'RCPT TO' value: mailer can send emails to anybody. The MAIL FROM field isn't controlled, so you can put anything in there.