Foros del Web » Programando para Internet » PHP »

PHP Mailer dejó de funcionar en todos mis dominios

Estas en el tema de PHP Mailer dejó de funcionar en todos mis dominios en el foro de PHP en Foros del Web. Hola, usualmente uso phpmailer en los formularios de contacto de las webs que hago. Pero me he dado cuenta que ya no funciona. Hice varias ...
  #1 (permalink)  
Antiguo 03/12/2014, 00:38
 
Fecha de Ingreso: junio-2008
Mensajes: 7
Antigüedad: 15 años, 9 meses
Puntos: 0
PHP Mailer dejó de funcionar en todos mis dominios

Hola, usualmente uso phpmailer en los formularios de contacto de las webs que hago. Pero me he dado cuenta que ya no funciona. Hice varias pruebas pero ninguna funciona. Este es el código que siempre me funcionó y ahora ya no:
(además por supuesto el class.phpmailer.php y el class.smtp.php)

código php:

Código:
<?php 
	include_once('class.phpmailer.php');
	

// Indica si los datos provienen del formulario
	$postback = isset($_POST['postback']) ? true : false;
	
	if ($postback) {
		extract($_POST);
		$mail = new phpmailer (); # Crea una instancia
		$mail -> From = $from;
		$mail -> FromName = $fromname; # Puede obtenerse del formulario, por facilidad se hace de esta manera
		$mail -> AddAddress ("[email protected]");
		$mail -> Subject = ("Contacto web");
		$mail -> Body = "
<b>Nombre y Apellido:</b> $fromname<br />
<b>Empresa:</b> $empresa<br />
<b>Teléfono:</b> $telefono<br />
<b>E-mail:</b> $from<br />
<b>Asunto:</b> $subject<br />
<b>Mensaje:</b> $mensaje<br />
 
$msg
";
		$mail -> IsHTML (true);
		$archivos = '';
		$msg = header("Location: muchasgracias.php");
		
	   	if (isset ($_FILES["archivos"])) { # Si es que se subió algún archivo
			$msg .= "<ul>";
			foreach ($_FILES["archivos"]["error"] as $key => $error) { # Iterar sobre la colección de archivos
				if ($error == UPLOAD_ERR_OK) { // Si no hay error
					$tmp_name = $_FILES["archivos"]["tmp_name"][$key];
					$name = $_FILES["archivos"]["name"][$key];
					$msg .= "<li>$name</li>";
					$name = uniqid('bc') . '_' . $name; # Generar un nombre único para el archivo
					$mail -> AddAttachment ($tmp_name, $name); # Añade el archivo adjunto
					/*
					Si se van a guardar los archivos en un directorio, deberían descomentarse
					las siguientes líneas, si se van a guardar los nombres 
					de los archivos en una base de datos, aquí debería realizarse algo...					
				   	
					move_uploaded_file($tmp_name, "ruta/directorio/$name"); # Guardar el archivo en una ubicación, debe tener los permisos necesarios
					*/
				} #if
	   		} # foreach
			$msg .= '</ul>';
		} # if
		if (!$mail -> Send ()){
			$msg = "No se pudo enviar el email";
		}
	}
?>
Código del formulario html:

Código:
<form action="" method="post" enctype="multipart/form-data" name="frm" class="formulario">

	<label for="fromname">Nombre:</label>
	<input type="text" name="fromname" id="fromname" class="campo"/>

	<label for="empresa">Empresa / Institución:</label>
	<input type="text" name="empresa" id="empresa" class="campo"/>

	<label for="telefono">Teléfono:</label>
	<input type="text" name="telefono" id="telefono" class="campo"/>

	<label for="from">E-mail:</label>
	<input type="text" name="from" id="from" class="campo"/>

	<label for="subject">Asunto:</label>
	<input type="text" name="subject" id="subject" class="campo"/>
	           
	<label for="mensaje">Mensaje:</label>
	<textarea name="mensaje" rows="3" id="mensaje"></textarea>
	<input type="submit" id="postback" name="postback" value="Enviar"/>
	<p><?php if (isset($msg)) echo $msg;?></p>
</form>
Agradecería infinitamente si alguien me echa un cable.

Gracias
  #2 (permalink)  
Antiguo 03/12/2014, 04:35
Avatar de brimo300  
Fecha de Ingreso: agosto-2014
Ubicación: Mataró
Mensajes: 3
Antigüedad: 9 años, 7 meses
Puntos: 1
Respuesta: PHP Mailer dejó de funcionar en todos mis dominios

A mi también me pasa, pos eso cree otra clase para mediante mail() por si me fallaba.
  #3 (permalink)  
Antiguo 03/12/2014, 04:43
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 4 meses
Puntos: 16
Respuesta: PHP Mailer dejó de funcionar en todos mis dominios

pero ha dejado de funcionar de la noche a la mañana?
imprime la variable $mail->ErrorInfo a ver que dice
  #4 (permalink)  
Antiguo 03/12/2014, 05:24
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 15 años, 11 meses
Puntos: 326
Respuesta: PHP Mailer dejó de funcionar en todos mis dominios

Probablemente sea un cambio de versión de PHP o similar en tu servidor.

Recuerdo tener que cambiar un par de líneas de class.phpmailer.php según la versión de php ;)

Edit:
En mi caso, bastó con cambiar una función de la clase, y quedó así:
Código PHP:
public static function ValidateAddress($address) {
    if ((
defined('PCRE_VERSION')) && (version_compare(PCRE_VERSION'8.0') >= 0)) {
      return 
preg_match('/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[     ])+|(?>[     ]*\x0D\x0A)?[     ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}|(?!(?:.*[a-f0-9][:\]]){7,})((?6)(?>:(?6)){0,5})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:|(?!(?:.*[a-f0-9]:){5,})(?8)?::(?>((?6)(?>:(?6)){0,3}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD'$address);
    } elseif (
function_exists('filter_var')) { //Introduced in PHP 5.2
        
if(filter_var($addressFILTER_VALIDATE_EMAIL) === FALSE) {
          return 
false;
        } else {
          return 
true;
        }
    } else {
        return 
preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/'$address);
    }
  } 
Saludos!
__________________
>> Eleazan's Source
>> @Eleazan

Etiquetas: dominios, formulario, funcionar, html, mailer
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 07:32.