python - Existe alguma forma de receber e-mail através do php ou em alguma outra linguagem de programação? - Stack Overflow em Português
Não sou um desenvolvedor profissional, eu sei que em php existe formas de envio de e-mail através do phpmailer(), eu gostaria de saber é se existe alguma forma de receber um e-mail através de domínio publico como gmail, outlook, yahoo etc..., ou se é somente em um servidor de e-mail proprio?
Atenciosamente, Guilherme Vargas
php python ajax .net
perguntada 18/08/18 às 15:37
Guilherme BittencourtGuilherme Bittencourt
Ou você usa a API destes serviços públicos para acessar o email. Ou você usa o imap do php php.net/manual/pt_BR/book.imap.php – Andrei Coelho 18/08/18 às 15:44
Sim, você pode escrever um programa para "receber um e-mail". E não, você não vai querer fazer isso dessa forma, já explico um pouco por quê. E Não, definitivamente, sua aplicação não pode receber um e-mail de um domínio já existente, e detido por outra entidade. Os domínios que você listou não são "públicos" - você pode ter confundido com "de conhecimento público" - mas google, dono do gmail.com, microsoft dona do outlool.com e yahoo, dona do yahoo.com são empresas privadas, donas desses respectivos domínios, da mesma forma que você pode registrar um domínio ".com";
Bom - detalhando um pouco mais, o "recebimento" de e-mails em si é feito pelo protocolo SMTP. Da mesma forma que um servidor Web pode responder a requisições HTTP, você pode escrever um programa que lide com sockets TCP/IP puros e implemente o protocolo de servidor de SMTP em cima dele. A especificação está aqui: https://tools.ietf.org/html/rfc5321
Claro, aí seu programa vai ter que estar em um servidor na internet, respondendo em um domínio próprio, como um servidor web, e e-mails terminaos em "@seudominio.com" serão encaminhados para o seu servidor. Se subir um servidor numa rede experimental, pode até encaminhar e-mail usando o endereço de ip da máquina onde está o servidor - seuemail@192.168.0.10 - por exemplo - a parte depois do "@" é um host de internet e funciona da mesma forma que o nome após o "http://" para web.
O programa que envia e-mails então tem implementado o lado do cliente do protocolo SMTP, assim como navegadores tem o lado cliente do protocolo HTTP - e faz uma conexão com seu servidor e envia os e-mails, que devem estar em formatos bem específicos, descritos em outros documentos de RFC (principalmente se tiverem anexos, lembrando que e-mail com texto rico também é um anexo).
Agora - como eu disse acima, isso não é o que você quer - seria até um rojeto legal implementar um servidor SMTP simples, mas as regras nos útlimos 30 anos de internet para um servidor de e-mail "respeitado" se complicaram muito, para diminuir o problema do Spam, e acrescentar camadas de proteção criptográfica.
o que deve servir para você
È na verdade implementar um cliente IMAP - você configura a conta de e-mail no servidor privado de sua preferência, dentre os que listou, e pega os dados para uma conexão "IMAP" ao mesmo - nesse caso, quem tem que ficar "ouvindo a internet o tempo todo" para ver se chega um e-mail, continua sendo o servidor de terceiros - você escreve um programa que funciona cmo um cliente IMAP, que não precisa ter um comportamento de servidor - no momento desejado ele se conecta ao servidor pelo protocolo de IMAP, e verifica se chegou alguma mensagem, consulta seus cabeçalhos, baixa, apaga, arquiva, como convier as mensagens existentes. O IMAP é um protoclo publico (isso sim, público) para fazer com e-mails as coisas que hoje cada empresa faz com sua API privada.
a especificação do IMAP está aqui: https://tools.ietf.org/html/rfc3501
A linguagem Python pelo menos tem na biblioteca padrão uma implementação de cliente de IMAP - basta fazer import imaplib e consultar a documentação: https://docs.python.org/3/library/imaplib.html - outras linguagens podem ter bibliotecas equivalentes, embutidas ou escritas por terceiros.
Vale lembrar que enquanto a biblioteca de IMAP vai te dar facilidades para se conectar ao servidor e baixar as mensagens de e-mail lá, manipular as mensagens de e-mail ainda pode ser complicado - como eu mencionei acima, hoje em dia as mensagens são escritas em geral contendo anexos, com o texto formatado como HTML, e etc... Então seu código ainda vai ter que dar conta de interpretar os cabeçalhos da mensagem corretamente - e se eles tiverem acentos no subject por exemplo, é uma volta a mais, com a RFC 5335, e depois extrair os anexos, que podem ser texto em html, ou simplesmente texto puro, mas acentuado com caractéres utf-8 - para isso você tem que implementar a decodificação do que está descrito na RFC 2045
respondida 18/08/18 às 16:08
Nossa. Faz tempo que não acessava o SO.pt, mas passou um dia e uma resposta trabalhosa como a sua nem mesmo algum UP recebeu. – Emerson Rocha 20/08/18 às 4:11
Faz parte do negócio! :-) – jsbueno 20/08/18 às 15:17
Sim, você pode obter os emails através da API nativa (já que mencionou phpmailer, creio que esteja trabalhando mais com php):
Pegar pastas ("INBOX"s) com PHP:
$config = '{servidor.com:143}';
$mbox = imap_open($config, "username", "password");
echo "<h1>Pastas:</h1>";
$folders = imap_listmailbox($mbox, $config, "*");
echo $folder . '<br>';
echo "Falha ao listar pastas<br>";
echo "<h1>Lista mensagens na INBOX</h1>";
echo $header . '<br>';
echo "Falha ao listar<br>";
Funções que deve usar para ler, baixar anexos, mover mensagens, filtrar mensagens:
Nota: "filtrar" é chamado de critéria, isso esta apenas parcialmente documentado no php.net, pois faz parte do protocolo IMAP então é mais provavel de encontrar todos "comandos" de filtro de ordenamentos em:
https://tools.ietf.org/html/rfc4731
editada 18/08/18 às 16:08
respondida 18/08/18 às 16:02
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag php python ajax .net ou faça sua própria pergunta.