shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Envia e-mail via telnet


From: box_ferrari
Subject: Re: Envia e-mail via telnet
Date: Mon, 05 Oct 2009 18:19:43 -0000
User-agent: eGroups-EW/0.82

--- Em address@hidden, Adriano Nunes <estudo_linux@...> escreveu
>
> Pessoal bom dia!
> Elaborei o seguinte script:
> 
> ( :
> echo HELO srvmail ; sleep 2
> echo mail From: beltrano@... ; sleep 2
> echo rcpt To: fulana@... ; sleep 2
> echo data ; sleep 1
> echo subject:"teste subject" ; sleep 1
> echo "TESTE " ;sleep 1
> echo . ; sleep 1
> echo quit ; ) | telnet 10.10.10.10 25 #1>> /dev/null 2>>/dev/null
> 
> E estava gerando erro de autenticação, localizei uma opção que deve ser 
> adicionada para funcionar com SMTP autenticado que é o AUTH LOGIN, mas não 
> consegui fazer funcionar.


Marcos, servidores de e-mail não são o meu forte.

Mas se eu não estiver enganado (e se estiver, por favor, me corrijam), o 
protcolo SMTP (na verdade ESMTP) suporta 3 métodos de autenticação: PLAIN, 
LOGIN e CRAM-MD5.

Um servidor pode estar configurado para suportar apenas um destes 3 métodos ou 
todos. Para saber qual o método implementado pelo seu servidor, mande a string 
"EHLO" para ele. Você vai receber algo parecido com isso como resposta:

250-hm331.locaweb.com.br
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-PIPELINING
250 8BITMIME
451 timeout (#4.4.2)

No caso, meu servidor está me falando que somente suporta o método PLAIN. Se 
ele suportasse outros métodos, você provavelmente veria uma linha assim:

250 AUTH LOGIN PLAIN CRAM-MD5

De todo modo, independente de qual método você use, as informações de 
autenticação (login e senha) devem ser enviadas para o servidor codificadas em 
base64, e não em plain text.

A diferença entre os métodos LOGIN e PLAIN está na forma como você envia estas 
informações. Basicamente, no método login você envia a string contendo o login 
codificado em base64 em uma linha, e depois a senha em outra, também codificada 
em base64 em outra linha.

Já na plain, você deve enviar login e senha tudo de uma vez, em uma única 
string, delimitada pelo caracter NULL (ASCII 000), conforme a regra abaixo:

"The mechanism consists of a single message from the client to the server. The 
client sends the authorization identity (identity to login as), followed by a 
US-ASCII NULL character, followed by the authentication identity (identity 
whose password will be used), followed by a US-ASCII NULL character, followed 
by the clear-text password. The client may leave the authorization identity 
empty to indicate that it is the same as the authentication identity."

Ou seja,  você pode montar uma string assim "\000usuario\000senha", codificá-la 
em base64 e enviar ao seu serivdor após o comando "AUTH PLAIN".

Se o seu login no seu servidor é o endereço completo de e-mail (nome@domínio), 
a sting fica assim: "\000usuario\@dominio\000senha"

Para codficar as informações para base64, você pode usar o perl.

Então, supondo que seu servidor autentique o seu login pelo endereço completo 
de e-mail e este endereço seja 'address@hidden' e sua senha seja 'masterfoo', 
você cria a string de autenticação assim:


perl -MMIME::Base64 -e 'print encode_base64("\000foo\@foobar.com\000masterfoo")'

que te retornaria:

AGZvb0Bmb29iYXIuY29tAG1hc3RlcmZvbw==

Então é só enviá-la ao servidor:

AUTH PLAIN 'AGZvb0Bmb29iYXIuY29tAG1hc3RlcmZvbw=='

que ele te responde:

235 ok, go ahead (#2.0.0)

Se você erra alguma coisa ele te diz:

535 authentication failed (#5.7.1)

Então, no seu script, não adianta apenas chamar a autenticação. Tem que 
conversar com o servidor.

No seu caso, que usa o método login, após chamar a autenticação você deve 
enviar uma mensagem com o servidor com o login codificado em base64 e, em 
seguida, com a senha também codificada.

Se o servidor não te responder o "go ahead", algo deu errado.

Mais dúvidas sobre autenticação em servidores SMTP, você pode tirar aqui:

http://www.fehcom.de/qmail/smtpauth.html


No caso do meu servidor, 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]