Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как отменить при отправке сообщения с сайта вызов почтового клиента? (http://www.flasher.ru/forum/showthread.php?t=156715)

Jewelz 31.05.2011 21:01

он еще там и пишет =)

anderson s 01.06.2011 02:49

В смысле?

Добавлено через 14 минут
Код на actionscript3/0 который отсылает на php скрипт
Код AS3:

contact_name.text=contact_email.text=contact_subject.text=contact_message.text=message_status.text="";
 
send_button.addEventListener(MouseEvent.CLICK,submit);
reset_button.addEventListener(MouseEvent.CLICK,reset);
 
var timer:Timer
var var_load:URLLoader=new URLLoader;
var URL_request=new URLRequest("send_email.php");
URL_request.method=URLRequestMethod.POST;
 
function submit(e:MouseEvent):void{
if(contact_name.text==""||contact_email.text==""||contact_subject.text==""||contact_message.text=="")
{
message_status.text="Please enter the valid email adress.";
}
else
{
message_status.text="sending...";
var email_data:String="name="+contact_name.text
+"&email="+contact_email.text
+"&subject="+contact_subject.text
+"&message="+contact_message.text;
 
var URL_vars:URLVariables= new URLVariables(email_data);
URL_vars.dataFormat=URLLoaderDataFormat.TEXT;
 
URL_request.data=URL_vars;
var_load.load(URL_request);
var_load.addEventListener(Event.COMPLETE,receive_responce);
}
}
function reset(e:MouseEvent):void
{
contact_name.text=contact_email.text=contact_subject.text=contact_message.text=message_status.text="";
}
function validate_email(s:String):Boolean
{
var p:RegExp=/(w|[_.\-])+@((\w|-)+\W{2,4}+/;
var r:Object=p.exec(s);
if(r==null)
{
return false;
}
return true;
}
 
function receive_responce(e:Event):void
{
var loader:URLLoader=URLLoader(e.target);
var email_status=new URLVariables(loader.data).success;
 
if(email_status=="yes")
{
message_status.text="Success!Your message was sent.";
timer=new Timer(500);
timer.addEventListener(TimerEvent.TIMER,on_timer);
timer.start();
}
else
{
message_status.text="Failed!Tour message cannot sent.";
}
}
function on_timer(te:TimerEvent):void
{
if(timer.currentCount>=10)
{
contact_name.text=contact_email.text=contact_subject.text=contact_message.text=message_status.text="";
timer.removeEventListener(TimerEvent.TIMER,on_timer);
}
}

Код на php send_email
PHP код:

<?php
$contact_name 
$_POST['name'];
$contact_email $_POST['email'];
$contact_subject $_POST['subject'];
$contact_message $_POST['message'];

if( 
$contact_name == true )
{
    
$sender $contact_email;
    
$receiver "anderson1985@mail.ru";
    
$client_ip $_SERVER['REMOTE_ADDR'];
    
$email_body "Name: $contact_name \nEmail: $sender \n\nSubject: $contact_subject \n\nMessage: \n\n$contact_message \n\nIP: $client_ip \n\nFlash Contact Form provided by http://www.flashmo.com";        
    
$extra "From: $sender\r\n" "Reply-To: $sender \r\n" "X-Mailer: PHP/" phpversion();

    if( 
mail$receiver"Flash Contact Form - $contact_subject"$email_body$extra ) ) 
    {
        echo 
"success=yes";
    }
    else
    {
        echo 
"success=no";
    }
}
?>

код на php send_email_auto_responce
PHP код:

<?php
$contact_name 
$_POST['name'];
$contact_email $_POST['email'];
$contact_subject $_POST['subject'];
$contact_message $_POST['message'];

if( 
$contact_name == true )
{
    
$sender $contact_email;
    
$receiver "anderson1985@mail.ru";
    
$client_ip $_SERVER['REMOTE_ADDR'];
    
    
$email_body "Name: $contact_name \nEmail: $sender \n\nSubject: $contact_subject \n\nMessage: \n\n$contact_message \n\nIP: $client_ip \n\nFlash Contact Form provided by http://www.flashmo.com";
    
$email_body_auto_reply "Hello $contact_name, \nThis is the auto reply message. Thank you. \n\nAdmin - http://anderson1985@mail.ru";
    
    
$extra "From: $sender\r\n" "Reply-To: $sender \r\n" "X-Mailer: PHP/" phpversion();
    
$extra_auto_reply "From: $receiver\r\n" "Reply-To: $receiver \r\n" "X-Mailer: PHP/" phpversion();
    
    
mail$sender"Auto Reply - Re: $contact_subject"$email_body_auto_reply$extra_auto_reply );    // auto reply mail to sender

    
if( mail$receiver"Flash Contact Form - $contact_subject"$email_body$extra ) )
    {
        echo 
"success=yes";
    }
    else
    {
        echo 
"success=no";
    }
}
?>

Надеюсь выложил все так, как и просили.
Заранее спасибо за помощь.
PS
так про то. как писать классами тот же сайт никто и не объяснил.

Dukobpa3 01.06.2011 03:39

Исходник флеш-девелоп
Исходник флеш цс5
Вот мой сайтик который невлом отдать с потрохами. (В классах!!!!! :) )
Страницы листаются скроллом, либо перетягиванием за нижний правый уголок.

Почты тут нету правда:) та и админки нету:) Есть только одна мелкая XML-ка и немного картинок.

(кстати спасибо Силину за книжку, всё собираюсь ему на стакан бабла дать, но интернет-деньгами не пользуюсь, аж стыдно ((( Но я все-таки созрею)

Добавлено через 10 минут
Насчет почты.

Это наверное мне чести как флешеру не делает, но я вот в упор так и не научился пользоваться урлЛоадерами всякими и тому подобными вещами.

Поэтому всё что касается работы с сервером я делаю посредством AMF-PHP 1.9
так что во флеше отправка почты у меня выглядит примерно так:

Код AS3:

amf.toamf("scripts.mailfuncatt.send_mail", mailSent, "testmail", _mail.text, "test@test.test", "Me", "TestMail", "temp/photo.jpg");

Ну а сам скрипт который в амф-пхп вставлен вот так:
PHP код:

<?php
class mailfuncatt 
public function  
__construct() { 

}

function 
storeimg($data$filename) {
    
$content $data->data
    
$file fopen($filename'w+');
    
$a fwrite($file$content);
    
fclose($file);

    return 
$a;
}

//function send_mail($mail_to, $thema, $html, $path)
function send_mail($subj$mailTo$mailFrom$nameFrom$textMail$filename

    if (
$filename) {  
        
$fp fopen($filename,"rb");   
        
        if (!
$fp)   
        { 
            print 
"Cannot open file";   
            exit();   
        }   
        
        
$file fread($fpfilesize($filename));   
        
fclose($fp);   
    }  
    
    
$name basename($filename); // в этой переменной надо сформировать имя файла (без всякого пути)  
    
$EOL "\r\n"// ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
    
$boundary     "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  
    
$headers    "MIME-Version: 1.0;$EOL";   
    
$headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  
    
$headers   .= "From: ".$nameFrom." <".$mailFrom.">";  
      
    
$multipart  "--$boundary$EOL";   
    
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";   
    
$multipart .= "Content-Transfer-Encoding: base64$EOL";   
    
$multipart .= $EOL// раздел между заголовками и телом html-части 
    
$multipart .= chunk_split(base64_encode($textMail));   

    
$multipart .=  "$EOL--$boundary$EOL";   
    
$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   
    
$multipart .= "Content-Transfer-Encoding: base64$EOL";   
    
$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   
    
$multipart .= $EOL// раздел между заголовками и телом прикрепленного файла 
    
$multipart .= chunk_split(base64_encode($file));   

    
$multipart .= "$EOL--$boundary--$EOL";   
      
    if(!
mail($mailTo$subj$multipart$headers))
    {
        return 
False;           //если не письмо не отправлено
    
}
    else 
    { 
//// если письмо отправлено
        
return True;
    }  
    exit;  
  }

}
?>

Этот скрипт умеет делать две вещи - сохранять картинку на сервер в туже папку где скрипт, и отправлять письмо с вложенной этой самой картинкой, после чего ее удалять.

(умные пхпшники скажут что можно было сделать проще и быстрее, но я к ним тоже не отношусь :) поэтому сделал вот так вот в два этапа. Сначала из флеша дергаю функцию сохранения картинки, а потом дергаю отправку письма с вложением. Во второй функции указываю имя вложения)

Добавлено через 10 минут
Оффтоп: мда, убогенькая расцветка пхп-кода....

anderson s 01.06.2011 03:56

))))спасибо- попробую как вы сделать.
Хотя AMF-PHP 1.9 вообще еще не пользовался.
PS оффтоп:в смысле?

Dukobpa3 01.06.2011 04:00

Вот это класс коннекта к амф если чего:
Код AS3:

package classes.server 
{
        import flash.net.Responder;
        import flash.net.NetConnection;
        /**
        * ...
        * @author Dukobpa3
        */

        public class Amf
        {
 
                private var nc:NetConnection;  //--
 
                public function Amf(hostname:String) {
                        //trace("creating Amf")
                        nc = new NetConnection();
                        //trace ("nc done")
                        nc.connect(hostname + "amfphp/gateway.php")//--коннектимся к серверу и к обработчику amf
                        //trace("connected")
                        nc.objectEncoding = 3; //--метод кодирования
                        //nc.
                }
 
                /**
                *Выполняет запросы к amfphp
                * wht - сервис и имя запрашиваемой функции (дальше в примере покажу)
                * cb - функция, вызываемая при получении ответа
                * args - аргументы, которые должны передаться запрашиваемой функции от серверного скрипта, указываются через запятую) т.е. может быть хоть один хоть десять.
                */

                public  function toamf(wht:String, cb : Function, ... args) : void {
                        //trace ("start \"to amf\"")
                        var resp : Responder = new Responder(cb, onFault); //--обработчик ответа сервера, если все ок, то вызываем переданную нам  функцию для ответа (cb), если нет, то функцию сообщения об ошибке.
                        //trace ("пфтаемся вызвать функцию")
                        nc.call.apply(null,[wht,resp].concat(args));
                        //nc.call(wht, resp, args); //--немного непонятно, но вкратце: запускаем функции отсылания запроса на сервер, задаем функцию обратного вызова и параметры + функцию при ошибке выполнения.
                        //trace ("вызвали")
                } 
 
                private function onFault(res:Object):void { //--при ошибке выполнения запроса
                        trace('К севраку не достучались, ответ: ' + res);
                } 
 
        }
 
}

А так вообще чуток погуглить почитать придется. Есть и покруче класс, но там дольше разбираться и понимать чем одно письмо отправить.

Добавлено через 2 минуты
Так а с вашим скриптом что не так? По коду вроде всё правильно (прибеднялся я насчет урлРеквестов :) Но мне амф-пхп действительно проще в разЫ)

anderson s 01.06.2011 13:33

Не создавая новую тему- чо значит такая ошибка?
Код:

Error: Error #2101: Строка, переданная в URLVariables.decode(), должна быть строкой запроса закодированного URL-адреса и содержать пары имя/значение.
        at Error$/throwError()
        at flash.net::URLVariables/decode()
        at flash.net::URLVariables()
        at flashsite_fla::contact_17/receive_responce()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/onComplete()



Часовой пояс GMT +4, время: 08:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.