Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/01/2005, 22:14
cherubene
 
Fecha de Ingreso: agosto-2004
Mensajes: 27
Antigüedad: 19 años, 7 meses
Puntos: 0
Enviar mail con archivo adjunto con php Mailer

Estoy intentando enviar un email a un correo determinado, con archivo adjunto para el cual uso la clase phpMailer que tanto se ha comentado:
El script es así:

<?
//Es necesario que al menos haya algun dato solicitado
$error="";

if ($enviar) {
if ((!$nickname) && (!$suemail)) {
$error.="Debe completar alguno de los datos solicitados";
}
}

if ($enviar && !$error) {

//creamos un array que estará formado por los datos a ingresar
if ($nickname) {
$direcciones["dato1"]=$nickname;
}
if ($suemail) {
$direcciones["dato2"]=$suemail;
}


//pasamos a enviar el correo

// primero hay que incluir la clase phpmailer para poder instanciar
//un objeto de la misma
require "includes/class.phpmailer.php";

//instanciamos un objeto de la clase phpmailer al que llamamos
//por ejemplo mail
$mail = new phpmailer();

//Definimos las propiedades y llamamos a los métodos
//correspondientes del objeto mail

//Con PluginDir le indicamos a la clase phpmailer donde se
//encuentra la clase smtp que como he comentado al principio de
//este ejemplo va a estar en el subdirectorio includes
$mail->PluginDir = "includes/";

//Con la propiedad Mailer le indicamos que vamos a usar un
//servidor smtp
$mail->Mailer = "smtp";

//Asignamos a Host el nombre de nuestro servidor smtp
$mail->Host = "smtp.miservidor.com";

//Le indicamos que el servidor smtp requiere autenticación
$mail->SMTPAuth = true;

//Le decimos cual es nuestro nombre de usuario y password
$mail->Username = "[email protected]";
$mail->Password = "mipassword";

//Indicamos cual es nuestra dirección de correo y el nombre que
//queremos que vea el usuario que lee nuestro correo
$mail->From = "[email protected]";
$mail->FromName = "Mi Nombre";

//Asignamos asunto y cuerpo del mensaje
$mail->Subject = "Asunto";
$mail->Body = "Titulo";
$mail->Body .= "Nombre: " . $HTTP_POST_VARS["nickname"] . "\n";
$mail->Body .= "Email: " . $HTTP_POST_VARS["suemail"] . "\n";
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar
//una cuenta gratuita y voy a usar attachments, por tanto lo pongo a 120
$mail->Timeout=120;

//Indicamos el fichero a adjuntar si el usuario seleccionó uno en el formulario
if ($achivo !="none") {
$mail->AddAttachment($archivo,$archivo_name);
}

//Indicamos cual es la dirección de destino del correo
$mail->AddAddress("[email protected]");

//se envia el mensaje, si no ha habido problemas la variable $success
//tendra el valor true
$exito = $mail->Send();

//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas
//como mucho para intentar enviar el mensaje, cada intento se hara 5 s
//segundos despues del anterior, para ello se usa la funcion sleep
$intentos=1;
while((!$exito)&&($intentos<5)&&($mail->ErrorInfo!="SMTP Error: Data not accepted")){
sleep(5);
//echo $mail->ErrorInfo;
$exito = $mail->Send();
$intentos=$intentos+1;
}

//La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
//attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho
//valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
$exito=true;
}

if(!$exito)
{
echo "Problemas enviando correo electrónico a ".$valor;
echo "<br/>".$mail->ErrorInfo;
}
else
{
//Mostramos un mensaje indicando las direccion de
//destino y fichero adjunto enviado en el mensaje
$mensaje="<p>Hemos recibido sus datos y los procesaremos a la brevedad<br/>";
if ($archivo !="none") {
$mensaje.="Con su fichero adjunto".$archivo_name;
}
$mensaje.="</p>";
echo $mensaje;


}

echo "<a href='$PHP_SELF'> VOLVER AL FORMULARIO</a>";
}
else {
?>

<HTML>

<BODY>
<? If ($error) echo "<font color='red'>$error</font>";?>
<FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="<?=$PHP_SELF?>">
<TABLE BORDER=0 ALIGN="CENTER">
<TR>
<TD>Ingrese su nombre:</TD>
<TD><INPUT TYPE="text" NAME="nickname" MAXLENGTH="30" SIZE="35"></TD>
</TR>
<TD>Ingrese su direcci&oacute;n de email:</TD>
<TD><INPUT TYPE="text" NAME="suemail" MAXLENGTH="35" SIZE="35"></TD>
</TR>
<TD>Adjuntar fichero:</TD>
<input type="hidden" name="MAX_FILE_SIZE" value="307200">
<TD><INPUT TYPE="file" NAME="archivo" SIZE="35"></TD>
</TR>
<TR>
<TD COLSPAN="2" ALIGN="CENTER"><INPUT TYPE="submit" VALUE="Enviar" name="enviar"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<?
}
?>

El problema es que cuando lo uso con el servidor local funciona bien, pero cuando lo quiero ejecutar desde la página web no me adjunta el archivo.
Debo configurar de alguna forma el include class.phpmailer.php o qué estoy haciendo mal?

Última edición por cherubene; 17/01/2005 a las 22:17 Razón: Tenía un error