2014-09-07 17 views
5

Próbuję utworzyć fałszywy serwer e-mail w ramach aplikacji Flask, aby wydrukować błędy na konsoli przy użyciu następującego skryptu. Jednak powoduje błąd. Jak mogę to naprawić?socket.error: [Errno 13] Odmowa uprawnień podczas tworzenia fałszywego serwera poczty elektronicznej

dpadmins-MacBook:microblog presentation$ python -m smtpd -n -c DebuggingServer localhost:25 

Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162,  in _run_module_as_main 
"__main__", fname, loader, pkg_name) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code 
    exec code in run_globals 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtpd.py", line 536, in <module> 
    (options.remotehost, options.remoteport)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtpd.py", line 285, in __init__ 
self.bind(localaddr) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/asyncore.py", line 342, in bind 
return self.socket.bind(addr) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth 
return getattr(self._sock,name)(*args) 
socket.error: [Errno 13] Permission denied 

Odpowiedz

22

W systemach typu unix (Linux, Mac OS X, BSD itp.), Porty mniejsze niż 1024 nie mogą być powiązane przez zwykłych użytkowników, tylko użytkownik root może powiązać te porty.

Aby obejść ten problem, można uruchomić aplikację python jako root (przy użyciu sudo), jednak nie jest to zalecane. Czy jest możliwe, aby twoja aplikacja Flask porozmawiała z localhostem na wyższym porcie, powiedzmy 2525? Następnie trzeba zmodyfikować polecenie, którego używasz, aby uruchomić serwer SMTP do wiązania na porcie 2525, a nie 25.

0

Uruchom program jako administrator. Port smtp jako dowolny port < = 1024 jest zarezerwowany dla systemu i nie może być używany przez zwykłych użytkowników.

3

Jeśli robisz to jako ćwiczenie, to @ Solarnz ma właściwe podejście. Jeśli jednak trzeba to zrobić do pracy jest znacznie lepszym rozwiązaniem w 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.

Jest to program zaprojektowany specjalnie dla programistów, których aplikacje potrzebują serwera poczty do testów, ale nie chcą, aby ustawić jeden w górę.

Wielką korzyścią jest to, że pochodzi on z interfejsu internetowego do wyświetlania komunikatów wysyłanych przez aplikację:

mailcatcher web interface

2

Execute program z root lub sudo previliages, ale jak zasugerowano powyżej nie jest to zalecane,

więc konfiguracja usługa na porcie> = 1024, a następnie ustawienie reverse proxy dla usługi lub

przekierować wszystkie traffice z portu 25 do usługi port

Na przykład:

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

SELinux może powodować ten problem .. I rozwiązać problemu przez przez "setenforce 0".

Powiązane problemy