Показать сообщение отдельно
Старый 02.11.2013, 12:23
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 3  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
У меня похожая была проблема. Тоже задавал здесь вопрос, но так никто и не решился помочь.
http://www.flasher.ru/forum/showthread.php?t=203810

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

Добавлено через 10 часов 41 минуту
Вот класс сохранения изображения PHP:

PHP код:
<?php

class SaveImage {

    public function 
__construct() {
        
    }
    
    function 
saveImage($ba) {
        
$response = array();

        
$data $ba->data;
        
        if(
function_exists(gzuncompress)) {
            
$data gzuncompress($data);
        } else {
            
trigger_error ("gzuncompress method does not exists, please send uncompressed data"E_USER_ERROR);
        }
        
        if ( 
file_put_contents("rawdata.jpeg"$data) ) {
            
$response['status'] = 'save_succeed';
        } else {
            
$response['status'] = 'save_error';
        }
        
        return 
$response;
    }

}
?>
и AS3:

Код AS3:
package as3lib.net 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.display.BitmapData;
	import flash.utils.ByteArray;
	import as3lib.images.JPGEncoder;
	import flash.net.NetConnection;
	import flash.events.NetStatusEvent;
	import flash.net.Responder;
	import flash.events.EventDispatcher;
	import flash.events.Event;
 
	public class SavingImage extends EventDispatcher 
	{
 
		private var _netConnection: NetConnection;
 
		private var _encoder: JPGEncoder;
 
		/**
		 * Конструктор
		 * @param	image Изображение
		 * @param	gateWayURL Путь
		 */
		public function SavingImage(image: DisplayObject, gateWayURL: String) 
		{
			var bmd:BitmapData = new BitmapData(image.width, image.height);
				bmd.draw(image);
 
			_encoder = new JPGEncoder(100);
 
			var ba:ByteArray;
				ba = _encoder.encode(bmd);
				ba.compress();
 
			_netConnection = new NetConnection();
			_netConnection.connect(gateWayURL);
			_netConnection.addEventListener(NetStatusEvent.NET_STATUS, statusEvent);
			_netConnection.call('SaveImage/saveImage', new Responder( handleResult, handleError ), ba);
		}
 
		/**
		 * Функция обрабатывает результат, возвращенный от сервера после сохранения изображения  
		 * @param	data
		 */
		private function handleResult(data:Object):void 
		{
			trace(data.status);
			if (data.status == 'save_succeed') 
				dispatchEvent(new Event(Event.COMPLETE));
		}
 
		private function handleError():void 
		{
			trace('error');
		}
 
		private function statusEvent(e:NetStatusEvent):void 
		{
			trace(e.info.details);
		}
	}
}

Класс PHP для отправки письма:

<?php

PHP код:
class Send {

    public function 
__construct() {
    
    }
    
    public function 
sendMail($data) {
        
$response = array();

        
$client_ip $_SERVER['REMOTE_ADDR'];
    
        
$filename "rawdata.jpeg"
        
$to $data->to;                                                                        
        
$from $data->from;                 
        
$subject $data->subject
        
$message iconv('utf-8''utf-8'$data->message);
        
$boundary "---"
        
/* Заголовки */
        
$headers "From: $from\nReply-To: $from\n";
        
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
        
$body "--$boundary\n";
        
/* Присоединяем текстовое сообщение */
        
$body .= "Content-type: text/html; charset=utf-8 \r\n";
        
$body .= "Content-Transfer-Encoding: quoted-printablenn";
        
$body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n";
        
$body .= stripslashes($message)."\n";
        
$body .= "--$boundary\n";
        
$file fopen($filename"r"); 
        
$text fread($filefilesize($filename)); 
        
fclose($file); 
        
/* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */
        
$body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($filename)."?=\n"
        
$body .= "Content-Transfer-Encoding: base64\n";
        
$body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename)."?=\n\n";
        
$body .= chunk_split(base64_encode($text))."\n";
        
$body .= "--".$boundary ."--\n";

        if (
mail($to$subject$body$headers)) {
            
$response['status'] = 'send_succeed';
        } else {
            
$response['status'] = 'send_error';
        }

        return 
$response;
    }

}
?> 

И AS3:

Код AS3:
package as3lib.net 
{
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.NetStatusEvent;
	import flash.net.NetConnection;
	import flash.net.Responder;
	import flash.utils.ByteArray;
	import as3lib.images.JPGEncoder;
	import flash.display.Sprite;
 
	/**
	 * ...
	 * @author ratush
	 */
	public class SendMail extends EventDispatcher
	{
		public static const COMPLETE: String = 'complete';
		public static const ERROR: String = 'error';
 
		private var _netConnection: NetConnection;
 
		private var _encoder: JPGEncoder;
 
 
		public function SendMail(gateWayURL: String, data: Object) 
		{
			_netConnection = new NetConnection();
			_netConnection.connect(gateWayURL);
			_netConnection.addEventListener(NetStatusEvent.NET_STATUS, statusEvent);
			_netConnection.call('Send/sendMail', new Responder( handleResult, handleError ), data);
		}
 
		private function handleResult( result:Object ):void 
		{
			trace( result.status );
			if ( result.status == 'send_succeed' ) 
				dispatchEvent( new Event(SendMail.COMPLETE) );
			else 
				dispatchEvent( new Event(SendMail.ERROR) );
		}
 
		private function handleError():void 
		{
			trace('error connect');
		}
 
		private function statusEvent(e:NetStatusEvent):void 
		{
			trace(e.info.details);
		}
 
	}
 
}

Тут мы сохраняем картинку и потом отправляем:
Код AS3:
new SavingImage(_model.bitmapSeal, 'http://host.eu9.org/test/amfphp/Amfphp/').addEventListener(Event.COMPLETE, savingImage);
 
private function savingImage(e:Event):void {
	e.target.removeEventListener(Event.COMPLETE, savingImage);
 
	var data: Object = new Object();
		data.to = '4884125@i.ua';
		data.from = '4884125@i.ua';
		data.subject = 'Заказ';
		data.message = 	'Текст';
 
	new SendMail( 'http://host.eu9.org/test/amfphp/Amfphp/', data);
}