Exhange: Como funciona o envio e recebimento?
Neste post explicarei como funciona o envio e recebimento de e-mail e o serviço de transporte do Exchange.
Toda vez que enviamos ou recebemos um e-mail, acontecem uma série de procedimentos no Exchange, antes da mensagem chegar a sua caixa de correio. Estes procedimentos variam dependendo por onde o e-mail está sendo enviado. Para melhor esclarecer isto, basicamente temos 3 tipos de tráfego de e-mails possíveis, Externo -> Interno, Interno -> Interno e Interno -> Externo e cada um deles com seu fluxo de e-mail.
Abaixo temos um gráfico com o funcionamento do fluxo de e-mail, vou tentar dissecar cada parte para entendermos melhor e depois explicarei os tipos de tráfego.
http://msexperts.blog.br/wp-content/uploads/2017/01/MailFlow.pngOBS: Os retângulos verdes são a representação dos passos no recebimento. Os retângulos laranjas, são do envio.
Pipeline de Transporte
Front End Transport Service
Começamos pelo Front End Transport Service, este serviço roda apenas no CAS e faz parte do primeiro hop de entrada de um e-mail na organização.
Este serviço tem as seguintes características:
- Faz parte do CAS e é responsável pelo recebimento e envio de e-mails (Envio é opcional: https://technet.microsoft.com/en-us/library/mt484155(v=exchg.160).aspx).
- No recebimento, ele é o primeiro hop, no envio ele é o último hop.
- Não possui uma base para armazenar os e-mails em uma fila.
- Possui o Hub Selector que seleciona qual o Transport Service com menor números de hops até o destino final ele deve repassar a mensagem.
- Importante citar que o Front End, não inspeciona conteúdo de e-mail e não se comunica diretamente com o Mailbox Transport Service.
Transport Service
O Transport Service é basicamente o coração no quesito transporte, ele é responsável por fazer o meio de campo entre o Mailbox Transport Service e o Front End, sempre escolhendo os melhores caminhos.
Continuando o fluxo de e-mail, após o Front End processar a mensagem, ele utiliza o Hub Selector para determinar qual Transport Service possui o menor número de hops até o destino final e repassa a mensagem para ele.
O Transport Service conta com um nível de complexidade bem maior, como podemos ver abaixo por suas características:
- Ele lida com todo o fluxo de e-mail SMTP na organização.
- Faz parte do Mailbox Server.
- Executa a categorização das mensagens (Mais sobre categorização abaixo no post).
- Executa inspeção de conteúdo.
Mailbox Transport Service
Como podemos ver no gráfico, este serviço é divido em dois, o Mailbox Transport Submission e o Mailbox Transport Delivery. De uma forma bem simplista, o Submission faz parte do fluxo de envio e o Delivery de recebimento.
Importante citar que o Mailbox Transport Service é o único que tem acesso a Database.
Vamos as características deste serviço:
- O Delivery recebe mensagens SMTP do Transport Service de algum Mailbox Server na organização.
- O Submission depois de captar uma mensagem para envio, entrega esta para o Transport Service.
- Assim como o Front End, o Mailbox Transport não possui uma fila.
- Ambos o Delivery e Submission acessam a caixa do usuário via RPC.
O envio
Agora que expliquei cada serviço e sua responsabilidade, vamos para um exemplo mais aprofundado e com passo a passo:
Algum usuário fora da sua organização (user@maildomain.test) envia um e-mail para dentro da sua organização (marchese@blog.br)
Esta mensagem é recebida pelo Front End Service pela porta 25.
Ele utiliza o Hub Selector para determinar qual o melhor Transport Service para repassar a mensagem.
O Front End efetua uma conexão na porta 25 ou 2525 do Transport Service e repassa a mensagem para ele.
Transport Service inicia seu fluxo inserindo a mensagem na fila de Submission para categorização.
A categorização inicia, caso no e-mail possua uma distribution list, ela efetuará a expansão desta distribution list para verificar cada um dos destinatários e efetuará a bifurcação, que é dividir a mensagem para cada um dos Mailbox Server aonde o destinatário se encontra.Uma imagem vale mais que mil palavras:http://msexperts.blog.br/wp-content/uploads/2017/01/Bifurcation.png
Após a expansão, a categorização determinar as rotas para repassar a mensagem.
Depois de efetuada a categorização, a mensagem é repassada para a Delivery Queue para ser repassada ao Mailbox Transport Service aonde estão os destinatários. Note que a mensagem pode ser processada em qualquer Transport Service, pois este consegue se conectar com qualquer Mailbox Transport na organização.
Assim que a mensagem é recebida (Via SMTP pela porta 475) pelo serviço de Mailbox Transport, este efetua uma conexão direta com o Store Drive da database e via RPC entrega a mensagem ao usuário.
O recebimento
O recebimento possui algumas diferenças, vamos verificar:
- O usuário marchese@blog.br do nosso exemplo anterior recebeu o e-mail do user@maildomain.test e decidiu respondê-lo, assim que ele clicar no enviar o Maibox Transport Submission pegará a mensagem do Store Driver, executará o Hub Selector para determinar qual o melhor Transport Service para utilizar (Podendo ser o seu local ou algum outro na organização.).
- Escolhido o melhor Transport Service, o Mailbox Transport Submission repassará a mensagem para ele.
- No Transport Service, assim como no envio, o primeiro a receber a mensagem é a fila de Submission, esta categorizará o e-mail (verificará os destinatários, se são internos, externos ou externos e internos) e determinará a melhor rota.
- No nosso caso, o envio é para um destinatário externo, então o Transport Service utilizará o correto conector de envio e enviará a mensagem diretamente para a internet.
Como podem perceber, o envio e recebimento é um processo bem complexo e olha que nem falamos sobre alta disponibilidade de e-mail (Safety Net, Shadow Queue). Espero que com este post fique mais fácil de entender como funciona.
Links úteis: