Sì e no.
È certamente possibile fare in modo che un MTA parli SMTP su una porta non standard, ma solo se il server dall'altra parte lo prevede . E scoprirai che nessuno, mai, ascolta SMTP sulla porta 80 , quindi il tuo server passerebbe la maggior parte del tempo a cercare di parlare con qualcuno di Apache. Per lo scambio di posta da server a server (MX), è la porta 25, fine della storia.
Quindi non puoi semplicemente cambiare la porta. Piuttosto, invece di connettersi direttamente ai server di posta dei destinatari (dai record MX), il tuo MTA dovrebbe inoltrare tutta la posta attraverso un server specifico che è stato configurato per accettare SMTP sulla porta 80.
Ma fare che è relativamente facile, finché si dispone di un secondo server che è consentito inviare la posta. Installare un MTA lì (ad esempio OpenSMTPD o Postfix), configurarlo per l'ascolto sulla porta 80 e per fidarsi dell'indirizzo IP del server "sorgente" per l'inoltro. (In alternativa, invece di una whitelist IP, l'autenticazione nome utente / password SMTP sarebbe ancora migliore.)
Ecco un esempio OpenSMTPD (non testato):
table relay-in-ip { "12.34.56.78" }
listen on 0.0.0.0 port 80 tls-require
listen on :: port 80 tls-require
accept from source <relay-in-ip> for any relay
Allo stesso modo, per SMTP autenticato:
table relay-in-auth { "someuser"="somepassword" }
listen on 0.0.0.0 port 80 tls-require auth <relay-in-auth> tag AUTHED
listen on :: port 80 tls-require auth <relay-in-auth> tag AUTHED
accept tagged AUTHED from any for any relay
(Assicurati di testare effettivamente il server di inoltro: sarebbe Bad ™ se consentisse all'intera Internet di inoltrare i messaggi senza autenticazione.
Una volta configurato, di solito è sufficiente una singola impostazione sul server "sorgente" per inoltrare tutta la posta - a seconda dell'MTA, l'opzione potrebbe essere denominata "relay host" o "smarthost" e quasi sempre accetta un host: specifica porta:
accept for any relay via "tls://relay.example.com:80"
Se è necessaria l'autenticazione:
table relay-out-auth { "foo"="someuser:somepassword" }
accept for any relay via "tls+auth://foo@smtp.gmail.com:587" auth <relay-out-auth>