Envío de correo sin autenticarse al servidor de correos

Buenos días skaparate,

Muchísimas gracias por tu respuesta. He hecho todo lo que me dices, pero no funciona. Tampoco me da ningún error. Simplemente la pantalla se me queda en blanco. No se muy bien que más tengo que tocar. He intentado añadir el puerto de salida en el archivo phpmailer-conf.php, pero con o sin puerto no va. Y por mucho que toque no consigo que al menos me de una ventana de error. Te adjunto de nuevo los archivos modificados por si se te ocurriese alguna cosa más. Muchísimas gracias!!!
Hola!

El puerto esta bien. El hecho de que se quede en blanco la pantalla es porque debe haber un error. Para intentar encontrarlo, modifica lo siguiente:

<?php 
include_once "phpmailer-conf.php";
[COLOR="#FF0000"]error_reporting( E_ALL );[/COLOR] // Cuando arreglemos el problema debes quitar esta línea.
$nombre = $_POST ['nombre']; 
$apellidos = $_POST ['apellidos']; 
$poblacio = $_POST ['poblacio']; 
$telefon = $_POST ['telefon']; 
$correo = $_POST ['telefon']; 

$mensaje .= "\nDades Contacte:"; 
$mensaje .= "\n--------------------------------\n"; 
$mensaje .= "Nom: " . utf8_encode($_POST['nombre']) . "\nCognoms: " . utf8_encode($_POST['apellidos']) . "\nemail: " . utf8_encode($_POST['correo']) .utf8_decode("\nTelÃ&#402;¨fon: ") . $_POST['telefon'] . utf8_decode("\nPoblaciÃ&#402;³: ") . utf8_encode($_POST['poblacio']) ."\n"; 
$mensaje .= "\nDades de l'alumne:"; 
$mensaje .= "\n--------------------------------\n";  
$mensaje .= "Estudis: " . utf8_encode($_POST['estudis']) . ("\nCurs: ") . $_POST['curs'] . ("\nEsdat: ") . $_POST['edat'] . "\n"; 
$mensaje .= "\n\nDisponibilitat horaria:"; 
$mensaje .= "\n--------------------------------\n";  
$mensaje .= "Dilluns:\n"; 
$mensaje .= "Mati: " . $_POST['dilluns1'] . " ". $_POST['dilluns2'] . " " . $_POST['dilluns3'] . " " . $_POST['dilluns4'] . " " . $_POST['dilluns5'] . "\n"; 
$mensaje .= "Migdia: ". $_POST['dilluns6'] . " " . $_POST['dilluns7'] . " " . $_POST['dilluns8'] . " \n"; 
$mensaje .= "Tarda: ". $_POST['dilluns9'] . " " . $_POST['dilluns10'] . " " . $_POST['dilluns10'] . " " . $_POST['dilluns12'] . " " . $_POST['dilluns13'] . " " . $_POST['dilluns14'] ."\n\n"; 
$mensaje .= "Dimarts:\n"; 
$mensaje .= "Mati: " . $_POST['dimarts1'] . " ". $_POST['dimarts2'] . " " . $_POST['dimarts3'] . " " . $_POST['dimarts4'] . " " . $_POST['dimarts5'] . "\n"; 
$mensaje .= "Migdia: ". $_POST['dimarts6'] . " " . $_POST['dimarts7'] . " " . $_POST['dimarts8'] . " \n"; 
$mensaje .= "Tarda: ". $_POST['dimarts9'] . " " . $_POST['dimarts10'] . " " . $_POST['dimarts11'] . " " . $_POST['dimarts12'] . " " . $_POST['dimarts13'] . " " . $_POST['dimarts14'] ."\n\n"; 
$mensaje .= "Dimecres:\n"; 
$mensaje .= "Mati: " . $_POST['dimecres1'] . " ". $_POST['dimecres2'] . " " . $_POST['dimecres3'] . " " . $_POST['dimecres4'] . " " . $_POST['dimecres5'] . "\n"; 
$mensaje .= "Migdia: ". $_POST['dimecres6'] . " " . $_POST['dimecres7'] . " " . $_POST['dimecres8'] . " \n"; 
$mensaje .= "Tarda: ". $_POST['dimecres9'] . " " . $_POST['dimecres10'] . " " . $_POST['dimecres11'] . " " . $_POST['dimecres12'] . " " . $_POST['dimecres13'] . " " . $_POST['dimecres14'] ."\n\n"; 
$mensaje .= "Dijous:\n"; 
$mensaje .= "Mati: " . $_POST['dijous1'] . " ". $_POST['dijous2'] . " " . $_POST['dijous3'] . " " . $_POST['dijous4'] . " " . $_POST['dijous5'] . "\n"; 
$mensaje .= "Migdia: ". $_POST['dijous6'] . " " . $_POST['dijous7'] . " " . $_POST['dijous8'] . " \n"; 
$mensaje .= "Tarda: ". $_POST['dijous9'] . " " . $_POST['dijous10'] . " " . $_POST['dijous11'] . " " . $_POST['dijous12'] . " " . $_POST['dijous13'] . " " . $_POST['dijous14'] ."\n\n"; 
$mensaje .= "Divendres:\n"; 
$mensaje .= "Mati: " . $_POST['divendres1'] . " ". $_POST['divendres2'] . " " . $_POST['divendres3'] . " " . $_POST['divendres4'] . " " . $_POST['divendres5'] . "\n"; 
$mensaje .= "Migdia: ". $_POST['divendres6'] . " " . $_POST['divendres7'] . " " . $_POST['divendres8'] . " \n"; 
$mensaje .= "Tarda: ". $_POST['divendres9'] . " " . $_POST['divendres10'] . " " . $_POST['divendres11'] . " " . $_POST['divendres12'] . " " . $_POST['divendres13'] . " " . $_POST['divendres14'] ."\n\n"; 
$mensaje .= "Dissabte:\n"; 
$mensaje .= "Mati: " . $_POST['dissabte1'] . " ". $_POST['dissabte2'] . " " . $_POST['dissabte3'] . " " . $_POST['dissabte4'] . " " . $_POST['dissabte5'] . "\n"; 
$mensaje .= "Migdia: ". $_POST['dissabte6'] . " " . $_POST['dissabte7'] . " " . $_POST['dissabte8'] . " \n"; 
$mensaje .= "Tarda: ". $_POST['dissabte9'] . " " . $_POST['dissabte10'] . " " . $_POST['dissabte11'] . " " . $_POST['dissabte12'] . " " . $_POST['dissabte13'] . " " . $_POST['dissabte14'] ."\n\n"; 
$mensaje .= "\nObservacions: \n" . utf8_encode($_POST['observacions']). "\n";  
$mensaje .= "\nCom ens ha conegut: " . utf8_encode($_POST['ensconeixper']). "\n";  

$para = '[correo eliminado]'; 
$asunto = 'Contacte kalcudoku'; 

$params = array( 
  'from' => 'email de quién envía el mensaje', 
  'fromName' => 'nombre de quien envía el mensaje', 
  'to' => $para, // Email del destinatario 
  'subject' => $asunto, 
  'html' => true, // true si es que se envía un mensaje que incluya etiquetas HTML/CSS o false si se envía un mensaje plano. 
  'body' => $mensaje 
); 

$r = send_mail( $params ); 

if( $r == '' ) { 
  // El mensaje fue enviado 
  header("Location: enviatc.html"); 
} else { 
  [COLOR="#FF0000"]file_put_contents( 'mail.log', $r, FILE_APPEND );[/COLOR]
} 

function send_mail( $params ) { 
  $return = ''; 
  ob_start(); 
         
  require_once "phpmailer/PHPMailerAutoload.php"; 
         
  $mail = new PHPMailer(); 
  $mail->Mailer             = MAILER_TRANSPORT; 
  $mail->SMTPDebug    = MAILER_DEBUG_LEVEL; 
  $mail->CharSet        = MAILER_CHARSET; 
  $mail->Host        = MAILER_SMTP_HOST; 
  $mail->SMTPAuth    = MAILER_SMTP_AUTH_ENABLED; 
  $mail->Username     = MAILER_SMTP_USER; 
  $mail->Password    = MAILER_SMTP_PASS; 
  $mail->SMTPSecure    = MAILER_SMTP_SECURITY; 
     
  $mail->From        = $params['from']; 
  $mail->FromName    = $params['fromName']; 
  $mail->AddReplyTo( $params['from'], $params['fromName'] ); 
  $mail->AddAddress( $params['to'] ); 
  $mail->WordWrap    = 70; 
  $mail->Subject         = $params['subject']; 
         
  if( isset( $params['html'] ) && $params['html'] === true ) 
    $mail->IsHTML( true ); 
     
  $mail->Body = $params['body']; 

  if( ! $mail->Send() ) { 
    $return = trim( $mail->ErrorInfo ); 
    $return .= "\nDebug PHPMailer:\n\n" . ob_get_contents(); 
  } 

  ob_end_clean(); 
         
  return $return; 
} 
?>

Y modifica la línea define( 'MAILER_SMTP_DEBUG_LEVEL', 0 ); para que quede así (sólo esa línea, las demás déjalas tal cual):

phpmailer-conf.php
define( 'MAILER_SMTP_DEBUG_LEVEL', 4 );

Ejecuta el formulario, descarga el archivo mail.log (que estará en tu servidor) y luego publica los resultados (también publica cualquier error que muestre en pantalla).
Buenos días,

Ante todo muchísimas gracias por la ayuda. Yo sólo no podría con esto. Ya he probado y por pantalla no sale ningún error. El archivo mail.log informa de lo siguiente:

define( 'MAILER_SMTP_DEBUG_LEVEL', 4 );

1 SMTP connect() failed.
2 Debug PHPMailer:
3
4 SMTP connect() failed.


Si modifico el 4 por el 0 entonces:

define( 'MAILER_SMTP_DEBUG_LEVEL', 0 );

1 SMTP connect() failed.
2 Debug PHPMailer:
3
4 SMTP connect() failed.
5 SMTP connect() failed.
6 Debug PHPMailer:
7
8 SMTP connect() failed.

Gracias de nuevo!
El archivo dice que no se pudo conectar a través de SMTP (SMTP connect() failed), lo que puede significar varias cosas:

1.- El mail de usuario SMTP y/o contraseña son erróneos, en cuyo caso corregir los datos bastaría.
2.- Los datos para conectarse a través de SMTP están mal (MAILER_HOST, MAILER_SMTP_SECURITY y MAILER_SMTP_AUTH_ENABLED). Si tu hosting tiene CPanel, deberías poder ver los datos de conexión en la sección de las cuentas de email. De otra forma, deberías contactar al soporte técnico del hosting y pedir los datos.
Buenas noches,

Me he mirado bien el CPanel, y efectivamente no había cogido bien los datos del servidor. Pero tras hacer los cambios, nada ha cambiado. Te adjunto el nuevo código PHP:

<?php
define( 'MAILER_USER', '[correo eliminado]' );
define( 'MAILER_PASS', 'XXXXXXX' );
define( 'MAILER_HOST', 'euro1.ahwebhost.com:465' ); // he probado con o sin puerto pero no funciona. Tampoco se si el puerto hay que ponerlo y se si indica así
define( 'MAILER_TRANSPORT', 'smtp' );
define( 'MAILER_SMTP_SECURITY', 'ssl' ); // he puesto el primero porqué no tengo ni idea
define( 'MAILER_SMTP_AUTH_ENABLED', true );
define( 'MAILER_SMTP_DEBUG_LEVEL', 0 );
define( 'MAILER_CHARSET', 'utf-8' );
?>

Los datos que me da CPanel son:

Segura SSL / TLS (Recomendado)
Nombre de Usuario: [correo eliminado]
Contraseña: Utilice la contraseña de la cuenta de correo electrónico.
Servidor entrante: euro1.ahwebhost.com
Puerto IMAP: 993
Puerto POP3: 995
Servidor de correo saliente: euro1.ahwebhost.com
Puerto SMTP: 465
Es necesaria la autenticación para IMAP, POP3 y SMTP.

He hecho diferentes pruebas, pero ni siquiera consigo forzar otro tipo de error. No se me ocurre nada más )-:

Cualquier cosa que creas que pueda hacer dímela e iré haciendo pruebas.

Muchísimas gracias una vez más...
Cambia MAILER_SMTP_DEBUG_LEVEL de 0 a 4, ejecuta el formulario y luego publica el contenido del archivo mail.log (de hecho, no cambies a 0 hasta que lo hayamos resuelto).

Sobre la configuración, ahora está bien (cuando uno especifica un puerto, siempre es url:puerto, así que lo que has puesto está bien).

Otra cosa que puedes intentar es dejar MAILER_SMTP_SECURITY vacío (en lugar SSL).

¿En el CPanel hay un cuadro o más de la configuración del mail? Te lo pregunto porque existen algunos hosting algo extraños, donde la configuración normal SMTP no funciona y hay que utilizar la configuración más simple (tuve este problema hace unas 2 semanas). Esto no es culpa del SMTP, sino del hosting que complica las configuraciones xD.
Me permito meter mi cuchara, para dar mi aporte, en mi experiencia con la clase PHPMailer el servidor SMTP (host) y el puerto siempre se especifican por separado, que por configuracion predeterminada son los siguientes:

$mail->Host = localhost;
$mail->Port = 25;

Otro detalle es que en los codigos aqui posteados, se definen unas constantes que no son utilizadas, por ejemplo para el usuario, el pasword, el servidor, y el modo depuracion se definen MAILER_USER, MAILER_PASS, MAILER_HOST, MAILER_SMTP_DEBUG_LEVEL respectivamente, pero al procesar el envio se utilizan MAILER_SMTP_USER, MAILER_SMTP_PASS, MAILER_SMTP_HOST, MAILER_DEBUG_LEVEL.

Esta clase PHPMailer es una exelente herramienta y muy Potente.
serverdns escribió:Me permito meter mi cuchara, para dar mi aporte, en mi experiencia con la clase PHPMailer el servidor SMTP (host) y el puerto siempre se especifican por separado, que por configuración predeterminada son los siguientes:

$mail->Host = localhost;
$mail->Port = 25;

En realidad yo lo he probado de ambas formas y funciona en ambas, así que no perdemos nada con probar (@ignasigc, revisa el código más abajo).

serverdns escribió:Otro detalle es que en los codigos aqui posteados, se definen unas constantes que no son utilizadas, por ejemplo para el usuario, el pasword, el servidor, y el modo depuracion se definen MAILER_USER, MAILER_PASS, MAILER_HOST, MAILER_SMTP_DEBUG_LEVEL respectivamente, pero al procesar el envio se utilizan MAILER_SMTP_USER, MAILER_SMTP_PASS, MAILER_SMTP_HOST, MAILER_DEBUG_LEVEL.

Debiste haber "metido tu cuchara" antes, jajajaja, así que gracias por la corrección.

@ignasigc, reemplaza la función send_mail (todo el código de la función) por esto:

function send_mail( $params ) { 
  $return = ''; 
  ob_start(); 
         
  require_once "phpmailer/PHPMailerAutoload.php"; 
         
  $mail = new PHPMailer(); 
  $mail->Mailer             = MAILER_TRANSPORT; 
  $mail->SMTPDebug    = MAILER_DEBUG_LEVEL; 
  $mail->CharSet        = MAILER_CHARSET; 
  [COLOR="#FF0000"]$mail->Host        = MAILER_SMTP_HOST; [/COLOR]
  [COLOR="#FF0000"]$mail->Port             = MAILER_SMTP_PORT;[/COLOR]
  $mail->SMTPAuth    = MAILER_SMTP_AUTH_ENABLED; 
[COLOR="#FF0000"]  $mail->Username     = MAILER_USER; 
  $mail->Password    = MAILER_PASS; [/COLOR]
  $mail->SMTPSecure    = MAILER_SMTP_SECURITY; 
     
  $mail->From        = $params['from']; 
  $mail->FromName    = $params['fromName']; 
  $mail->AddReplyTo( $params['from'], $params['fromName'] ); 
  $mail->AddAddress( $params['to'] ); 
  $mail->WordWrap    = 70; 
  $mail->Subject         = $params['subject']; 
         
  if( isset( $params['html'] ) && $params['html'] === true ) 
    $mail->IsHTML( true ); 
     
  $mail->Body = $params['body']; 

  if( ! $mail->Send() ) { 
    $return = trim( $mail->ErrorInfo ); 
    $return .= "\nDebug PHPMailer:\n\n" . ob_get_contents(); 
  } 

  ob_end_clean(); 
         
  return $return; 
}

Modifica el archivo phpmailer-conf.php:

<?php
define( 'MAILER_USER', '[correo eliminado]' );
define( 'MAILER_PASS', 'XXXXXXX' ); 
[COLOR="#FF0000"]define( 'MAILER_SMTP_HOST', 'euro1.ahwebhost.com' );
define( 'MAILER_SMTP_PORT', 465 );[/COLOR]
define( 'MAILER_TRANSPORT', 'smtp' ); 
define( 'MAILER_SMTP_SECURITY', 'ssl' );
define( 'MAILER_SMTP_AUTH_ENABLED', true ); 
define( 'MAILER_SMTP_DEBUG_LEVEL', 0 ); 
define( 'MAILER_CHARSET', 'utf-8' ); 
?>

Lo que está en rojo son las modificaciones que he hecho (gracias a @serverdns que notó los errores).