socket.error: [Errno 13] Permission denied when creating a fake email server socket.error: [Errno 13] Permission denied when creating a fake email server flask flask

socket.error: [Errno 13] Permission denied when creating a fake email server


In unix (Linux, Mac OS X, BSD etc) systems, ports less than 1024 can not be bound to by normal users, only the root user can bind to those ports.

To get around this, you could run your python application as root (by using sudo), however this is not preferable. Is it possible instead to get your Flask application to talk to localhost on a higher port, say 2525? You would then need to modify the command you are using to start the smtp server to bind on port 2525 rather than 25.


If you are doing this as an exercise, then @solarnz has the right approach. If however, you need this done for work there is a far better solution in mailcatcher:

MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface. Run mailcatcher, set your favourite app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server, then check out http://127.0.0.1:1080 to see the mail that's arrived so far.

This is a program designed especially for developers whose apps need a mail server for testing but they don't want to set one up.

The great bonus is that it comes with a web interface to view messages sent by your application:

mailcatcher web interface


Execute program with root or sudo previliages, but as suggested above this is not recommended,

so setup your service on port >= 1024 and then setup reverse proxy for your service, or

redirect all traffice from port 25 to your service port,

For example :

/sbin/iptables -t nat -I PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 2525