SMTP. class - estou apanhando para fazer funcionar
Boa Noite Pessoal,
Estou utilizando um codigo que peguei aqui no forum que faz o envio em massa para emails cadastrardos no banco de dados mysql. Este script nao tinha autenticacao e tive que implantar utilizando o smtp.class para fazer a autenticacao mas estou apanhando. Alguem poderia me ajudar?
Codigo de envio:
<?php
session_start();
//error_reporting(E_ALL);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="all" />
<meta name="keywords" content="aaaaaa" />
<meta name="description" content="aaaaa" />
<meta name="TITLE" content=".:: aaaaaa" />
<meta name="AUTHOR" content="Neo Comunicação" />
<meta name="OWNER" content="email" />
<title>.:: Sómascas Outlet::.</title>
<?php
include ("smtp.class/smtp.class.php");
if($_POST["elm1"] != "")
$_SESSION["msg"] = stripslashes($_POST["elm1"]);
$msg = $_SESSION["msg"];
if($_POST["assunto"] != "")
$_SESSION["assunto"] = $_POST["assunto"];
$assunto = $_SESSION["assunto"];
//configurações do banco
$hostserver = "host";
$banco = "bd";
$usuario = "usuario";
$senha = "senha";
$tabela = "news";$campos = "id,email,status"; //campos da tabela
//configurações do e-mail
$subject = $assunto;
/ Configuração da classe.smtp.php /
$host = array("host" => "smtp.servidor.com"); /host do servidor SMTP /
$smtp = new Smtp($host);
$smtp->user = "email@email.com.br"; /usuario do servidor SMTP /
$smtp->pass = "senha"; / senha dousuario do servidor SMTP/
$smtp->debug =true; / ativar a autenticação SMTP/
$body = $msg;
$nome_remetente = "Empresa";
$email_remetente ="email@email.com.br";
$quant = 10; //número de mensagens enviadas de cada vez
$sec = 10; //tempo entre o envio de um pacote e outro (em segundos)
?>
<?php
$conexao = mysql_connect($hostserver,$usuario,$senha);
mysql_select_db($banco);
?>
<?php
$ok = 0;
$inicio = 0;
$fim = $inicio + $quant;
?>
<?php
$sql = "select $campos from $tabela where status = 0 limit $inicio,$fim";
$query = mysql_query($sql,$conexao);
$registros = mysql_num_rows($query);
?>
<?php
if($registros==1){
mysql_query("update $tabela set status = 0");
printf("<font face=’tahoma’>todas as mensagens foram enviadas!</font>");
$ok = 1;
}
?>
<?phpwhile($result = mysql_fetch_array($query)){
$id = $result[0];
$to = $result[1];
$status = $result[2];
if($to != ""){
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: $nome_remetente <$email_remetente>";
/ envia uma mensagem /
$from= $email_remetente ; / seu e-mail /
$to = $to; / o e-mail cadastrado/
$subject = $assunto; / assunto da mensagem /
$msg = $msg;
$msg .= "Para confirma clique no link abaixo";$smtp->Send($to, $from, $subject, $msg);/ faz o envio da mensagem /
mysql_query("update $tabela set status = 1 where id = $id");
printf("<font face=’tahoma’>$id ) mensagem para <b>$to</b> <font color=’#ff0000’><b>enviada com sucesso!</b></font></font>
");
}
}
?>
<?php
mysql_free_result($query);
mysql_close($conexao);
?>
<?php
if(!$ok){
echo("<meta http-equiv=\"refresh\" content=\"" . $sec . "\">");
}
?>
Erro:
Warning: Invalid argument supplied for foreach() in C:\Inetpub\vhosts\site.com.br\httpdocs\Adm\smtp.class\smtp.class.php on line 108
985 ) mensagem para email@hotmail.com enviada com sucesso!
SMTP CLass
<?php
define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);
define('SMTP_STATUS_CONNECTED', 2, TRUE);
class smtp{
var $connection;
var $recipients;
var $headers;
var $timeout;
var $errors;
var $status;
var $body;
var $from;
var $host;
var $port;
var $helo;
var $auth;
var $user;
var $pass;
/***************************************
** Constructor function. Arguments:
** $params - An assoc array of parameters:
**
** host - The hostname of the smtp server Default: localhost
** port - The port the smtp server runs on Default: 25
** helo - What to send as the HELO command Default: localhost
** (typically the hostname of the
** machine this script runs on)
** auth - Whether to use basic authentication Default: FALSE
** user - Username for authentication Default: <blank>
** pass - Password for authentication Default: <blank>
** timeout - The timeout in seconds for the call Default: 5
** to fsockopen()
***************************************/
function smtp($params = array()){
if(!defined('CRLF'))
define('CRLF', "\r\n", TRUE);
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array();
foreach($params as $key => $value){
$this->$key = $value;
}
}
/***************************************
** Connect function. This will, when called
** statically, create a new smtp object,
** call the connect function (ie this function)
** and return it. When not called statically,
** it will connect to the server and send
** the HELO command.
***************************************/
function connect($params = array()){
if(!isset($this)){
$obj = new smtp($params);
if($obj->connect()){
$obj->status = SMTP_STATUS_CONNECTED;
}
return $obj;
}else{
$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
// socket_set_timeout($this->connection, 0, 250000);
$greeting = $this->get_data();
if(is_resource($this->connection)){
return $this->auth ? $this->ehlo() : $this->helo();
}else{
$this->errors[] = 'Failed to connect to server: '.$errstr;
return FALSE;
}
}
}
/***************************************
** Function which handles sending the mail.
** Arguments:
** $params - Optional assoc array of parameters.
** Can contain:
** recipients - Indexed array of recipients
** from - The from address. (used in MAIL FROM:),
** this will be the return path
** headers - Indexed array of headers, one header per array entry
** body - The body of the email
** It can also contain any of the parameters from the connect()
** function
***************************************/
function send($params = array()){
foreach($params as $key => $value){
$this->set($key, $value);
}
if($this->is_connected()){
// Do we auth or not? Note the distinction between the auth variable and auth() function
if($this->auth){
if(!$this->auth())
return FALSE;
}
$this->mail($this->from);
if(is_array($this->recipients))
foreach($this->recipients as $value)
$this->rcpt($value);
else
$this->rcpt($this->recipients);
if(!$this->data())
return FALSE;
// Transparency
$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers)));
$body = str_replace(CRLF.'.', CRLF.'..', $this->body);
$body = $body[0] == '.' ? '.'.$body : $body;
$this->send_data($headers);
$this->send_data('');
$this->send_data($body);
$this->send_data('.');
return (substr(trim($this->get_data()), 0, 3) === '250');
}else{
$this->errors[] = 'Not connected!';
return FALSE;
}
}
/***************************************
** Function to implement HELO cmd
***************************************/
function helo(){
if(is_resource($this->connection)
AND $this->send_data('HELO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
}else{
$this->errors[] = 'HELO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/***************************************
** Function to implement EHLO cmd
***************************************/
function ehlo(){
if(is_resource($this->connection)
AND $this->send_data('EHLO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
}else{
$this->errors[] = 'EHLO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/***************************************
** Function to implement AUTH cmd
***************************************/
function auth(){
if(is_resource($this->connection)
AND $this->send_data('AUTH LOGIN')
AND substr(trim($error = $this->get_data()), 0, 3) === '334'
AND $this->send_data(base64_encode($this->user)) // Send username
AND substr(trim($error = $this->get_data()),0,3) === '334'
AND $this->send_data(base64_encode($this->pass)) // Send password
AND substr(trim($error = $this->get_data()),0,3) === '235' ){
return TRUE;
}else{
$this->errors[] = 'AUTH command failed: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/***************************************
** Function that handles the MAIL FROM: cmd
***************************************/
function mail($from){
if($this->is_connected()
AND $this->send_data('MAIL FROM:<'.$from.'>')
AND substr(trim($this->get_data()), 0, 2) === '250' ){
return TRUE;
}else
return FALSE;
}
/***************************************
** Function that handles the RCPT TO: cmd
***************************************/
function rcpt($to){
if($this->is_connected()
AND $this->send_data('RCPT TO:<'.$to.'>')
AND substr(trim($error = $this->get_data()), 0, 2) === '25' ){
return TRUE;
}else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}
/***************************************
** Function that sends the DATA cmd
***************************************/
function data(){
if($this->is_connected()
AND $this->send_data('DATA')
AND substr(trim($error = $this->get_data()), 0, 3) === '354' ){
return TRUE;
}else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}
/***************************************
** Function to determine if this object
** is connected to the server or not.
***************************************/
function is_connected(){
return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));
}
/***************************************
** Function to send a bit of data
***************************************/
function send_data($data){
if(is_resource($this->connection)){
return fwrite($this->connection, $data.CRLF, strlen($data)+2);
}else
return FALSE;
}
/***************************************
** Function to get data.
***************************************/
function &get_data(){
$return = '';
$line = '';
if(is_resource($this->connection)){
while(strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ' '){
$line = fgets($this->connection, 512);
$return .= $line;
}
return $return;
}else
return FALSE;
}
/***************************************
** Sets a variable
***************************************/
function set($var, $value){
$this->$var = $value;
return TRUE;
}
} // End of class
?>
Discussão (2)
Carregando comentários...