Serviços de e-mail

O objetivo desta aula é compreender melhor os serviços oferecidos pelo sistema operacional para o suporte de e-mail, através de experiências utilizando clientes e servidores de e-mail.

Infraestrutura

A infra-estrutura de transporte de e-mail na Internet funciona através da interação entre diferentes agentes, como nos mostra a figura a seguir:

Os principais elementos desse trajeto são:

Protocolos

O serviço de e-mail usa vários protocolos para o transporte das mensagens entre remetentes e destinatários. O protocolo SMTP - Simple Mail Transfer Protocol é o protocolo responsável pelo envio do e-mail do cliente (MUA) ao servidor (MTA) e deste para outros servidores, até chegar ao servidor de destino.

Para consultar os e-mails armazenados no servidor, o cliente (MUA) utiliza os protocolos POP3 (Post-Office Protocol v3) e IMAP (Internet Message Access Protocol), cujas principais características são:

Normalmente o uso de POP3 é mais indicado quando os usuários são estáticos, ou seja, cada um possui seu computador e só acessa seu e-mail a partir dele. POP3 é um protocolo leve e que não mantém conexão constante com o servidor.

O uso de IMAP é indicado quando os usuários são “nômades”, usando vários computadores diferentes. Todavia, este protocolo exige mais recursos de CPU, disco e memória do servidor. A conexão IMAP normalmente é mantida enquanto durar a sessão de trabalho do usuário. Este protocolo é muito usado em ambientes de WebMail, para os acessos do servidor Web ao servidor de e-mail.

O Servidor de e-mail

Os servidores de e-mail (MTAs) funcionam segundo um princípio “store and forward”. Isso significa que um MTA recebe cada mensagem integralmente e a deposita em um diretório temporário, para somente então passá-la adiante, seja a um outro MTA ou ao MDA, se o destinatário for um usuário local. Cada transmissão fica registrada em uma linha Received do cabeçalho do e-mail. Esse procedimento garante a entrega da mensagem ao destinatário, sem possibilidade de perdas na transmissão.

O daemon sendmail é lançado durante a inicialização (boot) da máquina, e opera em modo mestre-escravo. O processo mestre ouve a porta 25/TCP; para cada pedido de conexão, ele cria um novo processo escravo para tratar do pedido.

Os principais arquivos e diretórios de um sistema de e-mail SMTP UNIX típico são:

O MDA é o processo que efetua a entrega dos e-mails aos usuários locais. No Linux normalmente é usado o procmail, que permite uma grande flexibilidade na entrega de e-mail, como:

A configuração do procmail é feita através do arquivo /etc/procmailrc (sistema) e $HOME/.procmailrc (usuário).

Formato do e-mail

Um e-mail é visto pelos processos e protocolos como um texto em formato ASCII padrão (texto puro, sem acentos, figuras ou caracteres de controle). Cada e-mail é composto de duas seções principais:

O cabeçalho é separado do corpo do e-mail por uma linha vazia (equivalente a “\n\n” em linguagem C):

header line
header line
...
header line
                    <--- (linha vazia separando cabeçalho e corpo)
body line
body line
body line
...

O exemplo a seguir ilustra um e-mail típico no formato em que ele é armazenado e transportado nos sistemas de e-mail:

Return-path: <frank210@switched.com>
Delivery-date: Sun, 15 Jun 2008 11:38:00 -0300
Received: from [64.12.138.210] (helo=imr-m08.mx.aol.com)
	by ppgia.pucpr.br with esmtp (PPGIA PUCPR)
	id 1K7tMl-00067J-55
	for <maziero@ppgia.pucpr.br>; Sun, 15 Jun 2008 11:38:00 -0300
Received: from  imo-d20.mx.aol.com (imo-d20.mail.aol.com [172.18.157.194])
	by imr-m08.mx.aol.com (v107.10) with ESMTP id RELAYIN9-a4855293039a; 
	Sun, 15 Jun 2008 10:37:36 -0400
Received: from frank210@switched.com
	by imo-d20.mx.aol.com (mail_out_v38_r9.4.) id t.ccf.32ac7044 (37097);
	Sun, 15 Jun 2008 10:37:30 -0400 (EDT)
Received: from User ([82.128.35.119]) by cia-db07.mx.aol.com (v121.5)
	with ESMTP id MAILCIADB077-90e948552919370;
	Sun, 15 Jun 2008 10:37:25 -0400
Reply-To: <drfrankmark@live.com>
From: "Mark"<frank210@switched.com>
Date: Sun, 15 Jun 2008 16:37:24 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="Windows-1251"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-AOL-IP: 172.18.157.194
To: maziero@ppgia.pucpr.br
Message-ID: <ccf.32ac7044.3586832a@UNKNOWN>
X-Spam-Flag:YES
X-Spam-Score: 5.1 (+++++)
X-Virus-Scanned: Verificado contra virus.
Subject: [***SPAM***] Second notice

THIS IS FOR YOUR ATTENTION. 

We wish to notify you again that you were listed as a beneficiary to the  total sum of
Ј10,600,000.00GBP (Ten Million Six Hundred Thousand British Pounds) in the codicil and
last testament of the deceased. (Name now withheld since this is our second letter to
you). We contacted you because you bear the surname identity and therefore can present
you as the beneficiary to the inheritance. 

We therefore reckoned that you could receive these funds as you are qualified by your
name identity. All the legal papers will be processed in your acceptance. In your 
acceptance of this deal, we request that you kindly forward to us your letter of 
acceptance; your current telephone and fax numbers and a forwarding address to enable 
us file necessary documents at our high court probate division for the release of this 
sum of money.

Please call me on +447045769387 so that we can get this done immediately.

Kind regards,
Frank Mark.

Algumas observações devem ser feitas sobre este exemplo:

Os principais campos do cabeçalho de um e-mail são:

Campo Significado
From Endereço de origem
To Endereço de destino principal
Cc Enviar cópia da mensagem para este endereço (Carbon-copy)
Bcc Enviar cópia da mensagem para este endereço (Blind carbon-copy), sem revelar quem são os outros destinários da mensagem; os destinatários receberão uma mensagem com a linha de cabeçalho “Cc: undisclosed recipients
Reply-To Endereço para onde enviar uma resposta
Return-path Endereço do remetente informado pelo último MTA
Received Indica um “salto” do e-mail entre servidores; as linhas Received são adicionadas ao cabeçalho do e-mail a cada operação de transferência entre MTAs ou MUA, de baixo para cima (ou seja, a primeira linha Received indica a última transferência realizada
Delivery-date Data da entrega do e-mail na caixa de entrada do destinatário
Date Data de envio do e-mail
Subject Assunto do e-mail
Message-ID Identificador do e-mail, gerado automaticamente pelo cliente onde o e-mail foi criado e enviado
MIME-Version Informações sobre anexos (vide próxima seção)
Content-Type Informações sobre anexos (vide próxima seção)
Content-Transfer-Encoding Informações sobre anexos (vide próxima seção)
X-* Campos de cabeçalho não normatizados, criados e mantidos por softwares específicos

A visualização do formato nativo de um e-mail pode ser feita facilmente em um cliente de e-mail: basta localizar a opção “exibir código fonte” ou similar.

Anexos

A necessidade de enviar arquivos através do e-mail levou à definição do padrão MIME (Multipurpose Internet Mail Extensions), no início dos anos 90. Esse padrão da Internet é definido nas RFCs 2045 a 2049, com extensões em outras RFCs mais recentes. Basicamente, o padrão MIME permite codificar arquivos com qualquer conteúdo em formato ASCII puro, para ser enviados pelos protocolos de e-mail convencionais. Os principais aspectos cobertos pelo padrão são:

Pelas normas, o cabeçalho de um e-mail deve indicar que seu corpo está codificado em formato MIME. Cada seção de um e-mail em formato MIME pode conter um arquivo, um texto ou outro e-mail (que pode, por sua vez, também estar em formato MIME). Dessa forma, um e-mail MIME pode ter uma estrutura multi-nível, como indica o diagrama abaixo:

Vejamos como ficaria um e-mail contendo um arquivo anexo envelope.gif :

From maziero@ppgia.pucpr.br Thu Jul 3 15:41:53 2003
Return-Path: <maziero@ppgia.pucpr.br>
Delivered-To: maziero@ppgia.pucpr.br
Received: from alias.acm.org (alias.acm.org [199.222.69.90])
    by hermes.ppgia.pucpr.br (Postfix) with ESMTP id A954E2B0048
    for <maziero@ppgia.pucpr.br>; Thu, 3 Jul 2003 15:41:48 -0300 (BRT)
Received: from hermes.ppgia.pucpr.br ([200.192.112.141])
    by alias.acm.org (ACM Email Forwarding Service) with ESMTP id COB73880
    for <cmaziero@acm.org>; Thu, 03 Jul 2003 14:41:43 -0400
Received: from floripa (ariadne.ppgia.pucpr.br [200.192.112.144])
    by hermes.ppgia.pucpr.br (Postfix) with SMTP id 7E3D32B0048
    for <cmaziero@acm.org>; Thu, 3 Jul 2003 15:41:39 -0300 (BRT)
From: "Carlos Maziero" <maziero@ppgia.pucpr.br>
To: <cmaziero@acm.org>
Subject: Um pequeno anexo
Date: Thu, 3 Jul 2003 15:43:51 -0300
Message-ID: <BEEBJCCJCFALIKEFFMNEMENDCFAA.maziero@ppgia.pucpr.br>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0004_01C34179.E6BD74D0"
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0)
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165

This is a multi-part message in MIME format.

------=_NextPart_000_0004_01C34179.E6BD74D0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Vamos enviar uma pequena imagem como teste...

Maziero

------=_NextPart_000_0004_01C34179.E6BD74D0
Content-Type: image/gif;
name="envelope.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="envelope.gif"

R0lGODlhFAAUAOcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O
Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh
ISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0
NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdH
R0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpa
WltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1t
bW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CA
gIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOT
k5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaam
pqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5
ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zM
zM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f
3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy
8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///yH+Dk1hZGUgd2l0aCBHSU1Q
ACH5BAEKAAEALAAAAAAUABQAAAhuAAMIHEiwoMGDCBMqXMiwoUIAECNKnBhRIMR/GDNq1AgxUgAA
/0BuHAkgUsmPGEWOTBkppEeVKjeWZIkyY0yWNl9yjDkzZ82QKXHC1AnUZs+iJ0HeXKn05dKVIZNS
nCrRY4BIWLNq3ZrVodeFAQEAOw==

------=_NextPart_000_0004_01C34179.E6BD74D0--

É importante ressaltar que todo o trabalho de codificação/decodificação dos anexos é efetuado pelos clientes de e-mail (MUAs). Os servidores (MTAs, MDAs e MAAs) continuam a tratar os e-mails como textos no padrão ASCII.

Vejamos outro exemplo, com um e-mail no formato HTML:

From jamhour@ppgia.pucpr.br Thu Jul 3 13:53:27 2003
Return-Path: <jamhour@ppgia.pucpr.br>
Delivered-To: maziero@ppgia.pucpr.br
Received: from darkhal (ftp.ppgia.pucpr.br [200.192.112.144])
    by hermes.ppgia.pucpr.br (Postfix) with ESMTP
    id 88C932B0049; Thu, 3 Jul 2003 13:53:27 -0300 (BRT)
From: "Edgard Jamhour" <jamhour@ppgia.pucpr.br>
To: <scalabrin@ppgia.pucpr.br>, <maziero@ppgia.pucpr.br>
Subject: Aula de Web
Date: Thu, 3 Jul 2003 13:56:43 -0300
Message-ID: <000d01c34184$14fd77f0$2d01200a@darkhal>
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_000E_01C3416A.EFB03FF0"
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook, Build 10.0.2627
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
Status: RO
X-Status: 
X-Keywords: 
X-UID: 43082

This is a multi-part message in MIME format.

------=_NextPart_000_000E_01C3416A.EFB03FF0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

A pedido dos senhores, estou mandando um email para confirmar a seguinte
altera=E7=E3o.

Hoje dia 03/06 (Quinta) o Maziero substituir=E1 o Scalabrin na aula de
Desenvolvimento Web.

No dia 16/06 (Quarta), o Scalabrin dar=E1 aula no lugar do Maziero,
reequilibrando o cronograma.

Edgard Jamhour,
PPGIA, PUC-PR - Pontif=EDcia Universidade Cat=F3lica do Paran=E1=20
Phone: +55 (41) 3301675 Phone: +55 (41) 3301669
http://www.ppgia.pucpr.br/~jamhour/
=20

------=_NextPart_000_000E_01C3416A.EFB03FF0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
6.0.4630.0">
<TITLE>Aula de Web</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=3D2 FACE=3D"Arial">A pedido dos senhores, estou mandando =
um email para confirmar a seguinte altera=E7=E3o.</FONT></P>

<P><FONT SIZE=3D2 FACE=3D"Arial">Hoje dia 03/06 (Quinta) o Maziero =
substituir=E1 o Scalabrin na aula de Desenvolvimento Web.</FONT></P>

<P><FONT SIZE=3D2 FACE=3D"Arial">No dia 16/06 (Quarta), o Scalabrin =
dar=E1 aula no lugar do Maziero, reequilibrando o cronograma.</FONT></P>

<P><B><FONT FACE=3D"Arial">Edgard Jamhour,</FONT></B>

<BR><B><FONT FACE=3D"Arial">PPGIA, PUC-PR - Pontif=EDcia Universidade =
Cat=F3lica do Paran=E1</FONT></B><FONT FACE=3D"Arial"><BR>
</FONT><B><FONT FACE=3D"Arial">Phone: +55 (41) 3301675=A0 Phone: +55 =
(41) 3301669</FONT></B>

<BR><B></B><A HREF=3D"http://www.ppgia.pucpr.br/~jamhour/"><B><U><FONT =
COLOR=3D"#0000FF" =
FACE=3D"Arial">http://www.ppgia.pucpr.br/~jamhour/</FONT></U></B><B></B><=
/A><B></B>

<BR><B><FONT FACE=3D"Arial">=A0</FONT></B>
</BODY></HTML>
------=_NextPart_000_000E_01C3416A.EFB03FF0--

Muitos vírus e worms usam características (e bugs) do suporte MIME para se propagar. Veja um e-mail com o worm Klez.H. O que parece estranho nele?

O MTA Postfix

O servidor de e-mail Postfix é conhecido por sua robustez, segurança, eficiência e facilidade de operação. Ele vem sendo distribuído junto à maioria das distribuições Linux, embora também possa ser facilmente instalado em outros ambientes UNIX. Suas principais características são:

Os principais arquivos/diretórios do Postfix em uma instalação Linux padrão são:

Alguns utilitários normalmente oferecidos junto com o Postfix: