[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как получать e-mail письма в win-1251?
sergiost
Проблема такая. Сайт в кодировке utf-8.
Есть php-код формы обратной связи, который вставлен на php-страницу сайта (будет ниже). Всё работает без проблем, письма с сайта получаю без нареканий, но письма приходят в кодировке utf-8 и потому приходится в почтовом клиенте перекодировать. Это конечно не сложно и можно было забить на это, но хотелось бы получать их сразу в кодировке win-1251.
Как это устранить?
Прилагаю php-код формы обратной связи:
Код


<div id="contentForm">

<!-- The contact form starts from here-->
<?php
$error = ''; // сообщение об ошибке
$name = ''; // имя отправителя
$email = ''; // email отправителя
$subject = ''; // тема
$message = ''; // сообщение
$spamcheck = ''; // проверка на спам


if(isset($_POST['send']))
{
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$spamcheck = $_POST['spamcheck'];

if(trim($name) == '')
{
$error = '<div class="errormsg">Пожалуйста, введите Ваше имя</div>';
}
else if(trim($email) == '')
{
$error = '<div class="errormsg">Пожалуйста, введите Ваш email!</div>';
}
else if(!isEmail($email))
{
$error = '<div class="errormsg">Вы ввели неправильный e-mail. Пожалуйста, исправьте его!</div>';
}
if(trim($subject) == '')
{
$error = '<div class="errormsg">Пожалуйста, введите тему!</div>';
}
else if(trim($message) == '')
{
$error = '<div class="errormsg">Пожалуйста, введите сообщение!</div>';
}
else if(trim($spamcheck) == '')
{
$error = '<div class="errormsg">Пожалуйста, введите проверку на спам!</div>';
}
else if(trim($spamcheck) != '5')
{
$error = '<div class="errormsg">Проверка на спам: Вы ввели неправильный результат! 2 + 3 = ???</div>';
}
if($error == '')
{
if(get_magic_quotes_gpc())
{
$message = stripslashes($message);
}

// Обязательно укажите здесь Email на который должны приходить письма
$to = "test@test.ru";

// [Сообщение через контактную форму] - тема сообщения - можете поменять на любую.

$subject = '[Сообщение с мастерской] : ' . $subject;

// сообщение
$msg = "From : $name \r\ne-Mail : $email \r\nSubject : $subject \r\n\n" . "Message : \r\n$message";

mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n");
?>

<!-- Сообщение отправлено! (можете поменять текст)-->
<div style="text-align:center;">
<h1>
Спасибо за сообщение!</h1>
<p><b><?=
$name;?></b>, в ближайшее время я Вам отвечу!</p>
</div>

<!--End Message Sent-->

<?php
}
}

if(!isset($_POST['send']) || $error != '')
{
?>
<h2>
Все поля обязательны для заполнения!</h2>
<!--Error Message-->
<?=$error;?>

<form
method="post" name="contFrm" id="contFrm" action="">
<label><span
class="required">*</span>Ваше имя:</label>
<input
name="name" type="text" class="box" id="name" size="40" value="<?=$name;?>"><br>
<label><span
class="required">*</span>Ваш Email: </label>
<input
name="email" type="text" class="box" id="email" size="40" value="<?=$email;?>"><br>
<label><span
class="required">*</span> Тема: </label>
<input
name="subject" type="text" class="box" id="subject" size="40" value="<?=$subject;?>"><br>
<label><span
class="required">*</span> Сообщение: </label>
<textarea
name="message" cols="40" rows="10" id="message"><?=$message;?></textarea><br>
<label><span
class="required">*</span> Проверка на спам: <br><b>2 + 3=</b></label>
<input
name="spamcheck" type="text" class="box" id="spamcheck" size="4" value="<?=$spamcheck;?>"><br><br>

<!-- Submit Button-->
<input name="send" type="submit" class="button" id="send" value="">
</form>


<!-- E-mail verification. Do not edit -->
<?php
}
function isEmail($email)
{
return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn |bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|d m|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|g t|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw| ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv| mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro| ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th |tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu| za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
,$email));
}
?>
<!-- END CONTACT FORM -->

</div> <!-- /contentForm -->




Спустя 1 час, 14 минут, 12 секунд (4.03.2011 - 19:30) Zerstoren написал(а):
$msg .= 'Content-type: text/plain; charset=windows-1251' ."\r\n";
или нужную вам кодировку.

Спустя 11 минут, 3 секунды (4.03.2011 - 19:41) sergiost написал(а):
Вставил то что вы указали и получилось вот что:
From : Михаил
e-Mail : test@mail.ru
Subject : [Сообщение с мастерской] : Покупка дачи

Message :
приветик это яContent-type: text/plain; charset=windows-1251

То есть не помогло. Или не то с этим делаю.

Спустя 15 минут, 23 секунды (4.03.2011 - 19:56) Zerstoren написал(а):
вообще должно выглядить примерно так

			$to = 'mail@gmail.com';
$subject = 'Subj';

$headers = 'Content-type: text/plain; charset=windows-1251' . "\r\n";
$headers .= 'From: inn@mail.ru'."\r\n";
$headers .= 'X-Mailer: PHP '.phpversion(). "\r\n";

$ma = mail($to, $subject, $body, $headers);



И то, декодировать будут мейлеры, а не отправщик.

а если при отправке - то iconv("Текущая кодировка","Требуемая кодировка",$string);

Спустя 2 минуты, 25 секунд (4.03.2011 - 19:59) sergiost написал(а):
Но у меня такого нет в коде.
Z Я так понимаю, нужно что-то здесь изменить и добавить, но что и куда, не знаю...

$msg = "From : $name \r\ne-Mail : $email \r\nSubject : $subject \r\n\n" . "Message : \r\n$message";
mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n");


Спустя 1 час, 31 минута, 26 секунд (4.03.2011 - 21:30) Trianon написал(а):
поскольку у Вас и скрипт, и письмо в UTF-8, то и указываемый Content-Type тоже нужно поставить utf-8 (а не windows-1251)

Спустя 28 минут, 8 секунд (4.03.2011 - 21:58) sergiost написал(а):
да, сайт в utf-8 и с него отправляется письмо админу и оно приходит в кодировке utf-8 а хочется в win-1251.
Я пробовал этот же код обратной связи на сайте с кодировкой win-1251 то и письмо приходит на мыло в этой кодировке. Такое впечатление, что этот php-код в зависимости от кодировки сайта и шлет письма в такой кодировке. Но как ему указать в какой слать?

Спустя 32 минуты, 31 секунда (4.03.2011 - 22:31) Trianon написал(а):
$msg     = "From : $name \r\ne-Mail : $email \r\nSubject : $subject \r\n\n" . "Message : \r\n$message";
mail($to, $subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n"
."Content-Type: text/plain; charset=\"utf-8\"\r\n");


Кстати, Subject в принципе тоже стоит перекодировать.
Да и вообще оформить сообщение согласно RFC-2822

Спустя 49 минут, 36 секунд (4.03.2011 - 23:20) sergiost написал(а):
Вот спасибо добрый человек! Всё работает оказывается smile.gif

Спустя 5 минут, 29 секунд (4.03.2011 - 23:26) sergiost написал(а):
Есть еще такая же проблема, но только со php-кодом массовой рассылки писем с сайта. Суть такая же, отправляю рассылку подписчикам, а она в кодировке utf-8 им и приходит, как в предыдущем случае, в кракозябах. Пробовал заменять в коде utf-8 на win-1251 не помогает.
Подскажите пожалуйста решение.
Ниже код:

<?php
/*
Plugin Name: Mass mail
Description: Mass mail (Newsletter) function to GS
Version: 1.0

*/

# get correct id for plugin

$thisfile=basename(__FILE__, ".php");

# registration
register_plugin(
$thisfile,
'Массовая рассылка',
'1.0',
'Alexander Bцrjesson',
'http://www.atb-webdesign.se/',
'Добавляет функцию массовой рассылки почты. Вставте код:<br /><?php echo get_mass_mail_form() ?>',
'plugins',
'setup_mass_mail'
);

//LANGUAGE SUPPORT
$path = GSPLUGINPATH.'gs_massmail/lang/';
$filenames = getFiles($path);
if(count($filenames) == 0){
$language_file = 'sv_SE.php';
}
else {
foreach ($filenames as $file) {
if($file == $LANG.'.php')
$language_file = $file;
}
}


require_once $path.$language_file;

add_action('plugins-sidebar','createSideMenu',array($thisfile, 'Массовая рассылка'));

function get_mass_mail_form(){
global $i18n;
?>
<form
action="<?php get_page_url(); ?>" method="post" class="contactform" >
<?php
set_mass_mail_page(); ?>
<p>
<input
type="text" class="text" name="massmail[email]" />
<br />
<label>
Введите E-mail</label>
</p>
<p><input
type="submit" class="submit" value="<?php echo $i18n['MM_SUBSCRIBE']?>" id="add-receiver" name="add-receiver" /></p>
</form>
<?php

}

function show_editor(){
global $i18n, $HTMLEDITOR;
?>
<h3><?php
echo $i18n['MM_SENDMAIL']?></h3>
<form
method="post" class="sendmassmail">
<p>
<b><?php
echo $i18n['MM_SUBJECT']?></b>
<br />
<input
type="text" id="subject" name="subject" size="70"/>
</p>
<p>
<textarea
id="post-content" rel="<?php echo $i18n['LABEL_PAGEBODY']; ?>" name="post-content"></textarea>
</p>
<p><input
class="submit" type="submit" name="submitted" value="<?php echo $i18n['MM_SENDMAILTOALL']?>" />   <?php echo $i18n['OR']; ?>   <a class="cancel" href="pages.php?cancel"><?php echo $i18n['CANCEL']; ?></a></p>
</form>

<?php

if (defined('GSEDITORHEIGHT')) { $EDHEIGHT = GSEDITORHEIGHT .'px'; } else { $EDHEIGHT = '500px'; }
if (defined('GSEDITORLANG')) { $EDLANG = GSEDITORLANG; } else { $EDLANG = 'en'; }
if (defined('GSEDITORTOOL')) { $EDTOOL = GSEDITORTOOL; } else { $EDTOOL = 'basic'; }


if ($EDTOOL == 'advanced') {
$toolbar = "
['Bold', 'Italic', 'NumberedList', 'BulletedList', 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock', 'Table', 'TextColor', 'Link', 'Unlink', 'Image', 'Format', 'Source']"
;
} else {
$toolbar = "['Bold', 'Italic', 'Underline', 'NumberedList', 'BulletedList', 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock', 'Link', 'Unlink', 'Image', 'Format', 'Source']";
}
?>
<?php
if ($HTMLEDITOR != '') { ?>
<script
type="text/javascript" src="template/js/ckeditor/ckeditor.js"></script>
<script
type="text/javascript">
var
editor = CKEDITOR.replace('post-content', {
skin : 'getsimple',
forcePasteAsPlainText : true,
language : '<?php echo $EDLANG; ?>',
defaultLanguage : '<?php echo $EDLANG; ?>',
entities : true,
uiColor : '#FFFFFF',
height: '<?php echo $EDHEIGHT; ?>',
toolbar :
[

<?php echo $toolbar; ?>
]
//filebrowserBrowseUrl : '/browser/browse.php',
//filebrowserImageBrowseUrl : '/browser/browse.php?type=Images',
//filebrowserWindowWidth : '640',
//filebrowserWindowHeight : '480'

});
</script>
<?php

}
}



function setup_mass_mail(){
global $emailadresses;
global $_POST, $i, $b, $i18n;

$xmlfile = GSDATAPATH."other/massmail.xml";
set_mass_mail_css();
$v = getXML($xmlfile);

if(isset($_POST['submitted'])){
if(strlen($_POST['subject']) == 0 || strlen($_POST['post-content']) == 0)
$err[] = $i18n['MM_SUBJECTANDMESSAGE'];

if(count($err) == 0){
echo "<h3>".$i18n['MM_EMAILSTATUS']."</h3>";
$server_name = getenv ("SERVER_NAME"); // Server Name
$request_uri = getenv ("REQUEST_URI"); // Requested URI

$from = 'noreply@'.substr($server_name, 4, strlen($server_name));

if(isset($_POST['subject']))
$subject = $_POST['subject']; //htmlentities($_POST['subject'], ENT_QUOTES, 'UTF-8');
else
$subject = $i18n['MM_NEWSLETTERFROM'].$server_name;

$headers = "From: ".$from."\r\n";
$headers .= "Return-Path: ".$from."\r\n";
$headers .= "Content-type: text/html\r\n";

$body = $_POST['post-content']; //htmlentities($_POST['post-content'], ENT_QUOTES, 'UTF-8');

foreach ($v as $row => $value) {
if(mail($value->email,$subject,$body,$headers))
$i++;
else
$b++;
}
echo '<p class="ok">'.$i18n['MM_MAILWASSENTTO'].' ('.$i.' '.$i18n['MM_OF'].' '.($b+$i).')<p>';
} else {
echo '<p class="error">'.implode(".<br />", $err).'</p>';
}
}

echo "<h3>".$i18n['MM_SUBSCRIBERS']."</h3>";
if(file_exists($xmlfile) ) {
echo '<table cellspacing="0" cellpadding="0">
<tr>
<td>
'
.$i18n['MM_DATE'].'
</td>
<td>
'
.$i18n['MM_EMAIL'].'
</td>
</tr>
'
;
foreach ($v as $row => $value) {
$emailadresses .= $value->email.';';
echo '<tr>';
echo '<td>'.date('Y-m-d', (int)$value->date).'</td>';
echo '<td>'.$value->email.'</td>';
echo '</tr>';
}
echo '</table>';
echo '<p><b>'.$i18n['MM_COMMASEPARATED'].':</b> <br />'.$emailadresses;
show_editor();
} else {
echo $i18n['MM_NOREGSUBSCRIBERS'];
}
}


function set_mass_mail_css(){
echo '
<!-- CSS for Mass Mail plugin -->
<style type="text/css">
p.ok {
color: #3dc32b;
}
p.error {
color: #FF0000;
}
</style>'
;
}

function set_mass_mail_page(){
global $email;
global $i18n;
if (isset($_POST['add-receiver'])) {
set_mass_mail_css();
$xmlfile = GSDATAPATH."other/massmail.xml";
$email = $_POST['massmail']['email'];
$err = array();

if(!check_email_address($_POST['massmail']['email'])){
$err[] = $i18n['MM_EMAILWRONGFORMAT'];
} else {
if(file_exists($xmlfile) ) {
$v = getXML($xmlfile);
foreach ($v as $row) {
if($row->email == $_POST['massmail']['email']){
$err[] = $i18n['MM_EMAILALLREADYREG'];
break;
}
}
}
}


if(count($err) == 0){
if (!file_exists($xmlfile) ) {
$xml = @new SimpleXMLExtended('<?xml version="1.0" encoding="UTF-8"?><item></item>');
} else {
$xmldata = file_get_contents($xmlfile);
$xml = new SimpleXMLExtended($xmldata);
}
$thislog = $xml->addChild('entry');
$thislog->addChild('date', time());
$thislog->addChild('email', $email);
$xml->asXML($xmlfile);
echo '<p class="ok">'.$i18n['MM_YOUARENOWSUBSCRIBER'].'</p>';
} else {
echo '<p class="error">'.implode(".<br />", $err).'</p>';
}
}
}


?>

Спустя 35 минут, 56 секунд (5.03.2011 - 00:02) sergiost написал(а):
Нашел, спасибо.

$headers .= "Content-type: text/html\r\n";


Только непонятно это что, а то в поле отправителя пишется что-то непонятное

$from = 'noreply@'.substr($server_name, 4, strlen($server_name));

Спустя 9 минут, 53 секунды (5.03.2011 - 00:12) sergiost написал(а):
и это решил. Всем большое спасибо. Удачи!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.