Jump to content


Photo

Email Em Perl


  • Faça o login para participar
17 replies to this topic

#1 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 12/07/2004, 02:06

Oi,
Comecei agora a aprender a fazer páginas e talz...
Precisava fazer um formulário de pedidos, encomendas de compras, e acabei parando nos cgi/perl's da vida..
Enfim, quero saber se tem como enviar email por um script perl sem ter que usar sendmail ou programas similares.
pois o meu servidor não suporta.

eu achei um script no cgiclube que não precisaria de sendmail, mas não funcionou de jeito nenhum...
é o seguinte:

#!/usr/bin/perl

use Net::SMTP;
$smtp = Net::SMTP->new('smtp.cgiclube.net');
$smtp->mail("cgiclube");
$smtp->auth("cgiclube","senha");
$smtp->to('alguem\@cgiclube.net\n');
$smtp->data();
$smtp->datasend("To: alguem\@cgiclube.net\n\n");
$smtp->datasend("From: alguem\@cgiclube.net\n\n");
$smtp->datasend("email enviado! cgiclube.net");
$smtp->quit;
print "Content-type: text/html\n\n";
print "email enviado";
exit;


Essa biblioteca, todos os servidores que suportam perl e cgi, tem ela? não pode ser isso que tá faltando?
alguns scripts de teste extramente elementares rodaram sem problema, mas esse.... :\
o que pode tá errado?
bom é claro que substitue os valores exemplos, pelos correspondentes ;\

O que pode ser???
E sabem de algum lugar onde possa encontrar explicação mais detalhada sobre envio de emails por perl...

Desde já agradeço...
obrigado

#2 stvkoch

stvkoch

    Turista

  • Usuários
  • 53 posts
  • Sexo:Não informado

Posted 12/07/2004, 07:54

A principio este script tem um erro de sintexe na linha 7.
($smtp->to('alguem\@cgiclube.net\n');)

se vc usa '(aspas) não precisa de contra barra para especificar a maioria dos caracteres reservados da linguagem.

o correto seria:
$smtp->to('alguem@cgiclube.net');

ou

$smtp->to("alguem\@cgiclube.net\n");
Até mais, espero ter ajudado.


Steven Koch :)
stvkoch@gmail.com

#3 Whitesnake

Whitesnake
  • Visitantes

Posted 12/07/2004, 20:24

Execute o seguinte script:

#!/usr/bin/perl
print "Content-type:text/html\n\n";
use CGI::Carp(fatalsToBrowser);
use Net::SMTP;

print qq|
<font face="Sans-serif" size="1">
Sucesso! O <b>Net::SMTP</b> está instalado corretamente neste servidor.
</font>
|;


Caso ocorra algum erro, é porque infelizmente seu servidor não permite o envio de emails através do módulo Net-SMTP.

#4 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 13/07/2004, 00:51

Bom, quero agradecer ao stvkoch e Stone Rock que perderam tempo me ajudando.
Bom, quanto a sintaxe aquela, eu tinha até testado usando aspas duplas em tudo, pra garantir, não funcionou igual.

E quanto ao teste apresentado por Stone Rock, o servidor apresentou mensagem de erro, se tiver tudo de acordo com o teste, o servidor não aceita mesmo esse recurso.

Já foi uma luta pra achar servidor grátis que aceitasse cgi, nem me surpreende essas limitações. Mas como mal tava começando e queria fazer testes e nõa sabia dessa pobreza toda, nõa investi em domínio pago.
Mas pelo jeito vou ter que mudar minha conduta :]

Grato.
:]

#5 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 13/07/2004, 02:26

OPA!
DESCULPA!
Deu problema na interface entre a cadeira e o teclado mesmo... :\
O script para teste dado por Stone Rock, não tinha funcionado mesmo, mas agora antes de desconectar, resolvi tentar uma última vez, e funcionou, aparece a mensagem dizendo que NET::SMTP está instalado corretamente no servidor...

Mas o script que eu apresentei não funciona :\
O que pode ser agora???
Ou se pudesse me apresentar um script, que envia email, o mais simples possível, só a parte de enviar email mesmo, o mínimo, que depois eu complemento como quiser...
Algo mínimo como esse que apresentei, se alguém souber o(s) erro(s) daquele que apresentei melhor...

Novamente, OBRIGADO

#6 Whitesnake

Whitesnake
  • Visitantes

Posted 13/07/2004, 16:33

Baixe este arquivo de exemplo, talvez lhe ajude na sintaxe correta.

Caso ainda assim tiver dúvidas acesse o PerlDoc que lá possui informações suficientes para o uso correto do módulo Net-SMTP

#7 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 14/07/2004, 00:16

Bom, vou dar uma olhada...

Valeu...

#8 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 14/07/2004, 02:42

Eu tive olhando agora os exemplos e a documentação que me indicasse, até cheguei a encontrar um erro, faltava o dataend(); mas mesmo corrigindo isso o script não funcionou, cheguei a usar o exemplo do link, que me foi dado, e nada também....
não quer funcionar de jeito nenhum.
bom é uma conta grátis, no http://free.prohosting.com/ e ele deixa claro, na ajuda, que não aceita sendmail nas contas grátis...

Pode ser algo por aí? que o servidor não executa essas funções? devido a ser conta grátis?
Ou já que ele aceitou naquele teste, deveria funcionar o envio de email.
Eu tento chamar o smtp do bol smtp.bol.com.br pra isso e não funciona, no outlook funciona normal :|

Eu to me confirmando em desistir por ora, tentar quando tiver conseguido um servidor decente ...
por que nenhum script funciona, cheguei a testar um que vi aqui no fórum mesmo, que estaria funcionando, da dricadl, mas também nada...
tudo parece indicar que é da hospedagem, mas to só especulando, sou um tanto ignorante nesse assunto :\

Será que é coisa dessa minha hospedagem gratuita?

#9 Whitesnake

Whitesnake
  • Visitantes

Posted 14/07/2004, 14:20

Creio que não, porque, quando chamamos o módulo, não dá erro, ou seja, o módulo é carregado corretamente, com ele suas funções de envio. Porém, talvez seu domínio tenha algum programa que proiba o acesso de membros de conta grátis à porta de envio. Mas mesmo assim vale tentar... execute este script, algum erro deverá ser retornado. Apresente-o aqui em seguida:

#!/usr/bin/perl
    print "Content-type:text/html\n\n";
    use CGI::Carp(fatalsToBrowser);
    use Net::SMTP;   
    $smtp = Net::SMTP->new('smtp.cgiclube.net');
    $smtp->mail("cgiclube");
    $smtp->auth("cgiclube","senha");
    $smtp->data();
    $smtp->datasend("To: postmaster\n");
    $smtp->datasend("\n");
    $smtp->datasend("A simple test message\n");
    $smtp->dataend();
    $smtp->quit;
    print "$!";



#10 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 15/07/2004, 00:41

Bom, antes sempre retornava o Error 500 internal server error...
Agora não...
Mas também não imprimiu nada como erro...
Eu fiz uns testes aqui...
Primeiro coloquei pra imprimir "o erro foi: $!", no caso da variável de erro, estar vazia, pra ele imprimir algo pelo menos... Um testezinho besta...
Mas também não imprimiu nada...
Coloquei então um print depois de [ print "Content-type:text/html\n\n"; ]
E aí apareceu, daí então intercalei todas as linhas de comando com um print, pra ver até onde imprimiria, onde que parava...

E até antes de chamar a função mail [$smtp->mail("cgiclube");]
ele imprimiu, dali pra diante não apareceu mais nada...

#11 Whitesnake

Whitesnake
  • Visitantes

Posted 15/07/2004, 01:02

Acho que não haveria problema de remover o método mail, já tentou isso?

#12 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 16/07/2004, 00:47

Retirei a linha do mail() e deu no mesmo, depois do new->smtp ele imprime, e depois do próximo comando ele paro, nesse agora foi:

$smtp->auth("cgiclube","senha");
chegou aí parou de imprimir também, mesma coisa...

Alguma outra possibilidade?
Eu já to me conformando, que é coisa dessa hospedagem gratuita que limita... :\
Deve bloquear mesmo...
talvez seja melhor deixar pra tentar de novo, quando eu tiver com um domínio pago mesmo...


Mas obrigado pela ajuda e tempo perdido, de qualquer forma...

#13 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 16/07/2004, 09:19

Tipow, o http://free.prohosting.com não fornece servidor de SMTP grátis, logo esse script nunca vai funcionar nele, mesmo que o servidor tenha o modulo Net::SMTP.

Para usar esse código, pelo prohosting, você tem que saber se o servidor tem esse modulo (use o script abaixo para saber se tem) e usar o smtp de outro site (ex: o do bol >> smtp.bol.com.br).

Script que verifica a existencia de modulos perl em um servidor:


#!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";

###### CAPTA DADOS POST #########
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$name} = $value; }
#########################

$pag = $form{'pag'};
$modulos = $form{'modulos'};

if($pag eq "") { &index; }
if($pag eq "ver") { &ver; }

#########################

sub index {

print qq~
<CENTER>
VERIFICAR A EXISTENCIA DE MODULOS NO SERVIDOR:<P>

MODULOS QUE VOCÊ QUER VERIFICAR:<P>

<form action="modulos.cgi" method="POST">
<input type="hidden" name="pag" value="ver">

<textarea name="modulos" cols="25" rows="10">Net::IRC
Net::SMTP
Net::ICQ
CGI::push
GD
LWP::Simple
LWP::UserAgent
DBI
DBD::Mysql
DB_File</textarea><p>

<input type="submit" value="VERIFICAR">
</form>
~;

}

######################

sub ver {

my($ERROR);

$ERROR = "Detectando a presença de módulos Perl...<HR><BR>\n";

@itens=split(/\n/,$modulos); 
foreach $kkk (@itens) { 

eval "use $kkk";
if ($@) {
$ERROR .= "$kkk <font color=red>não acessivel</font> para este servidor.<BR><BR>";
}
else { $ERROR .= "$kkk <font color=blue>presente</font>.<BR><BR>"; }

}

$ERROR .= "<HR>\n";
$ERROR .= "<B>Versão do Perl</B>: $]<BR>\n";
$ERROR .= "<B>Rodando em</B>: $^O<BR>\n";
$ERROR .= "<HR>\n";
$ERROR .= "<B>Diretório:</B> $directory<BR>\n";
$ERROR .= "<HR>\n";
$ERROR .= "<B>Variáveis de Sistema:</B><BR>\n";


foreach $key(keys %ENV) { $ERROR .= "<B>$key:</B> <I>$ENV{$key}</I><BR>\n"; }

print qq!

<BODY BGCOLOR="#e0e0e0" LINK="maroon" VLINK="maroon" TEXT="black">
  <CENTER>
    <TABLE BGCOLOR="white" BORDER="1" CELLPADDING="3" WIDTH=85%><TR><TD>
    <TABLE BORDER="0" CELLPADDING="3" WIDTH="100%">
        <TR BGCOLOR="#cccc99">
                <TD>
                   <FONT FACE="Verdana,Arial, Helvetica" SIZE="2" COLOR="#660000">
                   <b>Sumário de Configuração do Sistema</b>
                </TD>
        </TR>
        <TR>
                <TD BGCOLOR="#EEEEEE" VALIGN="top">
                  <FONT FACE="Verdana,Arial, Helvetica" SIZE="2" COLOR="#000000">
                  $ERROR
                  </FONT>
                </TD>
        </TR>
        </TR>
     </TABLE>
    </TD></TR></TABLE>
  </CENTER>
</BODY>
!;
exit 0;


}

Falow
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#14 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 17/07/2004, 00:43

Bom, eu tentava chamar o smtp do bol memso sempre...
em só o script era hospedado aí no prohosting...

Vou dar uma olhada nesse script que me desse...
valeu...

#15 Filipe_EDP

Filipe_EDP

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 17/07/2004, 02:10

Bom tá aí o resultado, ou olha direto lá mesmo...
http://snow.prohosti...pwd/modulos.cgi

Net::IRC não acessivel para este servidor.

Net::SMTP presente.

Net::ICQ não acessivel para este servidor.

CGI::push não acessivel para este servidor.

GD não acessivel para este servidor.

LWP::Simple presente.

LWP::UserAgent presente.

DBI presente.

DBD::Mysql não acessivel para este servidor.

DB_File presente.


--------------------------------------------------------------------------------
Versão do Perl: 5.008
Rodando em: freebsd

--------------------------------------------------------------------------------
Diretório:

--------------------------------------------------------------------------------
Variáveis de Sistema:
SCRIPT_NAME: /edpwd/modulos.cgi
SERVER_NAME: snow.prohosting.com
HTTP_REFERER: http://snow.prohosti...pwd/modulos.cgi
SERVER_ADMIN: webmaster@prohosting.com
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_X_FORWARDED_SERVER: proxy3.free.prohosting.com
REQUEST_METHOD: POST
CONTENT_LENGTH: 179
HTTP_ACCEPT: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
SCRIPT_URI: http://snow.prohosti...pwd/modulos.cgi
SCRIPT_FILENAME: /usr/home/web/e/edpwd/modulos.cgi
SERVER_SOFTWARE: Apache/2.0.48 (Unix)
HTTP_MAX_FORWARDS: 10
QUERY_STRING:
REMOTE_PORT: 57684
HTTP_USER_AGENT: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
SERVER_PORT: 80
HTTP_ACCEPT_LANGUAGE: pt-br
REMOTE_ADDR: 200.102.234.241
CONTENT_TYPE: application/x-www-form-urlencoded
SERVER_PROTOCOL: HTTP/1.1
HTTP_X_FORWARDED_HOST: snow.prohosting.com
HTTP_X_FORWARDED_FOR: 200.102.234.241
PATH: /bin:/usr/bin
REQUEST_URI: /edpwd/modulos.cgi
GATEWAY_INTERFACE: CGI/1.1
SERVER_ADDR: 65.113.119.133
SCRIPT_URL: /edpwd/modulos.cgi
DOCUMENT_ROOT: /usr/local/apache2/htdocs
HTTP_HOST: snow.prohosting.com

O que se pode concluir?
Bom o NET::SMTP tá presente, como já tinha apontado o teste que o Stone Rock, me deu aqui...

Eu tento acessar o smtp do bol mesmo, sempre foi o que tentei...
$smtp = Net::SMTP->new('smtp.bol.com.br');

E apesar de toda ajuda que já recebi aqui, nada faz funcionar...
que pode ser agora?

obrigado...




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq