Advertisement:

Anleitung: Mailprobleme mit der deutschen Sprache

Aloittaja LOBOMINATOR, marraskuu 18, 2006, 01:14:08 IP

« edellinen - seuraava »

LOBOMINATOR

Hallo Zusammen,

Ich habe mich tödlich aufgeregt über die fast unlesbaren Mails, die von SMF generiert wurden, wenn ich die deutsche Sprache auswählte. Nun habe ich eine Lösung gefunden. Hier meine Lösung:

Öffne die Datei Subs-Post.php im Sourceordner mit einem Editor deiner Wahl. Springe zur Funktion sendmail (ab Line 512).

Ersetze die Funktion sendmail durch diese Funktion (Achtung getestet nur mit 1.1 RC3!!!):


// Send off an email.
// Note: the $priority parameter is added merely for future compatibility.
function sendmail($to, $subject, $message, $from = null, $message_id = null, $send_html = false, $priority = 1, $hotmail_fix = null)
{
global $webmaster_email, $context, $modSettings, $txt, $scripturl;

// So far so good.
$mail_result = true;

// If the recipient list isn't an array, make it one.
$to_array = is_array($to) ? $to : array($to);

// Sadly Hotmail doesn't support character sets properly.
if ($hotmail_fix === null)
{
$hotmail_to = array();
foreach ($to_array as $i => $to_address)
{
if (preg_match('~@hotmail.[a-zA-Z\.]{2,6}$~i', $to_address) === 1)
{
$hotmail_to[] = $to_address;
$to_array = array_diff($to_array, array($to_address));
}
}

// Call this function recursively for the hotmail addresses.
if (!empty($hotmail_to))
$mail_result = sendmail($hotmail_to, $subject, $message, $from, $message_id, $send_html, $priority, true);

// The remaining addresses no longer need the fix.
$hotmail_fix = false;

// No other addresses left? Return instantly.
if (empty($to_array))
return $mail_result;
}

// Get rid of slashes and entities.
$subject = un_htmlspecialchars(stripslashes($subject));
// Make the message use \r\n's only.
$message = str_replace(array("\r", "\n"), array('', "\r\n"), stripslashes($message));

// Make sure hotmail mails are sent as HTML so that HTML entities work.
if ($hotmail_fix && !$send_html)
{
$send_html = true;
$message = strtr($message, array("\r\n" => "<br />\r\n"));
$message = preg_replace('~(' . preg_quote($scripturl, '~') . '([?/][\w\-_%\.,\?&;=#]+)?)~', '<a href="$1">$1</a>', $message);
}

list (, $from_name) = mimespecialchars(addcslashes($from !== null ? $from : $context['forum_name'], '<>()\'\\"'), true, $hotmail_fix);
list (, $subject) = mimespecialchars($subject, true, $hotmail_fix);

// Construct the mail headers...
$headers = 'From: "' . $from_name . '" <' . (empty($modSettings['mail_from']) ? $webmaster_email : $modSettings['mail_from']) . ">\n";
$headers .= $from !== null ? 'Reply-To: <' . $from . ">\n" : '';
$headers .= 'Return-Path: ' . (empty($modSettings['mail_from']) ? $webmaster_email: $modSettings['mail_from']) . "\n";
$headers .= 'Date: ' . gmdate('D, d M Y H:i:s') . ' +0000' . "\n";

if ($message_id !== null && empty($modSettings['mail_no_message_id']))
$headers .= 'Message-ID: <' . md5($scripturl . microtime()) . '-' . $message_id . strstr(empty($modSettings['mail_from']) ? $webmaster_email : $modSettings['mail_from'], '@') . ">\n";
$headers .= "X-Mailer: SMF\n";

// pass this to the integration before we start modifying the output -- it'll make it easier later
if (isset($modSettings['integrate_outgoing_email']) && function_exists($modSettings['integrate_outgoing_email']))
{
if ($modSettings['integrate_outgoing_email']($subject, $message, $headers) === false)
return false;
}

$charset = isset($context['character_set']) ? $context['character_set'] : $txt['lang_character_set'];

list ($charset, $message, $encoding) = mimespecialchars($message, false, $hotmail_fix);

// Sending HTML?  Let's plop in some basic stuff, then.
if ($send_html)
{
// This should send a text message with MIME multipart/alternative stuff.
$mime_boundary = 'SMF-' . md5($message . time());
$headers .= 'Mime-Version: 1.0' . "\n";
$headers .= 'Content-Type: multipart/alternative; boundary="' . $mime_boundary . '"' . "\n";
$headers .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding);

// Save the original message...
$orig_message = $message;

// But, then, dump it and use a plain one for dinosaur clients.
$message = un_htmlspecialchars(strip_tags(strtr($orig_message, array('</title>' => "\r\n")))) . "\r\n--" . $mime_boundary . "\n";

// This is the plain text version.  Even if no one sees it, we need it for spam checkers.
$message .= 'Content-Type: text/plain; charset=' . $charset . "\n";
$message .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding) . "\n\n";
$message .= un_htmlspecialchars(strip_tags(strtr($orig_message, array('</title>' => "\r\n")))) . "\r\n--" . $mime_boundary . "\n";

// This is the actual HTML message, prim and proper.  If we wanted images, they could be inlined here (with multipart/related, etc.)
$message .= 'Content-Type: text/html; charset=' . $charset . "\n";
$message .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding) . "\n\n";
$message .= $orig_message . "\r\n--" . $mime_boundary . '--';
}
// Text is good too.
else
{
$headers .= 'Content-Type: text/plain; charset=' . $charset . "\n";
if ($encoding != '')
$headers .= 'Content-Transfer-Encoding: ' . $encoding;
}

// SMTP or sendmail?
if (empty($modSettings['mail_type']) || $modSettings['smtp_host'] == '')
{
$subject = strtr($subject, array("\r" => '', "\n" => ''));
if (!empty($modSettings['mail_strip_carriage']))
{
$message = strtr($message, array("\r" => ''));
$headers = strtr($headers, array("\r" => ''));
}

foreach ($to_array as $to)
{
if (!mail(strtr($to, array("\r" => '', "\n" => '')), $subject, $message, $headers))
{
log_error(sprintf($txt['mail_send_unable'], $to));
$mail_result = false;
}

// Wait, wait, I'm still sending here!
@set_time_limit(300);
if (function_exists('apache_reset_timeout'))
apache_reset_timeout();
}
}
else
$mail_result = $mail_result && smtp_mail($to_array, $subject, $message, $send_html ? $headers : "Mime-Version: 1.0\r\n" . $headers);

// Everything go smoothly?
return $mail_result;
}




Advertisement: