Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.11.2013, 12:01
uglygoose вне форума Посмотреть профиль Отправить личное сообщение для uglygoose Найти все сообщения от uglygoose
  № 1  
Ответить с цитированием
uglygoose

Регистрация: Nov 2013
Сообщений: 2
По умолчанию Отправить изображение на почту

Есть конструктор на флеш. Полученный результат (по сути movieclip) нужно трансформировать в изображение (формат не имеет значения .png, .jpg все подойдет) и послать на почту вместе с другими параметрами. Я так понимаю задача достаточно стандартная и вполне возможно у кого-то есть готовая заготовка. Прилагаю собственную попытку решения проблемы, но вместо картинки приходит пустой файл. Где ошибка?

Flash
Код AS3:
import JPGEncoder;
finish.addEventListener(MouseEvent.CLICK,sendData);
function sendData(event:MouseEvent):void
{
	var bmpData:BitmapData = new BitmapData(mc.width, mc.height,false,0xFFFFFF);
	bmpData.draw(mc);
 
	var jpgEncoder:JPGEncoder = new JPGEncoder(80);
	var imgByteData:ByteArray = jpgEncoder.encode(bmpData);
 
	var sendVariables:URLVariables = new URLVariables();
	sendVariables.mail_to = "wessness@xxxxxxxxx.com";
	sendVariables.mail_from = "wes@xxxxxxxxxxx.com";
	sendVariables.sub = "Email Subject";
	sendVariables.bod = "This is the body.";
	sendVariables.image = imgByteData;
 
	trace("Encoded File to Send: " + imgByteData);
 
	var requestURL:URLRequest = new URLRequest("send.php");
	requestURL.method = URLRequestMethod.POST;
	requestURL.data = sendVariables;
 
	var loader:URLLoader= new URLLoader();
	loader.addEventListener(Event.COMPLETE, spriteSend);
	loader.addEventListener(Event.OPEN, traceEvent);
	loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, traceEvent);
	loader.addEventListener(IOErrorEvent.IO_ERROR, traceEvent);
	loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent);
	loader.addEventListener(ProgressEvent.PROGRESS, traceEvent);
 
	try
	{
		loader.load(requestURL);
	}
	catch (e: * )
	{
		txt.text = "error";
	}
 
	function traceEvent(e:*):void
	{
		txt.text = "processing...";
	}
 
	function spriteSend(e:Event):void
	{
		txt.text = "data succesfully sent";
	}
}
PHP
Код AS3:
<?php
$img = $_POST['image'];
 
xmail($_POST['mail_to'],$_POST['mail_from'],$_POST['sub'],$_POST['bod'],imagecreatefromstring(base64_decode($img))); 
 
function xmail($email_address,$email_from,$subject,$msg,$attach_file) 
 
{     
    $mail_attached = ""; 
 
    $boundary = md5(uniqid(time())); 
 
    $mail_attached .= "--".$boundary."\r\n" 
 
    ."Content-Type: image/png; name=\"picture\"\r\n" 
 
    . "Content-Transfer-Encoding: base64\r\n" 
 
    . "Content-Disposition: attachment; filename=\"imagePic\"\r\n\r\n" 
 
    .chunk_split($attach_file)."\r\n"; 
 
    $mail_attached .= "--".$boundary." \r\n"; 
 
    $add_header ="MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\""; 
 
    $mail_content = "--".$boundary."\r\n" 
 
    . "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n" 
 
    . "Content-Transfer-Encoding: 8bit\r\n\r\n" 
 
    . $msg."\r\n\r\n".$mail_attached; 
 
    mail($email_address,$subject,$mail_content,"From: ".$email_from."\r\n".$add_header.""); 
} 
?>


Последний раз редактировалось uglygoose; 02.11.2013 в 17:45.
Старый 02.11.2013, 12:06
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
uglygoose, для оформления своего кода надо использовать теги [as3][/as3]
__________________
Reality.getBounds(this);

Старый 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);
}

Старый 01.09.2014, 11:25
uglygoose вне форума Посмотреть профиль Отправить личное сообщение для uglygoose Найти все сообщения от uglygoose
  № 4  
Ответить с цитированием
uglygoose

Регистрация: Nov 2013
Сообщений: 2
спасибо.

Старый 10.09.2014, 20:08
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 5  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Можно и без отправки на сервер.
__________________
In Code We Trust

Старый 10.09.2014, 20:51
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 6  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Цитата:
Сообщение от Astraport Посмотреть сообщение
Можно и без отправки на сервер.
Без сохранения картинки? Поделитесь кодом.

Старый 11.09.2014, 22:38
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 7  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Вчера полдня просидел
Код AS3:
saveFile(bitmapData, "http://your_site/mail/sendmail.php");
 
		public function saveFile(bd:BitmapData, scriptLocation:String):void {
			var byteArray:ByteArray = new ByteArray();
			bd.encode(new Rectangle(0,0,bd.width, bd.height), new JPEGEncoderOptions(90), byteArray);
 
			var encodedFile:Base64Encoder = new Base64Encoder();
			encodedFile.encodeBytes(byteArray);
 
			var data:URLVariables = new URLVariables();
			data.fileData = encodedFile;
 
			var request:URLRequest = new URLRequest(scriptLocation);
			request.method = URLRequestMethod.POST; 
			request.data = data;
 
			var loader:URLLoader= new URLLoader();
			loader.dataFormat = URLLoaderDataFormat.TEXT; 
			loader.addEventListener(flash.events.Event.COMPLETE, onServerResponse);
			loader.addEventListener(flash.events.Event.OPEN, traceEvent);
			loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, traceEvent);
			loader.addEventListener(IOErrorEvent.IO_ERROR, traceEvent);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent);
			loader.addEventListener(ProgressEvent.PROGRESS, traceEvent);
 
			try {
				loader.load(request);
			} catch (e:*) {
				trace("an error occured of type", e);
			}
 
			function traceEvent(e:*):void {
				trace(e);
			}
		}
 
private function onServerResponse(event:flash.events.Event):void
		{
			var loader:URLLoader = URLLoader(event.target);
			trace("onServerResponse: " + loader.data);
		}
PHP код:
<?php
$data 
$_POST['fileData'];

/* Email Detials */
  
$mail_to "your_mail@gmail.com";
  
$from_mail "<sender address>";
  
$from_name "<sender name>";
  
$reply_to "<reply-to address>";
  
$subject "<email subject>";
  
$message "<email content>";
 
/* Attachment File */
  
  
$content chunk_split($data);
   
/* Set the email header */
  // Generate a boundary
  
$boundary md5(uniqid(time()));
   
  
// Email header
  
$header "From: ".$from_name." <".$from_mail.">\r\n";
  
$header .= "Reply-To: ".$reply_to."\r\n";
  
$header .= "MIME-Version: 1.0\r\n";
   
  
// Multipart wraps the Email Content and Attachment
  
$header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  
$header .= "This is a multi-part message in MIME format.\r\n";
  
$header .= "--".$boundary."\r\n";
   
  
// Email content
  // Content-type can be text/plain or text/html
  
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
  
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
  
$header .= "$message\r\n";
  
$header .= "--".$boundary."\r\n";
   
  
// Attachment
  // Edit content type for different file extensions
  
$header .= "Content-Type: application/jpg; name=\"image.jpg\"\r\n";
  
$header .= "Content-Transfer-Encoding: base64\r\n";
  
$header .= "Content-Disposition: attachment; filename=\"image.jpg\"\r\n\r\n";
  
$header .= $content."\r\n";
  
$header .= "--".$boundary."--";
   
  
// Send email
  
if (mail($mail_to$subject""$header)) {
    echo 
"Sent";
  } else {
    echo 
"Error";
  }

?>
Добавлено через 1 минуту
Проверил на двух хостингах - работает.
__________________
In Code We Trust

Старый 12.09.2014, 00:37
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 8  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Бомба.
Максимум что у меня получилось, то это присылать как-бы пустой файл.
Так и знал, что проблема была в header-ах письма, но ни флешеры ни ПХП-шники ни на одном форуме не помогли тогда.
Просто супер.)

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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