Tema: arrays...
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/06/2003, 22:40
GuitarMan
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 22 años
Puntos: 0
muchas gracias por tu pronta respuesta....

el problema ya lo soluciones.. unicamente era lo de las doble comillas (")...

pero ahora me surgue un inconveniente... veras.. lo que trato de hacer es un sistema de lista de correos en php... que use sendmail ....

he encontrado una libreria en un tema de este foro....

... el codigo de la libreria es... (class.smtp.inc)

Código PHP:
<?php
/*************************************** 
** Filename.......: class.smtp.inc 
** Project........: SMTP Class 
** Version........: 1.0.5 
** Last Modified..: 21 December 2001 
***************************************/ 

define('SMTP_STATUS_NOT_CONNECTED'1TRUE); 
define('SMTP_STATUS_CONNECTED'2TRUE); 

class 
smtp

var 
$authenticated
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: 
** pass - Password for authentication Default: 
** 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->authenticated FALSE
$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->status)){ 
$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); 
if(
function_exists('socket_set_timeout')){ 
@
socket_set_timeout($this->connection50); 


$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 AND !$this->authenticated){ 
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('.'); 

$result = (substr(trim($this->get_data()), 03) === '250'); 
//$this->rset(); 
return $result
}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()), 03) === '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()), 03) === '250' ){ 

return 
TRUE

}else{ 
$this->errors[] = 'EHLO command failed, output: ' trim(substr(trim($error),3)); 
return 
FALSE



/*************************************** 
** Function to implement RSET cmd 
***************************************/ 

function rset(){ 
if(
is_resource($this->connection
AND 
$this->send_data('RSET'
AND 
substr(trim($error $this->get_data()), 03) === '250' ){ 

return 
TRUE

}else{ 
$this->errors[] = 'RSET command failed, output: ' trim(substr(trim($error),3)); 
return 
FALSE



/*************************************** 
** Function to implement QUIT cmd 
***************************************/ 

function quit(){ 
if(
is_resource($this->connection
AND 
$this->send_data('QUIT'
AND 
substr(trim($error $this->get_data()), 03) === '221' ){ 

fclose($this->connection); 
$this->status SMTP_STATUS_NOT_CONNECTED
return 
TRUE

}else{ 
$this->errors[] = 'QUIT 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()), 03) === '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' ){ 

$this->authenticated TRUE
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()), 02) === '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()), 02) === '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()), 03) === '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.CRLFstrlen($data)+2); 

}else 
return 
FALSE


/*************************************** 
** Function to get data. 
***************************************/ 

function &get_data(){ 

$return ''
$line ''
$loops 0

if(
is_resource($this->connection)){ 
while((
strpos($returnCRLF) === FALSE OR substr($line,3,1) !== ' ') AND $loops 100){ 
$line fgets($this->connection512); 
$return .= $line
$loops++; 

return 
$return

}else 
return 
FALSE


/*************************************** 
** Sets a variable 
***************************************/ 

function set($var$value){ 

$this->$var $value
return 
TRUE


// End of class 
?>

continua en el siguiente post....

y el archivo de ejecucion es (example.php) :

Código PHP:
<?
/***************************************/ 
include('class.smtp.inc'); 
$params['host'] = 'localhost'
$params['port'] = 25
$params['helo'] = exec('hostname'); 
$params['auth'] = TRUE
$params['user'] = 'webmaster'
$params['pass'] = 'miclave'
/***************************************/ 

/***************************************/ 
$send_params['recipients'] = array('[email protected]'); 
$send_params['headers'] = array('From: "WebMaster" ','To: [email protected]''Subject: Test email'); 
$send_params['from'] = '[email protected]'
$send_params['body'] = '.Test email.'

/***************************************/ 

/***************************************/ 
if(is_object($smtp smtp::connect($params)) AND $smtp->send($send_params)){ 
echo 
'Email sent successfully!'."\r\n\r\n"
print_r($smtp->errors); 
}else{ 
echo 
'Error sending mail'."\r\n\r\n"
print_r($smtp->errors); 

/***************************************/ 
?>

el problema es que en este archivo de ejecucion yo quisiera enviar multiples correos al sendmail... en donde las direcciones son tomadas de una base de datos.... ejemplo:

Código PHP:
$query "SELECT email FROM ${prefix}_newsletter WHERE status='2'"
$result mysql_query($query); 
while (list (
$sendto) = mysql_fetch_row($result)) 

if (
$sendhow == '1'// aqui distingue si es modo texto o modo html 

mail("$sendto"stripslashes($sub), stripslashes(strip_tags($text)), "From: $send"); ..... 
en este ejemplo uso la cfuncion mail de php.. y esta va de manera perfecta... envia los mail... pero quisiera que envie a traves del sendmail... que deberia de colocar aca? yo trate de la siguiente manera:

Código PHP:
$query "SELECT email FROM ${prefix}_newsletter WHERE status='2'"
$result mysql_query($query); 
while (list (
$sendto) = mysql_fetch_row($result)) 

if (
$sendhow == '1'// aqui distingue si es modo texto o modo html 

    
$send_params['recipients']    = array("$sendto");
    
$send_params['headers']        = array("From: $send""To: $sendto""Subject: $sub");
    
$send_params['body']        = "$text";                
    
$send_params['from']        = "$send"; ..... 
peor no me enviar los multiples email... :( ... si en vez de la variable coloco [email protected] ... el correo si es enviado... pero asi solo me enviaria uno... la idea es enviar a la lista completa... =)


alguna sugerencia de como enviar la lista completa a sendmail???