Pagina 1 di 1

Problema funzione php MAIL() su PHPBB

Inviato: 21/01/2014, 9:22
da Actze
Per l'invio di email dal forum il mio hosting ha disabilitato la possibilità si usare l'smtp puntando a LOCALHOST e mi ha detto di usare la funzione mail() di php. Io ho cambiato le impostazioni sul forum togliendo l'smtp ma le mail non partono e sui logs ho questo errore:
Errore e-mail
» EMAIL/PHP/mail()

Ho subito pensato che l'hosting avesse bloccato anche questa funzione ma mi hanno detto di no e infatti mi hanno dato una paginetta php di test che funziona (contiene questo codice):

Codice: Seleziona tutto

<?php
$txt = "Prima linea di testo\nSeconda linea di testo";
// Send email
mail("miamail@miamail.it","soggetto della email",$txt);
?>
allora perchè ricevo errore con la funzione mail del forum?

Ho visto che la funzione mail() è gestita nel file includes/functions_messenger.php
con questo codice:

Codice: Seleziona tutto

/**
* Wrapper for sending out emails with the PHP's mail function
*/
function phpbb_mail($to, $subject, $msg, $headers, $eol, &$err_msg)
{
	global $config, $phpbb_root_path, $phpEx;

	// We use the EOL character for the OS here because the PHP mail function does not correctly transform line endings. On Windows SMTP is used (SMTP is \r\n), on UNIX a command is used...
	// Reference: http://bugs.php.net/bug.php?id=15841
	$headers = implode($eol, $headers);

	if (!class_exists('phpbb_error_collector'))
	{
		include($phpbb_root_path . 'includes/error_collector.' . $phpEx);
	}

	$collector = new phpbb_error_collector;
	$collector->install();

	// On some PHP Versions mail() *may* fail if there are newlines within the subject.
	// Newlines are used as a delimiter for lines in mail_encode() according to RFC 2045 section 6.8.
	// Because PHP can't decide what is wanted we revert back to the non-RFC-compliant way of separating by one space (Use '' as parameter to mail_encode() results in SPACE used)
	$result = $config['email_function_name']($to, mail_encode($subject, ''), wordwrap(utf8_wordwrap($msg), 997, "\n", true), $headers);

	$collector->uninstall();
	$err_msg = $collector->format_errors();

	return $result;
}
vi chiedo:
1-come posso visualizzare a schermo o nei logs in che modo viene tradotto il comando return $result;?
2-ho notato questo avviso nel codice:
// On some PHP Versions mail() *may* fail if there are newlines within the subject.
// Newlines are used as a delimiter for lines in mail_encode() according to RFC 2045 section 6.8.
// Because PHP can't decide what is wanted we revert back to the non-RFC-compliant way of separating by one space (Use '' as parameter to mail_encode() results in SPACE used)

come dovrei cambiare il codice per vedere se è quello il problema?

Re: Problema funzione php MAIL() su PHPBB

Inviato: 21/01/2014, 12:05
da Actze
update!

in includes/functions_messenger.php
ho cambiato la linea

Codice: Seleziona tutto

$result = $config['email_function_name']($to, mail_encode($subject, ''), wordwrap(utf8_wordwrap($msg), 997, "\n", true), $headers);
in

Codice: Seleziona tutto

$result = $config['email_function_name']("mymail@mymail.it", mail_encode($subject, ''), wordwrap(utf8_wordwrap($msg), 997, "\n", true), $headers);
e così funziona! :shock:

il problema sembra quindi essere la variabile $to che dovrebbe contenere l'indirizzo email del destinatario.
come posso fare per mostrarla a video e vedere che valore contiene, per capire che problema c'è?

Re: Problema funzione php MAIL() su PHPBB

Inviato: 21/01/2014, 12:29
da Actze
update 2:

sono riuscito a visualizzare il contenuto della variabile $to e contiene:
=?UTF-8?B?QWN0emU=?= <mymail@mymail.it>

il problema sono i caratteri strani prima della mail. ma perchè ci sono? su phpmyadmin ho controllato la tabella users e il campo email contiene gli indirizzi corretti senza questi caratteri strani. L'encoding della tabella è utf8_bin e dovrebbe andare bene.

Re: Problema funzione php MAIL() su PHPBB

Inviato: 21/01/2014, 18:05
da Actze
ho risolto il problema con questa funzioncina che toglie i caratteri sporchi e lascia l'indirizzo email

Codice: Seleziona tutto

$to = substr($to, strrpos($to, "<")+1);
$pos2 = strrpos($to, ">");
$to = substr($to, 0, $pos2);
non è una soluzione molto elegante, ma non sapevo cosa altro fare.
Mi piacerebbe capire perchè il forum restituiva questi strani caratteri insieme all'indirizzo email.