Есть 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
То есть не помогло. Или не то с этим делаю.
From : Михаил
e-Mail : test@mail.ru
Subject : [Сообщение с мастерской] : Покупка дачи
Message :
приветик это яContent-type: text/plain; charset=windows-1251
То есть не помогло. Или не то с этим делаю.
Спустя 15 минут, 23 секунды (4.03.2011 - 19:56) Zerstoren написал(а):
вообще должно выглядить примерно так
И то, декодировать будут мейлеры, а не отправщик.
а если при отправке - то iconv("Текущая кодировка","Требуемая кодировка",$string);
$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 Я так понимаю, нужно что-то здесь изменить и добавить, но что и куда, не знаю...
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-код в зависимости от кодировки сайта и шлет письма в такой кодировке. Но как ему указать в какой слать?
Я пробовал этот же код обратной связи на сайте с кодировкой 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 написал(а):
Вот спасибо добрый человек! Всё работает оказывается
Спустя 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 написал(а):
и это решил. Всем большое спасибо. Удачи!