Autor Zpráva
Nat
Profil *
Zdravím,

na hostingu savana.cz mi nefunguje tato funkce:


function oc_mail($to, $subject, $body, $hdr='', $enc='quoted-printable') {
	global $OC_configAR;
	$headers = (empty($hdr) ? $OC_configAR['OC_mailHeaders'] : $hdr);
	if ($OC_configAR['OC_mailUTF8']) {
		$headers = "MIME-Version: 1.0\r\n" . $headers . "\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: " . $enc;
		$headers = preg_replace("/\r/", "", $headers);
		switch ($enc) {
			case 'base64':
				$body = chunk_split(base64_encode($body));
				$subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";
				break;
			default:
				$body = oc_qpencode($body);
				$subject = "=?UTF-8?Q?" . rtrim(preg_replace(array("/[\r\n].*$/", "/\s+/", "/\?/"), array("", "_", "=3f"), oc_qpencode($subject)), '= ') . "?="; // only use first line for subject and replace spaces/?s
				break;
		}
	} else {
		$body = wordwrap($body, $OC_configAR['OC_emailWrap']);
	}
	return(mail($to, $subject, $body, $headers, $OC_configAR['OC_mailParams']));
}



na hostingu web4ce.cz mi běží bez problému. Nejsem v php nijak kovaný, tak nedokáži odhalit, jestli je tato fce nějak konfliktní.
NejakyTom
Profil
Bylo by dobry napsat napriklad jakou hlasku to hazi.
Kod jak koukam zadny vyjimecny funkce nevyuziva ale odkazuje na dalsi dve uziv. vytvorene funkce.
Nat
Profil *
S tou hláškou je to složitější, je to ošetřeno tím programem a vypíše to pouze, že poslání mailu selhalo. Jedná se o open source OpenConf a ta geneze posílání emailu je následující:


// Sends out optionally utf-8 enabled email
// Note: headers are not converted except for subject
// We are defaulting to QP so bounced messages can be more easily read (for non-CJK)
function oc_mail($to, $subject, $body, $hdr='', $enc='quoted-printable') {
	global $OC_configAR;
	$headers = (empty($hdr) ? $OC_configAR['OC_mailHeaders'] : $hdr);
	if ($OC_configAR['OC_mailUTF8']) {
		$headers = "MIME-Version: 1.0\r\n" . $headers . "\r\nContent-Type: text/html; charset=UTF-8\r\nContent-Transfer-Encoding: " . $enc;
		$headers = preg_replace("/\r/", "", $headers);
		switch ($enc) {
			case 'base64':
				$body = chunk_split(base64_encode($body));
				$subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";
				break;
			default:
				$body = oc_qpencode($body);
				$subject = "=?UTF-8?Q?" . rtrim(preg_replace(array("/[\r\n].*$/", "/\s+/", "/\?/"), array("", "_", "=3f"), oc_qpencode($subject)), '= ') . "?="; // only use first line for subject and replace spaces/?s
				break;
		}
	} else {
		$body = wordwrap($body, $OC_configAR['OC_emailWrap']);
	}
	return(mail($to, $subject, $body, $headers, $OC_configAR['OC_mailParams']));
}

// Sends an email message, adding OC_confName to beginning of subject line, and cc'ing OC_confirmmail and including IP address if requested
function sendEmail($to, $subject, $body, $ccConfirm=0) {
	global $OC_configAR, $OC_mailHeaders, $OC_mailParams;
	// include confirm address?
	if ($ccConfirm) {
		$to .= ',' . $OC_configAR['OC_confirmmail'];
		// trim in case no $to passed
		$to = ltrim($to,',');
	}
	// Bail out successfully(?) if no one to email
	if (empty($to)) { return(TRUE); }
	// Add conf name to beginning of subject
	$subject = "[" . $OC_configAR['OC_confName'] . "] " . $subject;
	// Include IP in message body?
	if ($OC_configAR['OC_notifyIncludeIP']) {
		$body .= "<br /><br />IP Address: " . $_SERVER['REMOTE_ADDR'];
	}
	// Send message & return whether successful
	return(oc_mail($to, $subject, $body, $OC_mailHeaders));
	//return(mail($to, $subject, $body, $OC_mailHeaders));

}



když použiji místo fce oc_mail php fci mail, tak vše odejde, jak má. Pokud, ale zavolám fci oc_mail, tak to neprojde. Ty další 2 fce o kterých mluvíš jsou které? 6e bych je sem zkopíroval, jestli není konflikt v nich. Tuším, že by to mohla být fce wordwrap() a ta druhá?
NejakyTom
Profil
To se pak spatne hleda chyba, co dela funkce "oc_qpencode".

Ale asi nejlepsi cesta bude zapnout reportovani chyb protoze takhle na slepo se to spatne hleda.
Davex
Profil
Na první pohled není řetězec $header ukončen koncem řádku \n. Na druhý pohled by také mohla vadit přítomnost pátého parametru funkce mail(), ale neznám nastavení PHP na Savaně - je v phpinfo() zapnuté safe_mode?
Nat
Profil *
SafeMode Local value On Master value Off
Nat
Profil *
K té fci "oc_qpencode"


// Encode text into quoted-printable format
function oc_qpencode($what, $linelenmax = 75) {
	$eol = "\n"; // using \n instead of \r\n to avoid double-spaced messages in Outlook
	$encoded = '';
	$lines = preg_split("/(?:\r\n|\r|\n)/", $what);
	while(list(, $line) = each($lines)) {
		$linelen = strlen($line);
		$encline = '';
		for ($i=0; $i<$linelen; $i++) {
			$c = substr($line, $i, 1);
			$cdec = ord($c);
			if (($cdec == 32) && ($i == ($linelen - 1))) {
				$c = '=20';
			} elseif (($cdec == 61) || ($cdec < 32) || ($cdec > 126)) {
				$c = '=' . strtoupper(sprintf('%02s', dechex($cdec)));
			}
			if ((strlen($encline) + strlen($c)) >= $linelenmax) {
				$encoded .= $encline . '=' . $eol;
				$encline = '';
			}
			$encline .= $c;
		}
		$encoded .= $encline . $eol;
	}
	$encoded = substr($encoded, 0, -1 * strlen($eol));
	return $encoded;
}


Davex
Profil
Nat:
SafeMode Local value On
Safe mód je zapnutý, a proto není možné používat pátý parametr funkce mail(). Bez něj by to mělo fungovat.
return(mail($to, $subject, $body, $headers));
Nat
Profil *
Je to tak, už jsem ho vypnul a fachá to. Díky moc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0