Preciso enviar um email através de Perl. Porém ele não funciona, haha. Eis o código que usei para testar:
#!/usr/bin/perl
use Net::SMTP;
print q{
##############################
# Trabalhando com Emails
# usando o Net::SMTP
##############################
};
# DADOS
print 'Qual é o email Host?'; #pergunta para o usuário qual o emailhost que ele vai usar
chomp($eh = <STDIN>); #salva na memória
print 'Nome:'; #entra com o nick
chomp($name = <STDIN>);
print 'email:'; #entra com o user
chomp($mail = <STDIN>);
print 'senha:'; #entra com a senha
chomp($pass = <STDIN>);
print 'enviar para quem?:'; #entra com o destinatário
chomp($dest = <STDIN>);
print 'remetente:'; #entra com o remetente
chomp($remt = <STDIN>);
print 'Mensagem:'; #entra com o conteúdo
chomp($msg = <STDIN>);
# CONEXÃO
$smtp = Net::SMTP->new('smtp.$eh'); #abre a conexão
$smtp->mail("$name");
$smtp->auth("$mail","$pass");
$smtp->to('$dest');
$smtp->data();
$smtp->datasend("To:$dest ");
$smtp->datasend("From: $remt");
$smtp->datasend("$msg");
$smtp->quit;
# FIM DA CONEXÃO
print "email enviado";
<STDIN>;
exit;
O que eu digitei:
$eh: yahoo.com
$name: Minato
$mail: algo@yahoo.com (não vou digitar o email que usei :D )
$pass: minhasenha (contém o caractere '=', pode ser que isso seja o erro, mas sei lá)
$dest: algo@yahoo.com (usei o mesmo, só tenho uma conta no yahoo...)
$remt: algo@yahoo.com
$msg: mensagemteste
EDIT: mudei o $mail de 'algo@yahoo.com' para somente 'algo'. Também não deu certo.
Olhei a caixa de entrada, lixo, spam do meu email e não tem nada. Qual poderia ser o problema?
Valeu!
Hi.
Com o concat na string $eh, o resultado final foi smtp.yahoo.com.
O SMTP do yahoo é smtp.mail.yahoo.com.br. Faltou o .mail e o .br. =P
Se ainda sim não funcionar, eu testo o script aqui e vejo pra ti. :-)
[]'s
Quote from: Fvox on 14 de July , 2011, 03:36:17 PM
Hi.
Com o concat na string $eh, o resultado final foi smtp.yahoo.com.
O SMTP do yahoo é smtp.mail.yahoo.com.br. Faltou o .mail e o .br. =P
Se ainda sim não funcionar, eu testo o script aqui e vejo pra ti. :-)
[]'s
Pra falar a verdade, eu já consegui e fiz de outra forma. O smtp do yahoo é smtp.yahoo.com mesmo, que é o que eu uso no Thunderbird.
Só pra constar, aqui vai o que deu certo:
#!usr/bin/perl
use warnings;
use strict;
use Net::SMTP::SSL;
use MIME::Lite;
use FindBin;
use lib ("$FindBin::Bin/CPAN");
my $message = "From: suaconta\@gmail.com\nTo:
outraconta\@yahoo.com\nSubject: Assunto\n\nCorpo da mensagem\n\n";
print "Message:\n";
print $message;
print "\n";
my $DEBUG = 1;
my $ServerName = "smtp.gmail.com";
my $ServerAccount = "suaconta"; #não é suaconta@gmail.com, é só suaconta mesmo
my $ServerPwd = "senha";
my $MailFrom = "suaconta\@gmail.com";
my $MailTo = "outraconta\@yahoo.com";
print "Variáveis prontas\n";
my $smtp = Net::SMTP::SSL->new($ServerName,
Port => 465,
DEBUG => 1,
) or warn "$!\n";
print "Conexão estabelecida\n";
if ( !$smtp->auth($ServerAccount, $ServerPwd) ) {
print "Falha na autenticacao\n";
}
if ( !$smtp->mail( $MailFrom ) ) {
print "Sender recusado\n";
exit 1;
}
if (!$smtp->to( $MailTo ) ) {
print "Endereco recusado\n";
exit 1;
}
my $maildata = $message;
$smtp->data();
$smtp->datasend( $maildata );
$smtp->dataend();
$smtp->quit();
$smtp->quit;
print "Email enviado\n";
Eu fui usar o módulo MIME pra poder enviar com anexo, porém recebi um erro sobre ARRAY. Não lembro direito o que era, mas só sei que dava erro no cmd.pl (acho que era esse, ou era cmd.pm). Se alguém souber o motivo e responder, ficaria agradecido! :D
Usando o MIME:
use strict;
use warnings;
use FindBin;
use Net::SMTP::TLS;
use MIME::Lite;
use lib ("$FindBin::Bin/CPAN");
my $msg = MIME::Lite->new(
From => 'email\@gmail.com',
To => 'email\@yahoo.com',
Subject => 'Assunto',
Type =>'multipart/signed',
);
### Add the text message part
$msg->attach (
Type => 'TEXT',
Data => 'Mensagem do corpo'
) or die "Error adding the text message part: $!\n";
$msg->attach(
Type => 'application/notepad',
Path => 'C:\novo\dentro\output.txt',
Filename => 'output.txt',
Disposition => 'attachment',
);
my $mailer = new Net::SMTP::TLS(
'smtp.gmail.com',
Port => 587,
User => 'email\@gmail.com',
Password=> 'senha');
$mailer->mail(email\@gmail.com');
$mailer->to('email\@yahoo.com');
$mailer->data;
$mailer->datasend($msg->as_string);
$mailer->dataend;
$mailer->quit;
Quote from: Minato on 17 de July , 2011, 01:07:08 AM
Eu fui usar o módulo MIME pra poder enviar com anexo, porém recebi um erro sobre ARRAY. Não lembro direito o que era, mas só sei que dava erro no cmd.pl (acho que era esse, ou era cmd.pm). Se alguém souber o motivo e responder, ficaria agradecido! :D
Hi.
Seu erro está aqui na linha 38:
$mailer->mail(email\@gmail.com');
A string termina mas não começa (faltou as aspas).
Outra coisa importante: com quotes (aspas simples), você não precisa escapar os arrays (\@), pois eles não tentarão ser lidos como variáveis dentro de uma string.
Isso provavelmente vai te causar um erro de autenticação, ainda que o email seja válido. Portanto, só coloque \@ quando houver aspas duplas!
[]'s
Quote from: Fvox on 18 de July , 2011, 01:36:40 PM
Quote from: Minato on 17 de July , 2011, 01:07:08 AM
Eu fui usar o módulo MIME pra poder enviar com anexo, porém recebi um erro sobre ARRAY. Não lembro direito o que era, mas só sei que dava erro no cmd.pl (acho que era esse, ou era cmd.pm). Se alguém souber o motivo e responder, ficaria agradecido! :D
Hi.
Seu erro está aqui na linha 38:
$mailer->mail(email\@gmail.com');
A string termina mas não começa (faltou as aspas).
Outra coisa importante: com quotes (aspas simples), você não precisa escapar os arrays (\@), pois eles não tentarão ser lidos como variáveis dentro de uma string.
Isso provavelmente vai te causar um erro de autenticação, ainda que o email seja válido. Portanto, só coloque \@ quando houver aspas duplas!
[]'s
Ah sim, agora entendi isso de quotes e talz. Valeu.
Eu arrumei o erro na linha 38 e mesmo assim deu erro. Olha só como ficou:
use strict;
use warnings;
use FindBin;
use Net::SMTP::TLS;
use MIME::Lite;
use lib ("$FindBin::Bin/CPAN");
my $msg = MIME::Lite->new(
From => 'email@gmail.com',
To => 'email@yahoo.com',
Subject => 'Assunto',
Type =>'multipart/signed',
);
### Add the text message part
$msg->attach (
Type => 'TEXT',
Data => 'Mensagem do corpo'
) or die "Error adding the text message part: $!\n";
$msg->attach(
Type => 'application/notepad',
Path => 'C:\novo\dentro\output.txt',
Filename => 'output.txt',
Disposition => 'attachment',
);
my $mailer = new Net::SMTP::TLS(
'smtp.gmail.com',
Port => 587,
User => 'email@gmail.com',
Password=> 'senha');
$mailer->mail('email@gmail.com');
$mailer->to('email@yahoo.com');
$mailer->data;
$mailer->datasend($msg->as_string);
$mailer->dataend;
$mailer->quit;
E esse foi o erro que retornou no console:
Not an ARRAY reference at C:/perl64/site/lib/Net/SMTP/TLS.pm line 324, <GEN0> line 7.Não faço a menor ideia de como resolver. Abri o TLS.pm mas não sei mexer nisso, haha.
[ ]s
Hi.
Provavelmente é alguma incompatibilidade do módulo com Windowzz.
Testei aqui no Linux e o email chegou perfeitamente usando o smtp do gmail.
[]'s
Hm, deve ser isso mesmo... Mas o anexo chegou certinho? :D
[ ]s