Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luciano Senna

Flex/PHP - Enviando e-mail com imagem no corpo da mensagem

Recommended Posts

Olá galera forum,

 

Estou construindo uma aplicação Air Flex/PHP que contem um formulario para envio de mensagem com imagem. gostaria que esta imagem aparecesse no corpo da mensagem mas só estou conseguindo fazer com que a mesma apareça no e-mail como anexo. segue abaixo o codigo para que possam analisar e se possivel apresentar uma solução.

 

outra duvida: como fazer com que o texto vindo de um Rich Text Editor do Flex seja exibido na mensagem do e-mail com a mesma formatação vinda do Flex via htmlText?

 

Grato;

 

<?php
$fileatt_type = "application/octet-stream";
$fileatt_name = "$email_subject.png";
$sender_name = $_POST['nomeRemetente'];
$email_from = $_POST['emailRemetente'];
$email_subject = $_POST['assuntoMensagem'];
$email_message = $_POST['textoMensagem'];
$email_to = 'meu_email@live.com';
$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);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Lauro ,

Dei uma lida no link sugerido, mas nao ajudou muito..Mesmo gerando um html a imagem esta sendo apresentada como anexo do e-mail.

Na verdade esta havia sido minha primeira tentativa.

 

Grato pela atenção!



Pelo que entendi meu problema esta nesta parte do codigo postado acima. Por mais que eu tenha feito alterações o maximo que consegui foi colocar a imagem dentro da mensagem mas ela aparece em codigo binario. da forma que esta no codigo abaixo a imagem aparece como anexo!
HELP!!!!!!!!!
$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";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu hufersil,

 

Na verdade PhpMailer, HMTL apresenta a mesma facilidade quando vc faz o upload da imagem para o servidor. Mas no caso em questão a imagem vem de uma aplicacao flex e nao sera salva no servidor, ela e codificada com base64. quero exibir esta imagem no corpo da mensagem. mas ela so esta indo como anexo. acredito que o erro esteja no Content-Type.

Mesmo assim agradeço a dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que você pode fazer é utilizar o FileReference do Flex, que vai fazer um upload normal para o PHP.

No FileReference, tem a propriedade data, que é uma instância de URLVariables, onde você pode adicionar dados como em um formulário HTML.

 

Como FileReference é "um campo File de HTML", você pode utilizar o $_FILES['filedata']['tmp_name'] para anexar sua imagem, utilizando o PHPMailer como te indiquei.

 

Muito mais simples do que enviar o ByteArray.

 

Vou fazer um exemplo e já posto.

 

abs



Exemplo funcionando:

 

http://www.hufersil.com.br/labs/emails/

 

Arquivos para download (só o application e o php que manda o e-mail).

http://www.hufersil.com.br/labs/emails/emails-flex.zip

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem grilo.

Dá uma olhada ali no FileReference, que você pode fazer coisas bem mais interessantes ;-)

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Galera do forum,

 

depois de dar uma estudada no codigo que hufersil me envou e dar uma quebradinha de cabeça consegui resolver meu problema. Por isso voltei aki para deixar a solução e agradecer pela ajuda recebida. No entanto achei mais facil utilizar bytearray como vinha fazendo do que acatar a sugestao do hufersil em utilizar o PHPMailer. E como ja era de se esperar a solução era bem mais simples do que se esperava. bastou apenas acrescentar uma linha no meu codigo e colocar a imagem dentro da mensagem e a mesma apareceu no corpo da mensagem do e-mail.

 

Codigo PHP funcionando:

 

$fileatt_type = "application/octet-stream";
$fileatt_name = "".$_POST['assuntoMensagem'].".png";
$sender_name = $_POST['nomeRemetente'];
$email_from = $_POST['emailRemetente'];
$email_subject = $_POST['assuntoMensagem'];
$email_message = $_POST['textoMensagem'];
$email_to = 'seu_email@live.com';
$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)));
$imgData = base64_encode($data);
$img = "<img src= 'data:image/png;base64, $imgData' />";
print($img);
$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: 8bit\n\n".$email_message.$img."\n\n"
;
$mailsend = mail($email_to, $email_subject, $email_message, $headers);
?>

 

 

- Parte acrescida ao codigo:

$imgData = base64_encode($data);
$img = "<img src= 'data:image/png;base64, $imgData' />";
print($img);
Prezado hufersil, gostaria de agradecer a ajuda e sugerir experimentasse utilizar este metodo que utilizei, pois achei mais facil e gostaria de sua opinão.
Grato.


Olá Galera do forum,

 

depois de dar uma estudada no codigo que hufersil me envou e dar uma quebradinha de cabeça consegui resolver meu problema. Por isso voltei aki para deixar a solução e agradecer pela ajuda recebida. No entanto achei mais facil utilizar bytearray como vinha fazendo do que acatar a sugestao do hufersil em utilizar o PHPMailer. E como ja era de se esperar a solução era bem mais simples do que se esperava. bastou apenas acrescentar uma linha no meu codigo e colocar a imagem dentro da mensagem e a mesma apareceu no corpo da mensagem do e-mail.

 

Codigo PHP funcionando:

 

$fileatt_type = "application/octet-stream";
$fileatt_name = "".$_POST['assuntoMensagem'].".png";
$sender_name = $_POST['nomeRemetente'];
$email_from = $_POST['emailRemetente'];
$email_subject = $_POST['assuntoMensagem'];
$email_message = $_POST['textoMensagem'];
$email_to = 'seu_email@live.com';
$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)));
$imgData = base64_encode($data);
$img

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Luciano,

 

Primeiramente, quero te dar os parabéns por ter tentado uma forma diferente da que foi sugerida, e não somente aceitar o que lhe foi passado. Isso, pelo menos para mim, é um incentivo a ajudar as pessoas, porque vejo que elas realmente estão tentando, e não somente pegando código da Internet. Por isso, dei um voto positivo no seu post. Na minha opinião, este é o caminho da aprendizagem, onde você analisa o que te passam mas também tenta andar com as próprias pernas ;)

 

Sobre a minha opinião em relação a forma que você fez, eu faria diferente em alguns pontos, como passado no exemplo que enviei.

Os motivos que me levariam a fazer diferente são:

  • poder exibir o usuário o progresso do upload;
  • enviar, facilmente, mais de um arquivo se necessário (e exibir o seu progresso - acredite, usuário gosta de "fru-fru visual' :D);
  • a forma como você fez com a imagem (src="data:image/png;base64,..."), não vai funcionar para usuários que usam GMAIL e visualizam as mensagens pelo browser (1 dia antes estava tentando colocar a imagem inline para a empresa que trabalho, como você fez, mas o Gmail não exibe a imagem). Você precisará colocá-la como anexo e indicar o ID do anexo no atributo src da imagem, como fiz em meu exemplo (pelo menos no meu gmail e de mais 3 pessoas que mandei para visualizarem pelo browser não funcionou);
  • Com o PHPMailer, o código fica mais limpo e legível, além de que, se precisar para SMTP autenticado, é bem mais fácil e a alteração no código é minima;
  • Também com o PHPMailer, ativar o debug é só mudar o valor de uma variável;
  • Com ele, não preciso me preocupar com os headers da mensagem. Ele se vira por mim.

Enfim, o importante é que você resolveu o seu problema tentando da forma como você achou melhor, e principalmente aceitando sugestões, estudando o que lhe passado e tomando decisões. Na minha opinião, como já disse, é dessa forma que se cresce profissionalmente.

 

Sucesso e bons estudos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.