Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
opaeu tinha ficado de postar a classe ate o fim da semana, entao aqui esta ela, ela ta meio fraca... mais to meio sem tempo para fazer algo realmente legal, o importante é que esta funcionando XDvou postar ela, e em seguida explicar os parametros:
> <?class Smtp{ var $conn; var $user; var $pass; var $debug = true; function Smtp($host){ $this->conn = fsockopen($host, 25, $errno, $errstr, 30); $this->Put("EHLO $host"); } function Auth(){ $this->Put("AUTH LOGIN"); $this->Put(base64_encode($this->user)); $this->Put(base64_encode($this->pass)); } function Send($to, $from, $subject, $msg){ $this->Auth(); $this->Put("MAIL FROM: " . $from); $this->Put("RCPT TO: " . $to); $this->Put("DATA"); $this->Put($this->toHeader($to, $from, $subject)); $this->Put("\r\n"); $this->Put($msg); $this->Put("."); $this->Close(); if(isset($this->conn)){ return true; }else{ return false; } } function Put($value){ return fputs($this->conn, $value . "\r\n"); } function toHeader($to, $from, $subject){ $header = "Message-Id: <". date('YmdHis').".". md5(microtime()).".". strtoupper($from) ."> \r\n"; $header .= "From: <" . $from . "> \r\n"; $header .= "To: <".$to."> \r\n"; $header .= "Subject: ".$subject." \r\n"; $header .= "Date: ". date('D, d M Y H:i:s O') ." \r\n"; $header .= "X-MSMail-Priority: High \r\n"; return $header; } function Close(){ $this->Put("QUIT"); if($this->debug == true){ while (!feof ($this->conn)) { echo fgets($this->conn) . "<br>\n"; } } return fclose($this->conn); }}?>
e
> <?include "smtp.class.php";$smtp = new Smtp("mail.host.com");$smtp->user = "user@host.com";$smtp->pass = "password";$smtp->debug = false;if($smtp->Send($to, $from, $subject, $msg)){ echo "enviou";}else{ echo "falha ao enviar ;_;";}?>
é apenas isso.. acho que ja deu para pegar... mais vou explicar XDSmtp( $host_do_smtp ) // ex: smtp.host.com$user // usuario$pass //senha$debug // se estiver true, retorna as msgs do server, so serve mesmo para debugar o codigoSend( $para_quem, $de_quem, $assunto, $mensagem)é bem simples mesmo XDse alguem ver algum erro na logica ou alguma maneira mais facil de fazer a mesma coisa posta ai XD[]'s
oiientao... tpo, o fsockopen abre uma conexao com um ip, e cria tipo um "prompt de comandos", ai o fputs(), vai enviando os comandos que a gente quer para o servidor, entendeu ? XD, mais ele tambem pode ser usado para escrever em arquivos sim :P , a function Put fui eu quem fiz:
> function Put($value){ return fputs($this->conn, $value . "\r\n");}
a unica coisa que ela faz é dar um fputs() num valor + \r\n (que no caso seria para indicar para o "prompt de comandos" que ali acaba aquela linha de comandos), maisela eu so fiz para diminuir o codigo, nao era necessario XD
Esse script vê os e-mails que você tem?
ah nao nao, esse nao le, servidor Smtp, é para enviar, servidor Pop3 é para receber XD, mais eu ja postei um exemplo de como ver seus emails usando Imap XDolha aqui:http://forum.imasters.com.br/index.php?sho...iew=getlastpost[]'s
legal, só q aqui nao ta enviando nao...ele mostra a mensagem enviou e o email nao chega.
tem idéia do que pode ser?
precisava mto disso ai.
<?$to = "carlos@aafdz.com";$from = "meuemail";$subject = "[Portal] - Teste";$msg = "#@?$%~, funcionou!!!!";include "smtp.class.php";$smtp = new Smtp("255.255.255.255");$smtp->user = "meuuser";$smtp->pass = "minha senha";$smtp->debug = false;if($smtp->Send($to, $from, $subject, $msg)){echo "enviou";}else{echo "falha ao enviar;_;";}?>
obvio q eu tirei o username, senha e o ip do smtp...mas eles estao corretos
consegui... coloquei os parenteses no include e deu certo... huahuahuahua
estou conseguindo porém apenas com servidores smtp q nao precisam de autenticação...tenho dois servidores q precisam de autenticação e eles nao enviam nada, a pagina mostra q enviou, porém nao chega nenhum email.
sadboar, alguns dos servidores que necessitam de autenticação requerem que seja feito conexao com o pop3 antes do smtptalvez seja isso.
PHP MAILER
Achei essa classe na Internet. Mas já adianto que não é muito interessante... mas
<?
/******************************************************
**
** PHP Mailer 2.0
**
** This script is easy to configure. Just change the variables below to
** suit your environment and PHP does the rest!
**
**
*******************************************************/
/*******************************************************
Enter your site details below!
*******************************************************/
// Enter your contact email address here
$adminaddress = "thegreencardtur@yahoo.com.br";
// Enter the address of your website here include http://www.
$siteaddress ="http://www.greencardturismo.com";
// Enter your company name or site name here
$sitename = "Green Card Turismo®";
/*******************************************************
No need to change anything below ...
*******************************************************/
// Gets the date and time from your server
$date = date("m/d/Y H:i:s");
// Gets the IP Address
if ($REMOTE_ADDR == "smtp.mail.yahoo.com.br") $ip = "200.155.23.119";
else $ip = getHostByAddr($REMOTE_ADDR);
//Process the form data!
// and send the information collected in the Flash form to Your nominated email address
if ($action != ""):
mail("$adminaddress","Info Request",
"A visitor at $sitename has left the following information\n
First Name: $fname
Last Name: $lname
Email: $email
Company: $cname
Telephone: $telno\n
The visitor commented:
------------------------------
$comments
Logged Info :
------------------------------
Using: $HTTP_USER_AGENT
Hostname: $ip
IP address: $REMOTE_ADDR
Date/Time: $date","FROM:$adminaddress");
//This sends a confirmation to your visitor
mail("$email","Seus dados foram registrados e logo entraremos em contato, obrigado por visitar nosso site $sitename",
"Olá $fname,\n
Obrigado pelo interesse em $sitename!\n
Logo entraremos em contato, Saudações,
$sitename
$siteaddress","FROM:$adminaddress");
//Confirmation is sent back to the Flash form that the process is complete
$sendresult = "Seus dados foram registrados e logo entraremos em contato <a href = \"$siteaddress\" target = \"_blank\"><u>$sitename</u></a>. Obrigado. ";
$send_answer = "answer=";
$send_answer .= rawurlencode($sendresult);
echo "$send_answer";
endif;
?>Tá aparecendo isso quando tento usar a classe, alguem sabe dizer o que é ?Warning: fputs(): supplied argument is not a valid File-Handle resource in C:\WINDOWS\SERV-N\www\smtp.class.php on line 36
nao deu certo gente fiz assim :nao ta chegando o email .
> <?include ("smtp.php");$from = $_POST['email'];$to = "SEU_EMAIL_AQUI";$subject = "Teste de utilização de classe de uso";$msg = "Recebendo o teste";$smtp = new Smtp("smtp.mail.yahoo.com.br");$smtp->user = "o_drunk@yahoo.com.br";$smtp->pass = "XXXX";$smtp->debug = false;if($smtp->Send($to, $from, $subject, $msg)){echo "enviou";}else{echo "falha ao enviar;_;";}?>>
opaeu tinha ficado de postar a classe ate o fim da semana, entao aqui esta ela, ela ta meio fraca... mais to meio sem tempo para fazer algo realmente legal, o importante é que esta funcionando XDvou postar ela, e em seguida explicar os parametros:
> <?class Smtp{ var $conn; var $user; var $pass; var $debug = true; function Smtp($host){ $this->conn = fsockopen($host, 25, $errno, $errstr, 30); $this->Put("EHLO $host"); } function Auth(){ $this->Put("AUTH LOGIN"); $this->Put(base64_encode($this->user)); $this->Put(base64_encode($this->pass)); } function Send($to, $from, $subject, $msg){ $this->Auth(); $this->Put("MAIL FROM: " . $from); $this->Put("RCPT TO: " . $to); $this->Put("DATA"); $this->Put($this->toHeader($to, $from, $subject)); $this->Put("\r\n"); $this->Put($msg); $this->Put("."); $this->Close(); if(isset($this->conn)){ return true; }else{ return false; } } function Put($value){ return fputs($this->conn, $value . "\r\n"); } function toHeader($to, $from, $subject){ $header = "Message-Id: <". date('YmdHis').".". md5(microtime()).".". strtoupper($from) ."> \r\n"; $header .= "From: <" . $from . "> \r\n"; $header .= "To: <".$to."> \r\n"; $header .= "Subject: ".$subject." \r\n"; $header .= "Date: ". date('D, d M Y H:i:s O') ." \r\n"; $header .= "X-MSMail-Priority: High \r\n"; return $header; } function Close(){ $this->Put("QUIT"); if($this->debug == true){ while (!feof ($this->conn)) { echo fgets($this->conn) . "<br>\n"; } } return fclose($this->conn); }}?>
e
> <?include "smtp.class.php";$smtp = new Smtp("mail.host.com");$smtp->user = "user@host.com";$smtp->pass = "password";$smtp->debug = false;if($smtp->Send($to, $from, $subject, $msg)){ echo "enviou";}else{ echo "falha ao enviar ;_;";}?>
é apenas isso.. acho que ja deu para pegar... mais vou explicar XDSmtp( $host_do_smtp ) // ex: smtp.host.com$user // usuario$pass //senha$debug // se estiver true, retorna as msgs do server, so serve mesmo para debugar o codigoSend( $para_quem, $de_quem, $assunto, $mensagem)é bem simples mesmo XDse alguem ver algum erro na logica ou alguma maneira mais facil de fazer a mesma coisa posta ai XD[]'s
Depois que eu colocar tudo isto e no formulario como que eu coloco(html)?Depois que eu colocar tudo isto e no formulario como que eu coloco(em html)?
Ae reck_neck, realmente tá de (SUPER) parabéns por essa classe.Poucos (dos que postaram aqui) entenderam a beleza dela.Para os que não entenderam: Esta classe serve pra enviar emails independente da função nativa "mail" do php. E é uma mão na roda. Muito bom... Quase perfeito (só ta faltando a opção de envio de emails html, vou ver se faço ela aqui e posto pro pessoal).PS.: Para quem tentou enviar usando o login do yahoo e não conseguiu é só voce retirar o @yahoo.com.br do seu user que funcionará 100%. Exemplo do meu caso:$smtp->user = "micoxjcg";No campo $from, aí sim, você deve colocar seu email completo.
micox nao deu certo aqui pq ?
> <?include ("smtp.class.php");$from = "o_drunk@yahoo.com.br";$to = "familiasimpson@uol.com.br";$subject = "Teste de utilização de classe de uso";$msg = "Recebendo o teste";$smtp = new Smtp("smtp.mail.yahoo.com.br");$smtp->user = "o_drunk";$smtp->pass = "####";$smtp->debug = false;if($smtp->Send($to, $from, $subject, $msg)){echo "enviou";}else{echo "falha ao enviar;_;";}?>
configurei o php.ini pra usar o yahoo .
Implantei a classe normalmente e funciona apenas se o debug estiver true.. os dois..se coloca false como no exemplo, ele simplesmente não envia o e-mail..Onde estaria o problema?
micox nao deu certo aqui pq ?
Mestre fyoda, ativa o debug=true e me fala o resultado do debug.sublyer, vou testar o lance do debug lá em casa. Porque aqui no serviço eu não tenho acesso a servidores DNS (que é de onde o fsockopen encontra o host de destino). Mas pra mim funcionou com ou sem o debug. Ele só atua lá no final depois de tudo...Ó, talvez o problema de voces seja o mesmo que eu tenho aqui no serviço.Como nossa rede é filtrada por proxy, o script php (mais especificamente a função fsockopen) não tem como descobrir o ip do provedor que voce indicou pois o acesso a servidores DNS é bloqueado. (servidores DNS são quem mantém a lista que relaciona nome_de_host -> IP).
>
micox nao deu certo aqui pq ?
Mestre fyoda, ativa o debug=true e me fala o resultado do debug.sublyer, vou testar o lance do debug lá em casa. Porque aqui no serviço eu não tenho acesso a servidores DNS (que é de onde o fsockopen encontra o host de destino). Mas pra mim funcionou com ou sem o debug. Ele só atua lá no final depois de tudo...Ó, talvez o problema de voces seja o mesmo que eu tenho aqui no serviço.Como nossa rede é filtrada por proxy, o script php (mais especificamente a função fsockopen) não tem como descobrir o ip do provedor que voce indicou pois o acesso a servidores DNS é bloqueado. (servidores DNS são quem mantém a lista que relaciona nome_de_host -> IP).
Sabe onde é estranho... quando usei pela primeira vez a classe ele enviava numa boa, mas agora só envia se estiver com o debug true.. muito estranho isso.. tem que realizar alguma mudança no PHP.INI ou não?
Sabe onde é estranho... quando usei pela primeira vez a classe ele enviava numa boa, mas agora só envia se estiver com o debug true.. muito estranho isso.. tem que realizar alguma mudança no PHP.INI ou não?
Não. No script há a função fsockopen que abre a conexão com o servidor de email (server smpt) de destino. Mas creio que ela não precisa de nenhuma configuração no php.ini não.Imagino que o problema de voces esteja realmente relacionado ao bloqueio de consultas a servidor DNS. Pra testar faça o seguinte:Na máquina que roda o php (seu servidor), execute um ping em "mail.yahoo.com".Se o ping não for executado com sucesso, voce não está conseguindo encontrar o servidor mail.yahoo.com. Sacou?Ah e poste o resultado do debug aqui pra eu ver o que tá retornando de erro.
retornou isso quando coloquei true o debug
220 smtp104.mail.mud.yahoo.com ESMTP 250-smtp104.mail.mud.yahoo.com 250-AUTH LOGIN PLAIN XYMCOOKIE 250-PIPELINING 250 8BITMIME 334 VXNlcm5hbWU6 334 UGFzc3dvcmQ6 235 ok, go ahead (#2.0.0) 250 ok 250 ok 354 Enter mail, end with "." on a line by itself 250 ok 1145632269 qp 17636 221 smtp104.mail.mud.yahoo.com enviou
e o ping retornou tudo . o ping teve 0% de perda .
editei para q nao fique enchendo o saco o tamanho q tava .
Puts... Pelamordedeus não faz mas isso não. Código gigantesco. hehehe.A classe do red neck já é suficiente. Esquece esse elefante branco ae...Quanto ao debug que você postou. Lendo ele, agente percebe que o email FOI ENVIADO CORRETAMENTE.O que pode ter acontecido é que, voce não achou o email lá na pasta dele ao tentar ler. Pode ser que seu provedor de email considerou ele um SPAM e jogou na pasta de Mensagens em massa.você já verificou esta pasta?
ja verifiquei e nao chego nada .
Ae fyoda, esse lance de trabalhar com email é sempre problema, pois não tem como você saber se o problema é do seu script, do provedor, de alguma pasta, etc...Daí o que você tem que fazer são vários testes.- teste usando a função mail() nativa do php- teste mandando pra outros destinatários de email- teste mudando o remetente do email- teste desabilitando a proteção anti-spam do email que irá receber.- etc.Falae o que você conseguiu, pois, aqui pra mim a classe smtpmail funcionou diboas...
só nao testei o teste desabilitando a proteção anti-spam do email que irá receber.como que desabilito no yahoo ?o resto nao chegou o email mas printou na tela , enviado .
Ih fyoda, sinceramente eu não sei.você terá que ir testnado até achar a origem do problema.dúvidas:1) você usou a função nativa mail() do php e eu certo o envio (e conseguiu ler o email)?2) você mandou pra outro email que não fosse do yahoo e deu certo?
esssas duas opções foram testadas e nao chegou nada .
FAz o seguinte: manda pra mim das 2 formas (com esta classe smtp daqui e com a função mail() nativa do php).Meu yahoo: micoxjcgARRBAyahooPTcomPTbr
bem legal cara.Me explica três coisas: o que são esses "Put"?para que usar fputs? se fputs serve para gravação em arquivo? Esse script vê os e-mails que você tem?até