PDA

Ver la Versión Completa : colocar un attach dentro del envio del correo


srangel
09-11-2005, 17:45:07
hago el envio de correo desde el programa php ...ahora mi duda es como puedo colocar un attach de un archivo de excel......no se como se define dentro de php...si me pudieran ayudar se los agradeceria.....

salvica
10-11-2005, 22:35:58
Hola srangel, buenas noches.

Promero deberias decirnos el programa que usas para enviar correo, ya que estos cambian unos de otros.

Yo, personalmente, utilizo el "phpmailer" y es tan sencillo como:

/*
+------------------------------------------------------------------------
| definir los parámetros de "phpMailer"
+------------------------------------------------------------------------
*/
require( $pathBase . "sql/hostSMP.inc" );
require( "class.phpmailer.php" );
$mail = new PHPMailer();
$mail->SetLanguage("es", "language/"); //--------- en Español
$mail->IsSMTP(); // ----------------------------- enviar via SMTP
$mail->Host = "$hostName"; // -------------- servidor/es SMTP
$mail->SMTPAuth = true; // ---------------------- SMTP requiere contraseñas
$mail->Username = "$hostUser"; // -------------- SMTP username
$mail->Password = "$hostPass"; // --------------- SMTP password
$ContentType = "text/html"; // --------------- tipo de contenido del mensaje
$mail->From = "$hostEMail"; // -------------- email del remitente
$mail->FromName = "$hostAlias"; // -------------- nombre del remitente
// ---------------------------------------------- destinatario(s)
for( $i=0; $i<count($arrayEmail); $i++ ) {
$mail->AddAddress("$arrayEmail[$i]", "$arrayLista[$i]");
}
// ---------------------------------------------- responder a ...
$mail->AddReplyTo("$hostEMail", "$hostAlias");
$mail->WordWrap = 200; // ----------------------- establecer el ancho de la línea
// ---------------------------------------------- FICHEROS A ENVIAR
$mail->AddAttachment("../imagen/imagen.gif");
$mail->AddAttachment("../textos/texto.txt");
$mail->IsHTML(true); // ------------------------- enviar como HTML
$mail->Subject = "$asunto"; // ---------------- asunto del mensaje
$mail->Body = "$cssHtml"
. "$cuerpoHtml"; // ------------ mensaje en "Html"
$mail->AltBody = "$cuerpoText"; // ------------ mensaje en "Solo Texto"
/*
+------------------------------------------------------------------------
| enviar el correo con "phpMailer"
+------------------------------------------------------------------------
*/
if( !$mail->Send() ) {
echo "El mensaje NO ha sido enviado <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
?>

El script (son dos: "class.phpmailer.php" y "class.smtp.php") los puedes bajar de http://www.programacion.com/php/articulo/phpmailer/ (no sé si habán actualizado la versión, creo que van por la 1.72 o algo así, además te explican como configurarlo y los parámetros que necesita.

Saludos: salvica

srangel
25-11-2005, 16:03:55
este es el codigo que tengo ahorita funcionando ....pero el unico problema que tengo que solo me manda el archivo no me manda lo que contiene el mensaje1....y yo lo que requiero es que venga tanto con el texto como con el archivo....espero y me puedas ayudar ....


$asunto = "Encuesta Servicio";
$mensaje1="<html><head></head><body><p align=center><strong>".
"Se Envia el Formato de Quejas de los Servicios de Calibracion</p></body></html>";
$archivo="encuesta.xls";
$cabeceras = "MIME-Version: 1.0\r\n";
$cabeceras .= "From: Solicitudes de Calibracion \n";
$cabeceras .= "Content-type: text/html;name=\"my attachment\"\n";
$cabeceras .= "Content-Transfer-Encoding: base64\n";
$cabeceras .= "Content-Disposition: attachment; filename=\"$archivo\"\n\n";
$path = "/usr/local/etc/httpd/htdocs/CursoNet/Solicitudes/encuesta.xls";
$fp = fopen($path, 'r');
do //we loop until there is no data left
{
$data = fread($fp, 8192);
if (strlen($data) == 0) break;
$content .= $data;
} while (true);
$content_encode = chunk_split(base64_encode($content));
$cabeceras .= $content_encode . "\n";
$cabeceras .= "--" . $boundary . "\n";
$cabeceras .= "From: Envio del Formato de Quejas\n";
$headers .= "MIME-Version: 1.0\n";
mail($para,$asunto,$mensaje1,$cabeceras);

salvica
26-11-2005, 01:24:16
Hola srangel, buenas noches
Primero utiliza las etiquetas PHP para identar el código que sino se hace complicado leerlo ;)

Segundo, como te decía en el post anterior, no utilizo el MAIL(), por lo que si hay más errores se me hará dificil ayudarte :mad: :mad: :mad:

Según el manual de php, la opción MIME-Version: 1.0 la pone dentro de la cabecera, mientras que tú la pones en headers, o sea tú pones:

$cabeceras .= $content_encode . "\n";
$cabeceras .= "--" . $boundary . "\n";
$cabeceras .= "From: Envio del Formato de Quejas\n";
$headers .= "MIME-Version: 1.0\n";

y en el manual pone (te lo pongo íntegro):

/* recipientes */
$para = "maria@example.com" . ", " ; // fijese en la comma
$para .= "kelly@example.com";
/* asunto */
$asunto = "Recordatorio de Cumplea&ntilde;os para Agosto";
/* mensaje */
$mensaje = '
<html><head><title>Recordatorio de Cumplea&ntilde;os para Agosto</title></head>
<body><p>&iexcl;Aqu&iacute; est&aacute;n los cumplea&ntilde;os que llegan en Agosto!</p>
<table><tr><th>Persona</th><th>D&iacute;a</th><th>Mes</th><th>A&ntilde;o</th></tr>
<tr><td>Juan</td><td>3</td><td>August</td><td>1970</td></tr>
<tr><td>Sandra</td><td>17</td><td>August</td><td>1973</td></tr>
</table></body></html>';

/* Para enviar correo HTML, puede definir la cabecera Content-type. */
$cabeceras = "MIME-Version: 1.0\r\n";
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* cabeceras adicionales */
$cabeceras .= "To: Maria <maria@example.com>, Kelly <kelly@example.com>\r\n";
$cabeceras .= "From: Recordatorio <cumpleanyos@example.com>\r\n";
$cabeceras .= "Cc: archivo@example.com\r\n";
$cabeceras .= "Bcc: chequeo@example.com\r\n";

/* y ahora, enviarlo */
mail($para, $asunto, $mensaje, $cabeceras);

No sé si eso y la forma de la disposición tendran algo que ver.

Siento no poderte ser de más ayuda.:(
Saludos
salvica