2017-03-01 5 views
1

actionscripts 3 및 php를 사용하여 전자 메일 보내기에 대한 자습서를 찾았습니다. 프로젝트 파일을 다운로드하고 mail.php를 VPS 서버 xamp htdocs 폴더로 복사했습니다. 애니메이션 CC 프로젝트가 실행되었지만 아무 것도 보내지 않았습니다.액션 스크립트 3 ~ PHP 이메일 보내기

AS3 :

submit_btn.addEventListener(MouseEvent.CLICK, sendMessage); 
function sendMessage(e:MouseEvent):void 
{ 
    var my_vars:URLVariables = new URLVariables(); 
    my_vars.senderName = name_txt.text; 
    my_vars.senderEmail = email_txt.text; 
    my_vars.senderMsg = message_txt.text; 

    var my_url:URLRequest = new URLRequest("http://my-domain.com/mail.php"); 
    my_url.method = URLRequestMethod.POST; 
    my_url.data = my_vars; 

    var my_loader:URLLoader = new URLLoader(); 
    my_loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    my_loader.load(my_url); 

    name_txt.text = ""; 
    email_txt.text = ""; 
    message_txt.text = "Message Sent"; 
} 

PHP :

<?php 
$to = "[email protected]"; //Changed to my gmail 
$subject = ($_POST['senderName']); 
$message = ($_POST['senderMsg']); 
$message .= "\n\n---------------------------\n"; 
$message .= "E-mail Sent From: " . $_POST['senderName'] . " <" . $_POST['senderEmail'] . ">\n"; 
$headers = "From: " . $_POST['senderName'] . " <" . $_POST['senderEmail'] . ">\n"; 
if(@mail($to, $subject, $message, $headers)) 
{ 
    echo "EMAIL SENT"; 
} 
else 
{ 
    echo "EMAIL NOT SENT"; 
} 
?> 

애니메이션 CC 출력 :

Error: Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs. at Error$/throwError() at flash.net::URLVariables/decode() at flash.net::URLVariables() at flash.net::URLLoader/onComplete()

PHP 출력 :

Notice: Undefined index: senderName in /opt/lampp/htdocs/mail.php on line 3 Notice: Undefined index: senderMsg in /opt/lampp/htdocs/mail.php on line 4 Notice: Undefined index: senderName in /opt/lampp/htdocs/mail.php on line 6 Notice: Undefined index: senderEmail in /opt/lampp/htdocs/mail.php on line 6 Notice: Undefined index: senderName in /opt/lampp/htdocs/mail.php on line 7 Notice: Undefined index: senderEmail in /opt/lampp/htdocs/mail.php on line 7

EMAIL NOT SENT

+0

나는 actionscript와는 아무런 경험이 없지만 최소한 하나의 문제가 게시물 퀘스트 키가 일치하지 않는 것 같습니다. 당신은'senderName'이라는 프라퍼티를 설정했지만 PHP에서는'name'을 읽으려고합니다. 아마 당신의 AS 속성 이름과 일치하도록 PHP post 키를 변경하는 것은 시작일 것입니다 :'$ _POST [ 'senderName']','$ _POST [ 'senderEmail']','$ _POST [ 'senderMsg']' – Steve

+0

코드를 변경했습니다. 그러나 아무것도 바뀌지 않았다. –

+0

AS3 오류를 방지하려면 URLLoaderDataFormat.VARIABLES 행을 주석 처리하십시오. 이 행은 ** 응답 **은 요청이 아니라 key1 = value1 및 key2 = value2 형식의 문자열임을 나타냅니다. PHP의 경우, 들어오는 데이터가 무엇인지 알기 위해 print_r ($ _ POST) 및 print_r ($ _ GET)부터 시작합니다. – Organis

답변

0

나는 이것을 해냈다. 그것은 훌륭하게 작동한다! 플래시 액션 스크립트 3 IN 정의 : 무효 { 경우 ((: 당신의 PHP는 새로운 경우

function f_sendMail() { 
    var loader: URLLoader = new URLLoader; 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 

    var urlreq: URLRequest = new URLRequest("mysqlphp.php"); 
    urlreq.method = URLRequestMethod.POST; 
    var urlvars: URLVariables = new URLVariables; 
    //data to be sent to php 
    //xdato1= name receibed php 
    //wdato1= name in flash 
    urlvars.xdato1 = wdato1; 
    urlvars.xdato2 = wdato2; 
    urlreq.data = urlvars; 

    loader.addEventListener(Event.COMPLETE, f_completed); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, f_errorHandler); 
    loader.addEventListener(IOErrorEvent.NETWORK_ERROR, f_errorHandler); 
    loader.addEventListener(IOErrorEvent.VERIFY_ERROR, f_errorHandler); 
    loader.addEventListener(IOErrorEvent.DISK_ERROR, f_errorHandler); 
    try { 
     loader.load(urlreq); 
    } catch (error: Error) { 
     sonidomal(); 
     errortxt.text = "A Error has occurred in send mail: " + error; 
    } 
    function f_errorHandler(e: IOErrorEvent): void { 
     errortxt.text = "errorHandler error=" + e.text; 
    } 
    function f_completed(event: Event): void { 
     if ((event.target.data.done == null) || 
      (event.target.data.done ==  undefined)) { 
      errortxt.text = "Undefined"; 
     } else { 
      if ((event.target.data.done.indexOf("Error") > -1) || 
       (event.target.data.done.indexOf("error") > -1)) { 
       errortxt.text = event.target.data.done; 
      } else { 
       var textophp: String = event.target.data.done; 
       //if you want to send data from php to flash 
       //remember is by one string using echo 
       //you have to separate it maybe "," 
       trace ("mail ok"); 
      } 
     } 
    } 
} 

//---------------------------------------------- 
//In php 
//receibe from flash 
$flashdato1  = $_POST['xdato1']; 
$flashdato2  = $_POST['xdato2']; 
//do query to data base using $flashdato1 and $flashdato2 
//the result of query is in $rsSearchResults 
if ($rsSearchResults){ 
    $rows = mysql_numrows($rsSearchResults); 
    //put the information into $out 
    $body_content=$out; 
    //file name 
    $file_name="datos/contestadop.csv"; 
    // Open the file in write mode, if file does not exist 
    // then it will be created. 
    $fp = fopen ($file_name, "w"); 
    // entering data to the file 
    fwrite ($fp,$body_content); 
    fclose ($fp);// closing the file pointer 
    //send mail 
    //$mail_to and $mail_from must be set. 
    $eol="\n"; 
    $mail_to = $fladdress; // Who is the E-Mail going to? 
    $mail_from = 'mail.company.com.mx'; 
    // Where does the E-Mail appear to be from? 
    $host_url = $_SERVER['HTTP_HOST']; 
    $message_subject = 'Monthly report'; 
    $headers = 'From: ' . $mail_from. "\r\n".'Reply-To:'; 
    $headers =.$mail_from."\r\n".'X-Mailer: PHP/'.phpversion(); 
    $headers .= "\n";  
    $message_body = ' This is the information you requested';  
    $message_body .= $fltitrpte . "\r\n"; 
    $message_body .= ' data is separated by "," , ' . "\r\n"; 
    $message_body .= ' Atte.'. "\r\n" ; 
    $message_body .= ' Business department'. "\r\n" ; 
    $message_body .= "\n\n"; 
    //File for Attachment 
    $f_name  = $file_name; 
    //use relative path OR ELSE big headaches. 
    // $letter is my file for attaching. 
    $handle  = fopen($f_name, 'rb'); 
    $f_contents = fread($handle, filesize($f_name)); 
    $f_type  = filetype($f_name); 
    fclose($handle); 
    //Attachment 
    $mime_boundary = md5(time()); 
    $msg    = ""; 
    $msg   .= "--".$mime_boundary.$eol; 
    $msg   .= "Content-Type: application/txt; ".$eol; 
    //sometimes i have to send MS Word, use 'msword' 
    //instead of 'pdf' 
    $msg   .= "Content-Disposition: attachment;".$eol.$eol; 
    // !! This line needs TWO end of lines !! IMPORTANT !! 
    $msg   .= $body_content.$eol.$eol; 
    // # Finished 
    $msg   .= "--".$mime_boundary."--".$eol.$eol; 
    // finish with two eol's for better security. see Injection. 
    if (mail($mail_to, $message_subject, $message_body.$msg, 
     $headers)){ 
     echo "sent mail"; 
    }else{ 
     echo "Error envio de correo"; 
    } 
} 

당신이 PHP에

0
//I think the error was you do not receive the answer from php correctly. 
//In my example: 
//In flash ".done" is the name field received from php: 

기능 f_completed (이벤트 이벤트) 센드 메일 파일을 변경해야 기억 event.target.data.done == null) || ...

//Then you have to finish php in this way: 
//--- 
//Send data to flash 
$done = "Send mail"; 
echo utf8_encode("done=".$done); 
?> 

//You do not have to write any echo during the php program 
//Because it will send error to flash that is waiting for answer. 
//Other tip. 
//In php program at the beginning in "<?php" do not let any row empty after 
//or before because it causes error to flash