News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

HOTMAIL'e Türkçe Karakter Sorunu Çözüldü

Started by Harzem, October 21, 2006, 03:57:04 AM

Previous topic - Next topic

Harzem

Evet, nihayet hotmail'e giden emaillerdeki Türkçe karakter sorunu çözüldü.

Bunun için yapacağınız üç şey var.

Önce, Sources / Subs-Post.php dosyasını açın.

Bulun:


// 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($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']) . ">\r\n";
$headers .= $from !== null ? 'Reply-To: <' . $from . ">\r\n" : '';
$headers .= 'Return-Path: ' . (empty($modSettings['mail_from']) ? $webmaster_email: $modSettings['mail_from']) . "\r\n";
$headers .= 'Date: ' . gmdate('D, d M Y H:i:s') . ' +0000' . "\r\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'], '@') . ">\r\n";
$headers .= "X-Mailer: SMF\r\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' . "\r\n";
$headers .= 'Content-Type: multipart/alternative; boundary="' . $mime_boundary . '"' . "\r\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 . "\r\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 . "\r\n";
$message .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding) . "\r\n\r\n";
$message .= un_htmlspecialchars(strip_tags(strtr($orig_message, array('</title>' => "\r\n")))) . "\r\n--" . $mime_boundary . "\r\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 . "\r\n";
$message .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding) . "\r\n\r\n";
$message .= $orig_message . "\r\n--" . $mime_boundary . '--';
}
// Text is good too.
else
{
$headers .= 'Content-Type: text/plain; charset=' . $charset . "\r\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;
}


Değiştirin:


// 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;

// Use sendmail if it's set or if no SMTP server is set.
$use_sendmail = empty($modSettings['mail_type']) || $modSettings['smtp_host'] == '';

// Line breaks need to be \r\n only in windows or for SMTP.
$line_break = $context['server']['is_windows'] || !$use_sendmail ? "\r\n" : "\n";

// 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 the proper line breaks.
$message = str_replace(array("\r", "\n"), array('', $line_break), 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($line_break => '<br />' . $line_break));
$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']) . '>' . $line_break;
$headers .= $from !== null ? 'Reply-To: <' . $from . '>' . $line_break : '';
$headers .= 'Return-Path: ' . (empty($modSettings['mail_from']) ? $webmaster_email: $modSettings['mail_from']) . $line_break;
$headers .= 'Date: ' . gmdate('D, d M Y H:i:s') . ' +0000' . $line_break;

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'], '@') . '>' . $line_break;
$headers .= 'X-Mailer: SMF' . $line_break;

// 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' . $line_break;
$headers .= 'Content-Type: multipart/alternative; boundary="' . $mime_boundary . '"' . $line_break;
$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>' => $line_break)))) . $line_break . '--' . $mime_boundary . $line_break;

// 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 . $line_break;
$message .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding) . $line_break . $line_break;
$message .= un_htmlspecialchars(strip_tags(strtr($orig_message, array('</title>' => $line_break)))) . $line_break . "--" . $mime_boundary . $line_break;

// 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 . $line_break;
$message .= 'Content-Transfer-Encoding: ' . ($encoding == '' ? '7bit' : $encoding) . $line_break . $line_break;
$message .= $orig_message . $line_break . "--" . $mime_boundary . '--';
}
// Text is good too.
else
{
$headers .= 'Content-Type: text/plain; charset=' . $charset . $line_break;
if ($encoding != '')
$headers .= 'Content-Transfer-Encoding: ' . $encoding;
}

// SMTP or sendmail?
if ($use_sendmail)
{
$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" . $line_break . $headers);

// Everything go smoothly?
return $mail_result;
}



Bul:

// Convert all 'special' characters to HTML entities.
preg_replace('~[\x80-\x{10FFFF}]~eu', '$entityConvert("\1")', $string);

return array($charset, $string, '7bit');



değiştir:


// Convert all 'special' characters to HTML entities.
return array($charset, preg_replace('~([\x80-\x{10FFFF}])~eu', '$entityConvert("\1")', $string), '7bit');



Sonra da ilk eklediğimiz kodda şunu bulun:


// Line breaks need to be \r\n only in windows or for SMTP.
$line_break = $context['server']['is_windows'] || !$use_sendmail ? "\r\n" : "\n";


Eğer sunucunuz linux ise şöyle değiştirin:


// Line breaks need to be \r\n only in windows or for SMTP.
$context['server']['is_windows'] = false;
$line_break = $context['server']['is_windows'] || !$use_sendmail ? "\r\n" : "\n";


Eğer windows ise de şöyle değiştirin:


// Line breaks need to be \r\n only in windows or for SMTP.
$context['server']['is_windows'] = true;
$line_break = $context['server']['is_windows'] || !$use_sendmail ? "\r\n" : "\n";


Sunucunuzun ne olduğuna emin değilseniz, sunucu sahibine sorun. Ya da FTP'den dosyalara CHMOD yapabiliyorsanız sunucunuz linux demektir, CHMOD yapamıyorsanız sunucunuz windowstur.

mgimadu

Allah senden rtazı olsun Harzem, bu sorun bende yoktu ama olanlar msn de başımı beynimi yiyiyordu :)
.ıl I love you simplemachines lı.
Forumgil.com - Enter my site.
My Mods        - Enter my Mods.
I wait you SMF 2.0

ByGeCe


Soru Sormadan Once


www.devrekanim.com

Çözüme Katkin Yoksa Sorunlardan Bahsetme

Harzem

Arkadaşlar, teşekkürleriniz için teşekkrüler, ancak kodu uygulayıp, deneyip sonucun olumlu olduğunu gördükten sonra bunu yazsanız daha güzel olur gibi :)

Arsin

Bu sorun var forumun birinde dediğinizi aksam eve gidince yapacagım bakalım ne olur.

Harzem

Quote from: TayNet.Net on October 21, 2006, 05:30:28 AM
bunu mod yapmak lazım ;D ;D ;D ;D

Bu kodu 1.1 final'den aldım. 1.1 final yayına açık olunca moda gerek kalmayacak zaten.

mcmadrap

Quote from: HarzeM on October 21, 2006, 05:35:50 AM
Quote from: TayNet.Net on October 21, 2006, 05:30:28 AM
bunu mod yapmak lazım ;D ;D ;D ;D

Bu kodu 1.1 final'den aldım. 1.1 final yayına açık olunca moda gerek kalmayacak zaten.

Emeğin için teşekkür ederim Harzem.
Bize 1.1 hakkında biraz bilgi verir misin?
Ne zaman tamamlanmış ve bizim için yayına açılacak?
Beta olarak kullanıp test etmek için gönüllüyüm :)

NoPasaran

Ya ben site admini olrak hotmail kullasnmıyorum ama üyelerde böyle bir sorun mevcutrmudur bunuda bilmiyorum..

Yapmamıza gerek varmı?
kralkartal.net SMF 2.0.8

Harzem


postman81

Bırakın türkçe karakteri,ben hotmail e hiç mail gönderemiorm :D

4LP3RUZ1

Frozen frogs are back :(

maxmur

ben hiç mail gönderemiyorum nasil yapa bilirim acaba üyelere mail atmak icin
www.iyiyiz.com iyi olanların yeri..

miaforum

// Convert all 'special' characters to HTML entities.
preg_replace('~[\x80-\x{10FFFF}]~eu', '$entityConvert("\1")', $string);

return array($charset, $string, '7bit');

sağol abi

harzem abi iyide bende bunlar yok.

ilk forumu kurarken dosyalara baktım mod uygulanmamış onda da yok rc2 sürüm..

diğer dediklerini yaptım şimdi deniyecem çalışıyomu die...

maxmur

nasil ve nerden acaba mail yollanıyor tam ayrıntılı olarak size zahmmet anlatabilirmisiz
www.iyiyiz.com iyi olanların yeri..

mgimadu

Quote from: maxmur on October 22, 2006, 04:37:52 AM
nasil ve nerden acaba mail yollanıyor tam ayrıntılı olarak size zahmmet anlatabilirmisiz

Admin Paneli >> Haber ve Haberleri Düzenle >> E-posta Gönder
.ıl I love you simplemachines lı.
Forumgil.com - Enter my site.
My Mods        - Enter my Mods.
I wait you SMF 2.0

GokseL

Harzem karakter sorunu derken bizim gönderdiğimiz mail ler önemsiz postalara gidiyordu o sorun mu çözüldü yoksa türkçe karakterlerde sorun vardı yazılar bir garip di o mu çözüldü anlamadım bi açıklasan

artık mail lerimiz önemsiz mail lerde deilde gelen kutusundamı olucak bunu yapınca ??

Conker

Belirttiğin adımları uygulayınca Hotmaildeki Türkçe Karakter sorunum Çözüldü.

Teşekkürler...

zeytark

Harzem söledigin herşeyi yaptım düzelmedi bende düzelmedigi için düzenleme yapmadan önce aldıgım yedegi geri yükledim sorun ne anlamadım bende yardımcı olur musun bana ?

comez

deli herif

S_HA_DO_W

bu sorun bende de mevcut şuan halledemeyecem ama en kısa sürede halletmem lazım bu sorunu inş konuyu kaybetmem :D
neyse emeğine sağlık

Advertisement: