Foros del Web » Programando para Internet » PHP »

Autenticación SMTP

Estas en el tema de Autenticación SMTP en el foro de PHP en Foros del Web. Hola, quisiera saber si hay alguna forma de enivar correos autenticados en SMTP con la función mail() Gracias...
  #1 (permalink)  
Antiguo 25/05/2005, 15:33
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 0
Autenticación SMTP

Hola, quisiera saber si hay alguna forma de enivar correos autenticados en SMTP con la función mail()

Gracias
  #2 (permalink)  
Antiguo 25/05/2005, 15:59
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 127
Antigüedad: 20 años, 3 meses
Puntos: 0
La función mail() de PHP no autentifica en SMTP, podrías utilizar clases como phpmailer para tal fin (http://phpmailer.sourceforge.net)


Saludos
  #3 (permalink)  
Antiguo 25/05/2005, 16:24
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 0
Ahora bien, ya tengo funcionando la clase phpmailer, funciona bien, pero... como puedo hacer para que al enviar un correo en html, las imágenes insertadas en dicho cuerpo de mensaje, automáticamente se le sea asignado un CID a cada una de ellas, de manera que las fotos queden embebidas en el mensaje (no archivos adjuntos). He intentado pero en los clientes de correo el código del "a href" termina siendo de este tipo: <img src="http://www.miweb.com/foto.jpg border="0"> y no de este: <img src="cid:image_666b2d22d9c8df9775ee4380914ffd32" border="0">

Graxias!!!
  #4 (permalink)  
Antiguo 25/05/2005, 18:29
 
Fecha de Ingreso: enero-2004
Ubicación: Santiago
Mensajes: 127
Antigüedad: 20 años, 3 meses
Puntos: 0
Si hubieras leido la info adjunta, hubieras visto el método:

AddEmbeddedImage (string $path, string $cid, [string $name = ""], [string $encoding = "base64"], [string $type = "application/octet-stream"])

Esto añade una imágen a traves del sistema de archivos del servidor.


Saludos
  #5 (permalink)  
Antiguo 25/05/2005, 19:43
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 0
Sabes lo que ocurre HiperJP?, yo pido que si digo una burrada por favor me corrijan. Por lo que he estado observando en la info adjunta y ejemplos AddEmbeddedImage solo sirve para, como bien dices, colocar imagenes embebidas en el cuerpo del mensaje, la cuestión aquí es que debo agregar manualmente una cid en cada imagen, relamente no he encontrado la manera de hacer esto automáticamente cosa de que le asigne ese valor con tan solo encontrar algo así en un código html: <img src="http://www.miweb.com/foto.jpg border="0">. He visto otra clase de similar a phpmailer con la diferencia que trabaja con la función mail(), pero hace a la perfección esto que les estoy comentando, coloca un identificador a la imagen automáticamente al encontrar un código como el anterior si tener que agregar por cada imagen esto: $mail->AddEmbeddedImage('image.gif', 'image', 'image.gif');

La clase de la que les hablo es "mmail" y como les digo, no tengo problema y hace lo que preciso, el único inconveninte es que no puedo enviar con autentificación SMTP, por lo que si uso esta clase, en el maldito hotmail los correos van a parar a la bonita carpeta "correo no deseado"

el código que utiliza esta clase es algo asi (reemplazar el img src="ubicacion" por img src"cid:blablabla")

Código PHP:
    function parseHtml($boundary)
    {
        
$images = array();
        
$html_images "";
        
preg_match_all("/src=\"[^\"]*\"/"$this->Body_html$images);
        foreach(
$images[0] as $image)
        {
            
$path preg_replace(array("/src=/""/\"/"), ""$image);
            
$iname explode('/'$path);
            
$iname $iname[count($iname)-1];
            
$itype explode('.'$iname);
            
$itype $itype[count($itype)-1];
            
$cid 'image_'.md5(microtime());
            
$path preg_replace("/http\:\/\//"""$path);
            
$path explode("/"$path);
            
$path[0] = substr($_SERVER['DOCUMENT_ROOT'],0,strlen($_SERVER['DOCUMENT_ROOT']));
            
$path implode("/"$path);
            
$fp fopen($path,'r');
            
$data chunk_split(base64_encode(fread($fpfilesize($path))));
            
fclose($fp);
            
$this->Body_html preg_replace("/(".addcslashes($image"./").")/""src=\"cid:".$cid."\""$this->Body_html);
            
$html_images .= "--".$boundary."\n".
                                            
"Content-Type: image/".$itype."; name=\"".$iname."\"\n".
                                            
"Content-Transfer-Encoding: base64\n".
                                            
"Content-ID: <".$cid.">\n".
                                            
"Content-Disposition: attachment; filename=".$iname."\n\n".
                                            
$data."\n\n";
        }
        
$this->Html_images $html_images;
        if(!
$this->Body_txt)
            
$this->Body_txt strip_tags($this->Body_html);
    } 
Será posible hacer esto con phpmailer, es que no hay nada sobre el tema.

Gracias

  #6 (permalink)  
Antiguo 26/05/2005, 09:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. si ya tienes la función hecha (o casi) podrías adaptarla a PHP Mailer .. de hecho fijate lo que hace o como trabaja esta (al parecer):

Todo este código:
function parseHtml($boundary)
{
$images = array();
$html_images = "";
preg_match_all("/src=\"[^\"]*\"/", $this->Body_html, $images);
foreach($images[0] as $image)
{
$path = preg_replace(array("/src=/", "/\"/"), "", $image);
$iname = explode('/', $path);
$iname = $iname[count($iname)-1];
$itype = explode('.', $iname);
$itype = $itype[count($itype)-1];
$cid = 'image_'.md5(microtime());
$path = preg_replace("/http\:\/\//", "", $path);
$path = explode("/", $path);
$path[0] = substr($_SERVER['DOCUMENT_ROOT'],0,strlen($_SERVER['DOCUMENT_ROOT']));
$path = implode("/", $path);

más o menos hasta ahí .. hace tu reemplazo de todos los tag's HTML que se ecuentren en el cuerpo de tu e-mail de tipo <img src= ....> (y no sólo imagen .. sino referencias externas a <javascript scr=....> etc .. ) por el famoso "CID" (que no sabía .. pero es un nombre para hacerlo único al parecer ...)

Luego tienes la función o método de la classe PHP Mailer que ya conoces .. la cual lee el archivo de su ubicación física, y lo incrustra en el e-mail (en la parte que se requiere .. en su base hace todos esos "fopen()" que en tu función original tienes y el manejo de las cabeceras HTTP que hace) ..

Así que llegado a este punto .. el "CID" ya lo tienes ($cid) .. también el nombre de la imagen que ha de quedar también ($image o basename($path) ... no sé si realmente $imagen contiene sólo el nombre de la imagen ahora mismo) y la ruta+nombre de la imagen .. también ($path) .. justamente son esos los tres parámetros que necesitas para usar (el nombre de la imagen sería opcional .. ):

AddEmbeddedImage ()


En resumen .. debería quedar algo tipo (tu función):

Código PHP:
function parseHtml($boundary
    { 
        global 
$mail// llamamos de forma global a objeto de PHP Mailer ... (si no es ese el nombre instanciado de la classe PHP Mailer .. cambialo.
        
$images = array(); 
        
$html_images ""
        
preg_match_all("/src=\"[^\"]*\"/"$this->Body_html$images); 
        foreach(
$images[0] as $image
        { 
            
$path preg_replace(array("/src=/""/\"/"), ""$image); 
            
$iname explode('/'$path); 
            
$iname $iname[count($iname)-1]; 
            
$itype explode('.'$iname); 
            
$itype $itype[count($itype)-1]; 
            
$cid 'image_'.md5(microtime()); 
            
$path preg_replace("/http\:\/\//"""$path); 
            
$path explode("/"$path); 
            
$path[0] = substr($_SERVER['DOCUMENT_ROOT'],0,strlen($_SERVER['DOCUMENT_ROOT'])); 
            
$path implode("/"$path); 

$mail->AddEmbeddedImage ($path,$cid,basename($path));

Un saludo,
  #7 (permalink)  
Antiguo 27/05/2005, 00:00
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 0
Graxias Cluster, eres un maestro del web, pero de verdad

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.