| 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