Foros del Web » Programando para Internet » PHP »

Problema con mail() al enviar un newsletter

Estas en el tema de Problema con mail() al enviar un newsletter en el foro de PHP en Foros del Web. Hola amigos foreros!! Estoy tratando de enviar un newsletter con PHP a través del comando mail(), pero al realizar el envío, en cuerpo del mensaje ...
  #1 (permalink)  
Antiguo 22/06/2006, 06:35
djb
 
Fecha de Ingreso: noviembre-2005
Ubicación: España
Mensajes: 22
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Problema con mail() al enviar un newsletter

Hola amigos foreros!!

Estoy tratando de enviar un newsletter con PHP a través del comando mail(), pero al realizar el envío, en cuerpo del mensaje se llena de exclamaciones ( ! ), de forma que puede ser visualizado correctamente. Para enviarlo utilizo lo siguiente:

$sfrom = "[email protected]";
$sdestinatario = $clientes -> fields('email');
$ssubject = "NEWSLETTER";
$shtml = $cuerpo;
$sheader = "From:".$sfrom."\nReply-To:".$sfrom."\n";
$sheader = $sheader."X-Mailer:PHP/".phpversion()."\n";
$sheader = $sheader."Mime-Version: 1.0\n";
$sheader = $sheader."Content-Type: text/html";
mail($sdestinatario, $ssubject, $shtml, $sheader);

¿Alguein ha tenido el mismo problema? ¿Alguna idea?

Muchas gracias

Última edición por djb; 22/06/2006 a las 08:59
  #2 (permalink)  
Antiguo 22/06/2006, 08:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. como veras .. mencionas un montón de variables que no se vé su contenido .. por ejemplo el mismisimo $cuerpo .. por ahí podrías tener el problema.

También te recomiendo leer tus e-mails en otros clientes de correo .. sobre todo para verificar problemas en la codificación del e-mail y/o Charset que empleas (en función del "contenido" de tu $cuerpo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 22/06/2006, 08:52
djb
 
Fecha de Ingreso: noviembre-2005
Ubicación: España
Mensajes: 22
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta

Ok, error mio:

$clientes -> fields('email') es un campo con direcciones de correo, y $cuerpo no he puesto el contenido porque es demasiado largo, pero contiene una página HTML con unas tablas normales...bueno, creo que nada raro. Otras veces lo he hecho, y no me ha dado problema.

He encontrado un mensaje en el foro de ASP que puede estar relacionado:

Cita:
Iniciado por vissantet
Siento haber tardado tanto en contestar. El símbolo ! aparece siempre en el carácter número 991 del código. La solución reside en colocar la siguiente línea de código justo antes de la línea del objCDOSYSMail.HTMLBody:

objCDOSYSMail.BodyPart.ContentTransferEncoding = "quoted-printable"


Creo que esto funciona ya que no me ha vuelto a salir...


Saludos
¿Alguna idea?

Cluster, Muchas gracias por contestar tan rápido.
  #4 (permalink)  
Antiguo 22/06/2006, 09:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé nada de ASP .. pero veo que habla de cierta codificación HTTP para componer el e-mail (que generas en HTML).

En ese caso .. usemos google a ver que dice (unos segundos despues ....):

De la documentación oficial de PHP sobre mail() .. en los comentarios de los usuarios aparece esto:


Cita:
f dot touchard at laposte dot net
31-Jan-2003 05:46
***Encoding plain text as quoted-printable in MIME email***

If you don't want to install IMAP and use imap_8bit() to encode plain text or html message as quoted-printable
(friendly french special characters encoding in MIME email, try this function.
I haven't fully tested it ( like with microtime with long mails). I send html message as 7-bit, so I didn't try yet with html.
If you have good html practise, you don't really need to encode html as quote-printable as it only uses 7-bit chars.
F.Touchard
Código PHP:
function qp_encoding($Message) {
   
   
/* Build (most polpular) Extended ASCII Char/Hex MAP (characters >127 & <255) */
   
for ($i=0$i<127$i++) {
       
$CharList[$i] = "/".chr($i+128)."/";
       
$HexList[$i] = "=".strtoupper(bin2hex(chr($i+128)));
   }

   
/* Encode equal sign & 8-bit characters as equal signs followed by their hexadecimal values */
   
$Message str_replace("=""=3D"$Message);
   
$Message preg_replace($CharList$HexList$Message);

   
/* Lines longer than 76 characters (size limit for quoted-printable Content-Transfer-Encoding)
       will be cut after character 75 and an equals sign is appended to these lines. */ 
   
$MessageLines split("\n"$Message);
   
$Message_qp "";
   while(list(, 
$Line) = each($MessageLines)) {
       if (
strlen($Line) > 75) {
           
$Pointer 0;        
           while (
$Pointer <= strlen($Line)) {
               
$Offset 0;
               if (
preg_match("/^=(3D|([8-9A-F]{1}[0-9A-F]{1}))$/"substr($Line, ($Pointer+73), 3))) $Offset=-2;
               if (
preg_match("/^=(3D|([8-9A-F]{1}[0-9A-F]{1}))$/"substr($Line, ($Pointer+74), 3))) $Offset=-1;
               
$Message_qp.= substr($Line$Pointer, (75+$Offset))."=\n";
               if ((
strlen($Line) - ($Pointer+75)) <= 75) {                
                   
$Message_qp.= substr($Line, ($Pointer+75+$Offset))."\n";
                   break 
1;
               }
               
$Pointer+= 75+$Offset;
           }
       } else {
           
$Message_qp.= $Line."\n";
       }
   }        
   return 
$Message_qp;

Espero que te sirva ... Como veras .. si dispones de la extensión IMAP .. puedes usar la función que dejé marcada .. Si no tienes esa función o no quieres depender de que donde ejecutes tu aplicación tengas que tener instalado el soporte IMAP .. usa la función propuesta que "dice" funcionar bien ...

Ya nos contaras que tal te fué.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 22/06/2006, 09:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por cierto .. nunca me había planteado ese tipo de problemas .. realmente uso la classe:

PHPMailer
http://phpmailer.sourceforge.net

que implementa (ni lo "sabía") esos metodos ya en su código .. Realmente (no es por hacer publicidad gratuita) pero cada día estoy mas "contento" con dicha classe .. Te invito a que la veas. Solventa muchos problemas "cotidianos" con la generación de e-mails con PHP.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 22/06/2006, 09:19
djb
 
Fecha de Ingreso: noviembre-2005
Ubicación: España
Mensajes: 22
Antigüedad: 12 años, 1 mes
Puntos: 0
Gracias Cluster!!

De todas formas he estado probrando y el problema consiste en que crea lineas de 991 caracteres, y despues pone ! y un salto de linea.

Era más sencillo de lo que parecia, solamente terminando cada linea con un caracter 13+10 se soluciona.

Un saludo y muchas gracias!!!!
  #7 (permalink)  
Antiguo 22/06/2006, 09:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por djb
Gracias Cluster!!

De todas formas he estado probrando y el problema consiste en que crea lineas de 991 caracteres, y despues pone ! y un salto de linea.

Era más sencillo de lo que parecia, solamente terminando cada linea con un caracter 13+10 se soluciona.

Un saludo y muchas gracias!!!!
Bueno .. gracias por la observación, nos queda como cultura generarl. Pero como veras siempre en el foro requerimos de "datos" para evaluar un problema .. tal vez alguien hubiera visto ese tipo de "$cuerpo" y te hubiera hecho algún comentario al respecto.

Este comentario mio es sólo para que veas lo importante que es poner todos los antecedentes ante un problema que expongas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 22/06/2006, 09:47
djb
 
Fecha de Ingreso: noviembre-2005
Ubicación: España
Mensajes: 22
Antigüedad: 12 años, 1 mes
Puntos: 0
OK, me queda claro para la próxima. Gracias de nuevo.
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 18:47.