Sim e não.
É certamente possível fazer um MTA falar SMTP sobre uma porta não padrão - mas somente se o servidor na outra extremidade estiver esperando isso. E você descobrirá que ninguém, nunca, escuta o SMTP na porta 80 - então seu servidor passaria a maior parte do tempo tentando falar com o Apache de alguém. Para troca de mensagens de servidor para servidor (MX), é a porta 25, fim da história.
Então você não pode apenas alterar a porta. Em vez de se conectar diretamente aos servidores de e-mail dos destinatários (de registros MX), o seu MTA precisaria retransmitir todos os e-mails através de um servidor específico que tenha sido configurado para aceitar o SMTP na porta 80.
Mas fazer isso é relativamente fácil, contanto que você tenha um segundo servidor que seja autorizado a enviar e-mails. Instale um MTA lá (por exemplo, OpenSMTPD ou Postfix), configure-o para escutar na porta 80 e para confiar no endereço IP do servidor de "origem" para retransmissão. (Como alternativa, em vez de uma lista de permissões de IP, a autenticação de nome de usuário / senha SMTP seria ainda melhor.)
Aqui está um exemplo do OpenSMTPD (não testado):
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
Da mesma forma, para SMTP autenticado:
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
(Certifique-se de realmente teste do servidor de retransmissão - seria Bad ™ se permitia que toda a internet transmitisse as mensagens, mesmo que eu não entendesse bem o porquê.
Uma vez que você tenha configurado, geralmente é necessária apenas uma única configuração no servidor de "origem" para retransmitir todos os e-mails - dependendo do MTA, a opção pode ser chamada de "host de retransmissão" ou "smarthost". sempre aceita um host: especificação de porta:
accept for any relay via "tls://relay.example.com:80"
Se a autenticação for necessária:
table relay-out-auth { "foo"="someuser:somepassword" }
accept for any relay via "tls+auth://[email protected]:587" auth <relay-out-auth>