Вот код: (прошу прощения за простыню, но по другому никак)
Свернутый текст
<?php
class Sendmail
{
private $id;
private $email;
private $from;
private $to;
private $subject;
private $text;
public $output_stream;
function __construct($id='')
{
if ($id)
{
$query = "SELECT * FROM sendmail WHERE id = '".$id."'";
$result = mysql_query($query);
if ($result)
{
while ($row = mysql_fetch_array($result))
{
$this->id = $row['id'];
$this->email = $row['email'];
}
} else {
Streams::Append('error','Query: '.$query);
}
} else {
$this->id = '';
$this->email = '';
}
}
function GetId(){return $this->id;}
function GetEmail() {return $this->email;}
function GetFrom() {return $this->from;}
function GetTo() {return $this->to;}
function GetSubject() {return $this->subject;}
function GetText() {return $this->text;}
private function setDefaultLang($lang = ''){
if($lang){
$_SESSION['lang'] = $lang;
}
}
//Редактирование адреса
function Edit()
{
$edit_tpl = array();
$edit_tpl['id'] = $this->id;
$edit_tpl['email'] = $this->email;
global $DR;
require_once $DR.'/inc/_quickform.php';
//Скрытые служебыне элементы
$action = isset($_GET['action']) ? $_GET['action'] : NULL;
if (!$action) $action = isset($_POST['action']) ? $_POST['action'] : NULL;
$form->addElement('hidden','action',$action);
$form->addElement('hidden','this_id',$this->id);
//Данные
$form->addElement('header','site','Редактировать почту');
global $WORK;
$form->addElement('text','email','Адрес почты','style="width: 500px;"');
$form->addElement('hidden','lang',$_SESSION['lang']);
$form->addRule('email','Укажите адрес электронной почты!','required');
$buttons[] = HTML_QuickForm::createElement('submit','btnSubmit','Сохранить');
$buttons[] = HTML_QuickForm::createElement('reset','btnClear','Очистить');
$form->addGroup($buttons, null, null, ' ');
if ($form->validate()) {
if ($_POST['lang']) self::setDefaultLang($_POST['lang']);
// Форма проверена, обрабатываются данные
$form->freeze();
foreach ($_POST as $key => $value)
{
eval('$'.$key.' = $_POST['.$key.'];');
}
$query = "SELECT * FROM sendmail WHERE email = '".$email."' LIMIT 1";
@ $result = mysql_query($query);
if ($result and !mysql_num_rows($result))
{
if ($this_id)
$query = "UPDATE sendmail SET email='".$email."' WHERE id = '".$this_id."'";
else
$query = "INSERT INTO sendmail (email) VALUES ('".$email."')";
@ $result = mysql_query($query);
echo $query;
if ($result)
{
Streams::AppendFirst('main',formats_ok('Данные сохранены'));
$this->id = ($this_id) ? $this_id : mysql_insert_id();
} else {
Streams::Append('main',formats_err('Не удалось соединиться с базой данных'));
Streams::Append('error','Query: '.$query);
}
}
return true;
} else {
global $WORK;
$form->SetDefaults($edit_tpl);
if (!$this->output_stream) $this->output_stream = 'forms';
Streams::Append($this->output_stream,'<div class="divcheg">');
Streams::Append($this->output_stream,'<script type="text/javascript" src="'.$WORK.'/inc/ajax/manage_logo.js"></script>');
Streams::Append($this->output_stream,$form->toHTML());
Streams::Append($this->output_stream,'</div>');
// Вызываем javascript только, когда редактируем запись
$TinyMCE = '<script type="text/javascript" src="/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
// General options
mode : "exact",
theme : "advanced",
elements : "content",
plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,autosave,advlist,advlink,emotions,iespel l,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,full screen,noneditable,visualchars,nonbreaking,xhtmlxtras,wordcount",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright ,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquo te,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecol or,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,pr int,|,ltr,rtl,|,fullscreen",
//theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del ,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,restoredraft,|,insertfile,insert image",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
// Example content CSS (should be your site CSS)
content_css : "/'.$_SESSION['lang'].'/styles/service.css",
language : "ru",
file_browser_callback: "ajaxfilemanager",
autosave_ask_before_unload : false
});
function ajaxfilemanager(field_name, url, type, win) {
var ajaxfilemanagerurl = "/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php";
switch (type) {
case "image":
break;
case "media":
break;
case "flash":
break;
case "file":
break;
default:
return false;
}
tinyMCE.activeEditor.windowManager.open({
url: "/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php",
width: 782,
height: 440,
inline : "yes",
close_previous : "no"
},{
window : win,
input : field_name
});
}
</script>
';
Streams::Append('js',$TinyMCE);
global $WORK;
Streams::Append($this->output_stream,'<!-- PopCalendar(tag name and id must match) Tags should sit at the page bottom --><iframe width=174 height=189 name="gToday:normal:agenda.js" id="gToday:normal:agenda.js" src="'.$WORK.'/modules/calendar/ipopeng.htm" scrolling="no" frameborder="0" style="visibility:visible; z-index:999; position:absolute; left:-500px; top:0px;"></iframe>');
}
}
//Удаление Объекта
function Delete()
{
if ($this->id)
{
//Удаляем объект
$query = "DELETE FROM sendmail WHERE id='".$this->id."' LIMIT 1";
@ $result = mysql_query($query);
if ($result)
{
Streams::AppendFirst('main',formats_ok('Объект удален'));
} else {
Streams::AppendFirst('main',formats_err("Не удалось соединиться с базой данных"));
Streams::Append('error','Query: ',$query);
}
} else {
Streams::AppendFirst('main',formats_err("Не хватает данных для удаления"));
Streams::Append('error','Site::Delete() failed! No id.');
}
}
static function DisplayList($params='', $list = '')
{
if ($params)
{
$params = explode('|',$params);
foreach ($params as $value) $paramlist[$value] = 1;
}
$paramlist['edit'] = 1;
$paramlist['delete'] = 1;
$ordering = new DataOrdering();
$ordering->AddItem('id','id');
$ordering->AddItem('email','email');
$ordering->SetDefault('id','down');
$ordering->Init();
//$rubrics = Lister::GetData('email');
$query = "SELECT * FROM sendmail".$ordering->OrderBy_Item();
$result = mysql_query($query);
if ($result)
{
Streams::Append('main','<div class="divcheg">');
Streams::Append('main','<table class="maintable" align=center>');
if (mysql_num_rows($result))
{
Streams::Append('main','<tr>');
Streams::Append('main','<th colspan="2">'.$ordering->ShowItem('email','Адрес').'</th>');
if ($paramlist) Streams::Append('main','<th><b>Действия</b></th>');
Streams::Append('main','</tr>');
}
$i=1;
global $WORK;
while ($row = mysql_fetch_array($result))
{
Streams::Append('main','<tr>');
Streams::Append('main','<td>'.($i++).'.</td>');
Streams::Append('main','<td style="text-align: left;">'.$row['email'].'</td>');
Streams::Append('main','<td>');
Streams::Append('main','<a href="'.$_SERVER['PHP_SELF'].'?action=edit_email&id='.$row['id'].'" email="Редактировать"><img src="'.$WORK.'/images/service/notes_16x16.png" alt="V" email="Редактировать"></a>');
Streams::Append('main','<a href="'.$_SERVER['PHP_SELF'].'?action=delete_email&id='.$row['id'].'" email="Удалить"><img src="'.$WORK.'/images/service/delete_16x16.png" alt="Х" email="Удалить"></a>');
Streams::Append('main','</td>');
Streams::Append('main','</tr>');
}
Streams::Append('main','</table>');
Streams::Append('main','</div>');
} else {
Streams::AppendFirst('main',formats_err('Не удалось соединиться с базой данных'));
Streams::Append('error','SELECT failed!');
Streams::Append('error','Query: '.$query);
}
}
function SendEmailMessage()
{
$edit_tpl = array();
$edit_tpl['email'] = $this->from;
$edit_tpl['to'] = $this->to;
$edit_tpl['subject'] = $this->subject;
$edit_tpl['text'] = $this->text;
global $DR;
require_once $DR.'/inc/_quickform.php';
//Скрытые служебыне элементы
$action = isset($_GET['action']) ? $_GET['action'] : NULL;
if (!$action) $action = isset($_POST['action']) ? $_POST['action'] : NULL;
$form->addElement('hidden','action',$action);
//Данные
$form->addElement('header','site','Отправить сообщение');
global $WORK;
$form->addElement('text','subject','Тема','style="width: 600px;"');
$form->addElement('hidden','lang',$_SESSION['lang']);
$form->addElement('textarea','text','Сообщение','style="height: 500px; width: 700px;" id="content"');
$form->addRule('text','У вас пустое сообщение','required');
$buttons[] = HTML_QuickForm::createElement('submit','btnSubmit','Отправить');
$buttons[] = HTML_QuickForm::createElement('reset','btnClear','Очистить');
$form->addGroup($buttons, null, null, ' ');
if ($form->validate()) {
if ($_POST['lang']) self::setDefaultLang($_POST['lang']);
// Форма проверена, обрабатываются данные
$form->freeze();
foreach ($_POST as $key => $value)
{
eval('$'.$key.' = $_POST['.$key.'];');
}
//Вытягиваем список адресов
$query = "SELECT `email` FROM `sendmail`";
$result = mysql_query($query);
if ($result)
{
$mailarr = Array();
while ($row = mysql_fetch_assoc($result))
{
$mailarr[] = $row['email'];
}
$subject = $subject;
$content = '<html><title>Рассылка от компании VIP Agent</title><body>'.$text.'</body></html>';
$to = implode(',', $mailarr);
$headers = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: VIP Agent <no-replay@vipagent.in.ua>\r\n";
mail( $to, $subject, $content, $headers);
if (mail)
{
Streams::AppendFirst('main',formats_ok('Письма отправлены'));
$this->id = ($this_id) ? $this_id : mysql_insert_id();
} else {
Streams::Append('main',formats_err('Не удалось соединиться с базой данных'));
Streams::Append('error','Query: '.$query);
}
}
return true;
} else {
global $WORK;
$form->SetDefaults($edit_tpl);
if (!$this->output_stream) $this->output_stream = 'forms';
Streams::Append($this->output_stream,'<div class="divcheg">');
Streams::Append($this->output_stream,'<script type="text/javascript" src="'.$WORK.'/inc/ajax/manage_logo.js"></script>');
Streams::Append($this->output_stream,$form->toHTML());
Streams::Append($this->output_stream,'</div>');
// Вызываем javascript только, когда редактируем запись
$TinyMCE = '<script type="text/javascript" src="/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
// General options
mode : "exact",
theme : "advanced",
elements : "content",
plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,autosave,advlist,advlink,emotions,iespel l,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,full screen,noneditable,visualchars,nonbreaking,xhtmlxtras,wordcount",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright ,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquo te,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,real_code,|,insertdate,inserttime,preview,code |,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,pr int,|,ltr,rtl,|,fullscreen",
//theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del ,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,restoredraft,|,insertfile,insert image",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
// Example content CSS (should be your site CSS)
content_css : "/'.$_SESSION['lang'].'/styles/service.css",
language : "uk",
file_browser_callback: "ajaxfilemanager",
autosave_ask_before_unload : false
});
function ajaxfilemanager(field_name, url, type, win) {
var ajaxfilemanagerurl = "/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php";
switch (type) {
case "image":
break;
case "media":
break;
case "flash":
break;
case "file":
break;
default:
return false;
}
tinyMCE.activeEditor.windowManager.open({
url: "/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php",
width: 782,
height: 440,
inline : "yes",
close_previous : "no"
},{
window : win,
input : field_name
});
}
</script>
';
Streams::Append('js',$TinyMCE);
global $WORK;
Streams::Append($this->output_stream,'<!-- PopCalendar(tag name and id must match) Tags should sit at the page bottom --><iframe width=174 height=189 name="gToday:normal:agenda.js" id="gToday:normal:agenda.js" src="'.$WORK.'/modules/calendar/ipopeng.htm" scrolling="no" frameborder="0" style="visibility:visible; z-index:999; position:absolute; left:-500px; top:0px;"></iframe>');
}
}
}
?>
Это простая функция отправки имейлов, которая вытягивает с базы данных адреса и рассылает письма в хтмл коде. Но вот такая причуда, добавляется обратный слеш везде где не попадя, не могу разобраться, где косяк. понял что косяк не в TynyMCE
Вот что приходит в письме и на денвере и на гмейле:
X-Sendmail-Cmdline: sendmail.pl -t -i
To: voytenko.ov@gmail.com,olex2004@ukr.net
Subject: ыва
Content-type: text/html; charset=windows-1251
From: VIP Agent <no-replay@vipagent.in.ua>
<html><title>Рассылка от компании VInt</title><body><p><img src=\"http://www.vi.ua/uploads/realty/0101_3.JPG\" alt=\"\" width=\"400\" height=\"301\" /></p></body></html>
тоесть тычит обратный слеш после знака = везде.