Autor | Zpráva | ||
---|---|---|---|
Nat Profil * |
#1 · Zasláno: 16. 1. 2011, 19:18:53
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 |
#2 · Zasláno: 16. 1. 2011, 19:22:18
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 * |
#3 · Zasláno: 16. 1. 2011, 19:32:01
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 |
#4 · Zasláno: 16. 1. 2011, 19:40:16
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 |
#5 · Zasláno: 16. 1. 2011, 19:43:01
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 * |
#6 · Zasláno: 16. 1. 2011, 19:47:23
SafeMode Local value On Master value Off
|
||
Nat Profil * |
#7 · Zasláno: 16. 1. 2011, 19:49:52
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 |
#8 · Zasláno: 16. 1. 2011, 20:00:49
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 * |
#9 · Zasláno: 16. 1. 2011, 20:08:38
Je to tak, už jsem ho vypnul a fachá to. Díky moc.
|
||
Časová prodleva: 15 let
|
0