E-mail com anexo (upload) - (Resolvido!)

Senhores,

Eu criei um formulário de e-mail com anexo e utilizei a macro (Send an email with attachment). Está funcionando, mas com o seguinte restrição:

Eu só consigo enviar um anexo se o documento anexado já estiver em uma pasta dentro da aplicação (exemplo: _lib/arquivos) se eu fizer o upload de um arquivo novo, que não esteja dentro de uma pasta do sc, ocorre um erro no script devido ele não ter encontrado o arquivo no caminho $anexo=$this->Ini->path_doc.’/’.{arquivo_anexo};

Eu já criei o formulário de e-mail pelo controle e único registro e tive o mesmo problema.

Não sei se isso é uma falha/bug no meu sc ou se todos tem esse problema.
No exemplo do site funciona legal:
http://www.scriptcase.com.br/exemplos-scriptcase/programacao-php/macro-to-send-email-with-attach/

Caso alguém tenha uma alternativa para resolver o meu problema eu agradeço.

Exemplo do código:

$mail_smtp_server = $mail_smtp_server;
$mail_smtp_user = $mail_smtp_user;
$mail_smtp_pass = $mail_smtp_pass;
$mail_from = {mail_from};
$mail_to = {email_to};
$mail_subject = {assunto};
$mail_message = {mensagem};
$mail_format = ‘H’;
$copia_email = {copia_email};
$anexo = {arquivo_anexo};

$anexo=$this->Ini->path_doc.’/’.{arquivo_anexo};

sc_mail_send ($mail_smtp_server,
$mail_smtp_user,
$mail_smtp_pass,
$mail_from,
$mail_to,
$mail_subject,
$mail_message,
$mail_format,
$copia_email,
‘’,
‘’,
‘’,
$anexo);

Obrigado, Fabio Santos

Coloque o envio do evto na onvalidatesucess, o arquivo so eh movidompara a pasta informada apos submeter o formulario.

Obrigado Haroldo pela dica!

O arquivo está indo para as pastas file/doc e tmp normalmente ao submeter o formulário, mas o anexo não está sendo enviado para o destinatário do e-mail.

Ele só envia o anexo para o e-mail se eu anexar um aquivo que já exista na pasta file/doc com o mesmo nome!

Na verdade nem existe a necessidade do arquivo ir para a pasta, preciso mesmo enviar um anexo qualquer para outros usuários/clientes.

Eu sei que ao inserir um arquivo no campo upload instantaneamente o mesmo vai para o temp (tmp) antes mesmo de submeter o formulário, mas o arquivo vai com a descrição modificada. Se não fosse isso eu configuraria caminho dos documentos para o tmp ai eu acho que iria enviar o anexo. (Se o tmp não modificasse o nome do arquivo).

Eu criei o formulário exatamente como no exemplo http://www.scriptcase.com.br/exemplos-scriptcase/tutoriais/programming/mcr13.php

Abra a aplicação de envio de email, selecione Aplicação -> Configuração e altere "Caminho dos Documentos " para o valor correto.
Deve funcionar.
[]s

Vlw Allan pela ajuda,

Estou utilizado em localhost por enquanto e o caminho está assim: C:/Program Files (x86)/NetMake/v71/wwwroot/scriptcase/file/doc

O anexo só envia quando o arquivo anexado já existe dentro da pasta file/doc. Se eu anexar um arquivo que não esteja na pasta da falha no envio.

Qual exatamente a msg de erro?

Eu até atualizei a pasta prod pra ver se resolve, mas não foi!!

Fatal error: Uncaught exception ‘Swift_IoException’ with message ‘Unable to open file for reading [C:/Program Files (x86)/NetMake/v71/wwwroot/scriptcase/file/doc/Pendencias.xlsx]’ in C:\Program Files (x86)\NetMake\v71\wwwroot\scriptcase\prod\third\swift\classes\Swift\ByteStream\FileByteStream.php:136 Stack trace: #0 C:\Program Files (x86)\NetMake\v71\wwwroot\scriptcase\prod\third\swift\classes\Swift\ByteStream\FileByteStream.php(80): Swift_ByteStream_FileByteStream->_getReadHandle() #1 C:\Program Files (x86)\NetMake\v71\wwwroot\scriptcase\prod\third\swift\classes\Swift\Mime\ContentEncoder\Base64ContentEncoder.php(41): Swift_ByteStream_FileByteStream->read(8190) #2 C:\Program Files (x86)\NetMake\v71\wwwroot\scriptcase\prod\third\swift\classes\Swift\Mime\SimpleMimeEntity.php(526): Swift_Mime_ContentEncoder_Base64ContentEncoder->encodeByteStream(Object(Swift_ByteStream_FileByteStream), Object(Swift_Transport_StreamBuffer), 0, 78) #3 C:\Program Files (x86)\NetMake\v71\wwwroot\scriptcase\prod\third\swift\classes\Swift\Mime\Sim in C:\Program Files (x86)\NetMake\v71\wwwroot\scriptcase\prod\third\swift\classes\Swift\Transport\StreamBuffer.php on line 174

Dantas,
Infelizmente não posso te ajudar com esse erro. Vc já ouviu falar da biblioteca phpmailer?
Eu a uso para enviar emails.
[]s

Vlw pela ajuda,

Vou fazer isso! vou criar um formulário html colocar no blank e colocar um php pra envio no _lib. Já perdi muito tempo com isso…

Obrigado mais uma vez!

Quem tiver o mesmo problema/dificuldade eu resolvi assim:

O QUÊ? ENVIAR E-MAIL COM ANEXO SEM PRECISAR TER O ARQUIVO NA PASTA (path_doc).

1 - No formulário de e-mail principal coloque o código abaixo no onAfterInsert:
sc_commit_trans();
sc_redir(check_email.php, id_cliente={id_cliente}; id_email = {id_email}, “modal”,"",“360”,“900”);

2 - Crie outro formulário com os mesmos campos/tabela (eu chamei de check_email) e coloque o código para enviar o e-mail no evento onload;
Obs.: esse formulário não aparece para o usuário, ele serve somente para processar o envio e buscar o anexo na pasta.

3 - Ainda no formulário check_email em edição de javascript coloque o código self.parent.tb_remove()
Ponto chave: coloque no objeto: geral/fom e no evento onload

Eu achei até melhor que esquema original sc, pois durante o envio fica um imagem gif processando o envio do e-mail.

1 Curtida

Valeu Dantas

Isso resolve:

$arquivo1 = $_SERVER[‘DOCUMENT_ROOT’]."\scriptcase\prodv7\prod\" . {Anexo};
$arquivo2 = $_SERVER[‘DOCUMENT_ROOT’]."\scriptcase\prodv7\prod\" . {Anexo2};

$arquivos = array();

if(is_file($arquivo1)){
$arquivos[] = $arquivo1;
}

if(is_file($arquivo2)){
$arquivos[] = $arquivo2;
}

if(count($arquivos))

{
//Com anexo!! helpdesk
sc_mail_send(‘smtp’, ‘’, ‘’, {email},‘teste@teste.com.br’, ‘Formulário de Abertura de Chamado’, $str_mensagem, ‘H’, ‘’, ‘BCC’, ‘’, ‘’, ‘$arquivos’);
}
Modificar mensagem

Apesar do tópico ser bem antigo, é show a sua resposta, Marilia. Obrigado por compartilhar!!

Olá Marília,

Uma pergunta, e quando ele estiver na hospedagem web, usa algo tipo variável para substituir o “\scriptcase\prodv7\prod\”?