Flex&;PHP-发送电子邮件附件

Flex&;PHP-发送电子邮件附件,php,flex4,flash-builder,email-attachments,Php,Flex4,Flash Builder,Email Attachments,我希望我的访问者能够将我的应用程序中的创意作为附件发送给朋友(就像创意的屏幕盖一样)。我可以让Flex和PHP进行通信并发送电子邮件,但我无法发送图像。它发送的附件不超过20个,无法打开(当然!) 我的应用程序没有返回错误 我发现下面链接的这些帖子对我很有帮助,但我仍然不知道如何将图像从Flex传递到PHP 以下是我在Flex中的代码: private function sendMail():void{ var _nomSTF:String = nomSTF.te

我希望我的访问者能够将我的应用程序中的创意作为附件发送给朋友(就像创意的屏幕盖一样)。我可以让Flex和PHP进行通信并发送电子邮件,但我无法发送图像。它发送的附件不超过20个,无法打开(当然!)

我的应用程序没有返回错误

我发现下面链接的这些帖子对我很有帮助,但我仍然不知道如何将图像从Flex传递到PHP

以下是我在Flex中的代码:

private function sendMail():void{
            var _nomSTF:String = nomSTF.text;
            var _emailSTF:String = emailSTF.text;
            var _emailFriendSTF:String = emailFriendSTF.text;
            var _sujetSTF:String = sujetSTF.text;
            var _messageSTF:String = messageSTF.text;

            //IMAGE
            var fr:FileReference = new FileReference();
            var encoder:PNGEncoder = new PNGEncoder();

            var screenshotData:BitmapData = new BitmapData(conteneurDeMonImage.width, conteneurDeMonImage.height, true, 0xFFFFFF);

            screenshotData.draw(conteneurDeMonImage);
            //var outputData:ByteArray = encoder.encode(screenshotData);
            //var base64:Base64Encoder = new Base64Encoder();
            var png:PNGEncoder = new PNGEncoder();
            byteArray = png.encode(screenshotData);

            //base64.encodeBytes(outputData);
            //FIN IMAGE


            var evValidMail:ValidationResultEvent = emailSTFValidator.validate();
            var evValidMailFriend:ValidationResultEvent = emailFriendSTFValidator.validate();
            var evValidName:ValidationResultEvent = nomSTFValidator.validate();

            if (evValidMail.type == ValidationResultEvent.VALID
                && evValidName.type == ValidationResultEvent.VALID
                && evValidMailFriend.type == ValidationResultEvent.VALID){
                emailService.send({senderName: _nomSTF, senderEmail:_emailSTF, emailFriendSTF: _emailFriendSTF,
                    emailSubject:_sujetSTF, emailMessage: _messageSTF, file : byteArray});
            } else {
                resultLabel.text="There are Form errors";
                resultLabel.setStyle("styleName", "invalid");
            }
        }

        private function emailResultSTF():void{
            Alert.show("Votre message a bien été envoyé");
            containerSendToFriend.visible = false;
        }
<fx:Declarations>

    <s:HTTPService id="emailService" url="src/mail.php" method="POST"
                    resultFormat="xml" useProxy="false"
                    result="emailResultSTF()"
                    fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail + '\n' + event.message.toString())"/>

</fx:Declarations>
私有函数sendMail():void{
var_nomSTF:String=nomSTF.text;
var_emailSTF:String=emailSTF.text;
var_emailFriendSTF:String=emailFriendSTF.text;
var_sujetSTF:String=sujetSTF.text;
var_messageSTF:String=messageSTF.text;
//形象
var fr:FileReference=newfilereference();
变量编码器:PNGEncoder=newpngencoder();
var screenshotData:BitmapData=新的BitmapData(contennerdemonimage.width,contennerdemonimage.height,true,0xFFFFFF);
屏幕截图数据绘制(ContennerDemominage);
//var outputData:ByteArray=encoder.encode(屏幕快照数据);
//var base64:Base64Encoder=新的Base64Encoder();
var png:PNGEncoder=newpngencoder();
byteArray=png.encode(屏幕快照数据);
//base64.encodeBytes(outputData);
//鳍图像
var evValidMail:ValidationResultEvent=emailSTFValidator.validate();
var evValidMailFriend:ValidationResultEvent=emailFriendSTFValidator.validate();
var evValidName:ValidationResultEvent=nomSTFValidator.validate();
如果(evValidMail.type==ValidationResultEvent.VALID
&&evValidName.type==ValidationResultEvent.VALID
&&evValidMailFriend.type==ValidationResultEvent.VALID){
emailService.send({senderName:_nomSTF,senderEmail:_emailSTF,emailFriendSTF:_emailFriendSTF,
emailSubject:_sujetSTF,emailMessage:_messageSTF,file:byteArray});
}否则{
resultLabel.text=“存在表单错误”;
resultLabel.setStyle(“样式名”,“无效”);
}
}
私有函数emailResultSTF():void{
警报。显示(“Votre信息是一个美好的使者”);
containerSendToFriend.visible=false;
}
下面是我的PHP代码:

$fileatt_type = "application/octet-stream"; 
$fileatt_name = "baignoireElyseeConcept.png";
$sender_name =  $_POST['senderName'];
$email_from = $_POST['senderEmail']; 
$email_subject = $_POST['emailSubject'];  
$email_message = $_POST['emailMessage'];  

$email_to = $_POST['emailFriendSTF']; 

$headers = 'From:'.$sender_name.'<'.$email_from.'>';   

$data= $_POST['file'];

$semi_rand = md5(time());   
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";   

$headers .= "\nMIME-Version: 1.0\n" .   
            "Content-Type: multipart/mixed;\n" .   
            " boundary=\"{$mime_boundary}\"";   

$email_message = "This is a multi-part message in MIME format.\n\n" .   
                "--{$mime_boundary}\n" .   
                "Content-Type:text/html; charset=\"utf-8\"\n" .   
               "Content-Transfer-Encoding: 7bit\n\n" .   
$email_message . "\n\n";   


$email_message .= "--{$mime_boundary}\n" .   
                  "Content-Type: {$fileatt_type};\n" .   
                  " name=\"{$fileatt_name}\"\n" .
                  "Content-Transfer-Encoding: base64\n\n" .   
                 $data . "\n\n" .   
                  "--{$mime_boundary}--\n";   

$mailsend = mail($email_to, $email_subject, $email_message, $headers);
$fileatt_type = "application/octet-stream"; 
$fileatt_name = "test.jpg"; 

$sender_name =  $_POST['senderName'];
$email_from = $_POST['senderEmail']; 
$email_subject = $_POST['emailSubject'];  
$email_message = $_POST['emailMessage'];  

$email_to = $_POST['emailFriendSTF']; 

$headers = 'From:'.$sender_name.'<'.$email_from.'>';   

$data = $_POST['file'];

$data = str_replace('data:image/png;base64,', '', $data);
$data = str_replace(' ', '+', $data);

$img_data = base64_decode($data);
$png = chunk_split(base64_encode(($img_data)));

$semi_rand = md5(time());   
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";   

$headers .= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\"";   

$email_message =
                "This is a multi-part message in MIME format.\n\n".
                "--{$mime_boundary}\n"."Content-Type:text/html; charset=\"utf-8\"\n".
                "Content-Transfer-Encoding: 7bit\n\n".$email_message."\n\n";

$email_message .= "--{$mime_boundary}\n" .   
                  "Content-Type: {$fileatt_type};\n" .   
                  " name=\"{$fileatt_name}\"\n" .
                  "Content-Transfer-Encoding: base64\n\n" .   
                 $png . "\n\n" .   
                  "--{$mime_boundary}--\n";   

$mailsend = mail($email_to, $email_subject, $email_message, $headers);
$fileatt_type=“应用程序/八位字节流”;
$fileatt_name=“baignoirelyseeconcept.png”;
$sender\u name=$\u POST['senderName'];
$email\u from=$\u POST['senderEmail'];
$email\u subject=$\u POST['emailSubject'];
$email\u message=$\u POST['emailMessage'];
$email\u to=$\u POST['emailFriendSTF'];
$headers='From:'.$sender_name';
$data=$_POST['file'];
$semi_rand=md5(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
$headers.=“\n时间版本:1.0\n”。
“内容类型:多部分/混合;\n”。
“边界=\”{$mime\u boundary}\”;
$email\u message=“这是MIME格式的多部分邮件。\n\n”。
“{$mime\U边界}\n”。
“内容类型:text/html;字符集=\”utf-8\“\n”。
“内容传输编码:7bit\n\n”。
$email\u消息。“\n\n”;
$email\u message.=“--{$mime\u boundary}\n”。
“内容类型:{$fileatt_Type};\n”。
“name=\”{$fileatt\u name}\“\n”。
“内容传输编码:base64\n\n”。
$data。“\n\n”。
“{$mime\u boundary}--\n”;
$mailsend=mail($email\u to,$email\u subject,$email\u message,$headers);

玛丽

我找了好几天的答案,终于找到了答案,下面是我是如何做到的(在互联网上的许多资源的帮助下,特别是这一个:)

以下是我的图像Flex代码:

var je:JPEGEncoder = new JPEGEncoder(100); 

var bd:BitmapData = new BitmapData(conteneurDeMonImage.width,conteneurDeMonImage.height);
bd.draw(conteneurDeMonImage);

var ba:ByteArray = je.encode(bd);

var be:Base64Encoder = new Base64Encoder();
be.encodeBytes(ba);

var encodedData:String = be.toString();

            // Testing if my base64 is working in FLEX
            /*var byteArr:ByteArray;
            var B64dec:Base64Decoder = new Base64Decoder();
            B64dec.decode(encodedData);
            byteArr = B64dec.toByteArray();
            imageEnGrand.load(byteArr);*/

emailService.send({senderName: _nomSTF, senderEmail:_emailSTF, emailFriendSTF: _emailFriendSTF, emailSubject:_sujetSTF, emailMessage: _messageSTF, file : encodedData});
以下是我的PHP代码:

$fileatt_type = "application/octet-stream"; 
$fileatt_name = "baignoireElyseeConcept.png";
$sender_name =  $_POST['senderName'];
$email_from = $_POST['senderEmail']; 
$email_subject = $_POST['emailSubject'];  
$email_message = $_POST['emailMessage'];  

$email_to = $_POST['emailFriendSTF']; 

$headers = 'From:'.$sender_name.'<'.$email_from.'>';   

$data= $_POST['file'];

$semi_rand = md5(time());   
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";   

$headers .= "\nMIME-Version: 1.0\n" .   
            "Content-Type: multipart/mixed;\n" .   
            " boundary=\"{$mime_boundary}\"";   

$email_message = "This is a multi-part message in MIME format.\n\n" .   
                "--{$mime_boundary}\n" .   
                "Content-Type:text/html; charset=\"utf-8\"\n" .   
               "Content-Transfer-Encoding: 7bit\n\n" .   
$email_message . "\n\n";   


$email_message .= "--{$mime_boundary}\n" .   
                  "Content-Type: {$fileatt_type};\n" .   
                  " name=\"{$fileatt_name}\"\n" .
                  "Content-Transfer-Encoding: base64\n\n" .   
                 $data . "\n\n" .   
                  "--{$mime_boundary}--\n";   

$mailsend = mail($email_to, $email_subject, $email_message, $headers);
$fileatt_type = "application/octet-stream"; 
$fileatt_name = "test.jpg"; 

$sender_name =  $_POST['senderName'];
$email_from = $_POST['senderEmail']; 
$email_subject = $_POST['emailSubject'];  
$email_message = $_POST['emailMessage'];  

$email_to = $_POST['emailFriendSTF']; 

$headers = 'From:'.$sender_name.'<'.$email_from.'>';   

$data = $_POST['file'];

$data = str_replace('data:image/png;base64,', '', $data);
$data = str_replace(' ', '+', $data);

$img_data = base64_decode($data);
$png = chunk_split(base64_encode(($img_data)));

$semi_rand = md5(time());   
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";   

$headers .= "\nMIME-Version: 1.0\n"."Content-Type: multipart/mixed;\n"." boundary=\"{$mime_boundary}\"";   

$email_message =
                "This is a multi-part message in MIME format.\n\n".
                "--{$mime_boundary}\n"."Content-Type:text/html; charset=\"utf-8\"\n".
                "Content-Transfer-Encoding: 7bit\n\n".$email_message."\n\n";

$email_message .= "--{$mime_boundary}\n" .   
                  "Content-Type: {$fileatt_type};\n" .   
                  " name=\"{$fileatt_name}\"\n" .
                  "Content-Transfer-Encoding: base64\n\n" .   
                 $png . "\n\n" .   
                  "--{$mime_boundary}--\n";   

$mailsend = mail($email_to, $email_subject, $email_message, $headers);
$fileatt_type=“应用程序/八位字节流”;
$fileatt_name=“test.jpg”;
$sender\u name=$\u POST['senderName'];
$email\u from=$\u POST['senderEmail'];
$email\u subject=$\u POST['emailSubject'];
$email\u message=$\u POST['emailMessage'];
$email\u to=$\u POST['emailFriendSTF'];
$headers='From:'.$sender_name';
$data=$_POST['file'];
$data=str_replace('data:image/png;base64','','$data);
$data=str_replace(“,+”,$data);
$img_data=base64_解码($data);
$png=块分割(base64编码($img_数据));
$semi_rand=md5(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
$headers.=“\n时间版本:1.0\n”。“内容类型:多部分/混合;\n”。“边界=\”{$mime\U边界}\”;
$email\u消息=
“这是MIME格式的多部分消息。\n\n”。
“{$mime\U boundary}\n”。“内容类型:text/html;字符集=\”utf-8\“\n”。
“内容传输编码:7bit\n\n”。$email\u message.\n\n”;
$email\u message.=“--{$mime\u boundary}\n”。
“内容类型:{$fileatt_Type};\n”。
“name=\”{$fileatt\u name}\“\n”。
“内容传输编码:base64\n\n”。
$png。“\n\n”。
“{$mime\u boundary}--\n”;
$mailsend=mail($email\u to,$email\u subject,$email\u message,$headers);

我希望它能帮助和我有同样问题的人

“20或更少的附件”是什么意思?具体来说,“2o”是什么?它是2个八位组。我不知道文件大小是如何变化的,但有时确实如此。。。我应该得到的文件大约是200-300ko