Ir para conteúdo

POWERED BY:

Arquivado

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

1Du1

[Resolvido] Erro ao enviar email Zend Framework

Recommended Posts

Olá....estou tentando enviar um email com anexo pelo zend e ele funciona corretamente pelo localhost mas quando eu tento enviar com o site online já no servidor ocorre este erro....

 

Warning: require_once(Zend/Mail/Transport/Abstract.php) [function.require-once]: failed to open stream: No such file or directory in C:\Inetpub\vhosts\psicoactivarh.com.br\httpdocs\Zend\Mail.php on line 26

Fatal error: require_once() [function.require]: Failed opening required 'Zend/Mail/Transport/Abstract.php' (include_path='C:\Program Files (x86)\Parallels\Plesk\Additional\PleskPHP5\pear') in C:\Inetpub\vhosts\psicoactivarh.com.br\httpdocs\Zend\Mail.php on line 26

 

O script que estou usando é este.

 

<?php

/**
* O Email foi enviado corretamente?
*/

if($_POST) {

require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';

/**
 * Recebendo os campos do formulário
 */

$arqTmp  = $_FILES["file"]["tmp_name"];
$arqName = $_FILES["file"]["name"];
$arqType = $_FILES["file"]["type"];
$para    = $_POST["para"];

/**
 * Config
 */

$smtp     = "smtp.gmail.com";
$conta    = "*********@gmail.com";
$senha    = "********";
$de       = "email";
$assunto  = "Curriculum";
$mensagem = "<b>Zend_Mail()</b> Teste de envio de email com Anexo.";	 

try {
	$config = array (
                'auth' => 'login',
  	                'username' => $conta,
  	                'password' => $senha,
  	                'ssl' => 'ssl',
  	                'port' => '465'
  	                );

  	    $mailTransport = new Zend_Mail_Transport_Smtp($smtp, $config);

  	    $mail = new Zend_Mail();
  	    $mail->setFrom($de);
  	    $mail->addTo($para);
  	    $mail->setBodyHtml($mensagem);
  	    $mail->setSubject($assunto);
  	    $mail->createAttachment(file_get_contents($arqTmp), $arqType, Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64, $arqName);
  	    $mail->send($mailTransport);

  	    echo "Email enviado!";
} catch (Exception $e){
	echo ($e->getMessage());
} 
} else { ?>
  <form method="post" enctype="multipart/form-data" name="form" id="form">
   Arquivo: <input type="file" name="file" size="30" /> <br />
   Para: <input type="text" name="para" size="50" value="email@teste.com.br" /> <br />
   <input name="enviar" id="enviar" type="submit" value="Enviar" />
  </form>
<?php	
}
?>

 

 

Alguem pode me ajudar ? Vlw....

Compartilhar este post


Link para o post
Compartilhar em outros sites

A mensagem de erro informa que o PHP não está conseguindo encontrar um arquivo do ZF.

 

Para que os arquivos possam ser localizados automaticamente você precisa adicionar o caminho onde se encontra a pasta Zend no include_path da sua aplicação.

 

Por exemplo, supondo que a sua pasta Zend esteja em /home/usuario/library ficaria assim:

 


set_include_path(implode(PATH_SEPARATOR, array(
	'/home/usuario/library',
   get_include_path(),
)));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso colocar isso no script ou no php.ini ?

 

A pasta Zend está no servidor e dentro dela estão os arquivos da library

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso colocar isso no script ou no php.ini ?

 

A pasta Zend está no servidor e dentro dela estão os arquivos da library

 

Você precisa colocar em qualquer arquivo PHP antes do código que você postou, pode ser no mesmo arquivo ou então em um arquivo de configuração (se sua aplicação possuir um).

 

Pela mensagem de erro eu vi que o local onde está a pasta Zend em sua hospedagem é C:\Inetpub\vhosts\psicoactivarh.com.br\httpdocs. Está na pasta raiz da sua hospedagem, certo? Se o arquivo que você postou também estiver na raiz, basta deixar o código assim:

 


set_include_path(implode(PATH_SEPARATOR, array(
	dirname(__FILE__),
   get_include_path(),
)));

 

Coloque esse código antes do código que você postou e veja se funcionou.

 

 

O erro está no SSL! Para executar ssl o servidor tem que ter configurado o OpenSSL!

 

Você pode confirmar isso mudando para TLS.

 

Tiare, não entendi de onde você tirou ser erro de SSL. O erro está bem claro que é de arquivo não encontrado. mellow.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei com tls e dá o mesmo erro =/....

o que será que pode ser no servidor ?

Comtodos que testei só dá problema no servidor, com o phpmailer ele envia o email com o anexo pelo localhost e pelo servidor web só chega o email sem o anexo, já pelo zendmail ele vai normal pelo local e dá esse erro pelo servidor web...

 

Leo deixei o código desse jeito....

 

<?php

/**
* O Email foi enviado corretamente?
*/

set_include_path(implode(PATH_SEPARATOR, array(
       dirname(__FILE__),
   get_include_path(),
)));

if($_POST) {

require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';

       /**
        * Recebendo os campos do formulário
        */

       $arqTmp  = $_FILES["file"]["tmp_name"];
       $arqName = $_FILES["file"]["name"];
       $arqType = $_FILES["file"]["type"];
       $para    = $_POST["para"];

       /**
        * Config
        */

       $smtp     = "smtp.gmail.com";
       $conta    = "*********@gmail.com";
       $senha    = "********";
       $de       = "email";
       $assunto  = "Curriculum";
       $mensagem = "<b>Zend_Mail()</b> Teste de envio de email com Anexo.";     

       try {
               $config = array (
                       'auth' => 'login',
                       'username' => $conta,
                       'password' => $senha,
                       'ssl' => 'ssl',
                       'port' => '465'
                       );

           $mailTransport = new Zend_Mail_Transport_Smtp($smtp, $config);

           $mail = new Zend_Mail();
           $mail->setFrom($de);
           $mail->addTo($para);
           $mail->setBodyHtml($mensagem);
           $mail->setSubject($assunto);
           $mail->createAttachment(file_get_contents($arqTmp), $arqType, Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64, $arqName);
           $mail->send($mailTransport);

           echo "Email enviado!";
       } catch (Exception $e){
               echo ($e->getMessage());
       } 
} else { ?>
  <form method="post" enctype="multipart/form-data" name="form" id="form">
          Arquivo: <input type="file" name="file" size="30" /> <br />
          Para: <input type="text" name="para" size="50" value="email@teste.com.br" /> <br />
          <input name="enviar" id="enviar" type="submit" value="Enviar" />
  </form>
<?php   
}
?>

 

Quando eu clico em enviar ele fica carregando por um tempo e dá esse erro

 

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

 

Please contact the server administrator, and inform them of the time the error occurred and anything you might have done that may have caused the error.

 

More information about this error may be available in the server error log.

 

Nem pelo localhost ele está mandando agora...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas agora o erro de arquivo não encontrado sumiu né?

 

Eu vi que você está usando a porta 465, o Gmail usa a porta 587 (não sei se a 465 também funciona) e como o Tiare disse a criptografia é TLS e não SSL.

 

Deixe o código assim e veja se funciona:

 


$config = array (
                       'auth' => 'login',
                       'username' => $conta,
                       'password' => $senha,
                       'tls' => 'ssl',
                       'port' => 587
                       );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei....agora está dando erro em outro lugar =/

 

Notice: Undefined index: file in C: on line 30

Notice: Undefined index: file in C: on line 31

Notice: Undefined index: file in C: on line 32

Notice: Undefined index: file in C: on line 33

 

que são:

 

$arqTmp = $_FILES["file"]["tmp_name"];

$arqName = $_FILES["file"]["name"];

$arqType = $_FILES["file"]["type"];

$para = $_POST["para"];

 

 

Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in C:\wamp\www\PsicoActiva\enviar.php on line 62

 

que é:

 

$mail->createAttachment(file_get_contents($arqTmp), $arqType, Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64, $arqName);

 

 

O erro está no anexo agora ? Este erro está dando no localhost, pelo servidor aparece esse somente

 

Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in C:\Inetpub\vhosts\psicoactivarh.com.br\httpdocs\enviar.php on line 62

5.7.0 Must issue a STARTTLS command first. u20sm8448608yhi.10

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua com o mesmo erro

 

Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in C:\Inetpub\vhosts\psicoactivarh.com.br\httpdocs\enviar.php on line 62

5.7.0 Must issue a STARTTLS command first. e8sm3293343yhk.0

 

:wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, esses erros que você está mostrando são apenas de PHP, não tem nada a ver com o ZF.

 

Até agora você já apresentou vários erros diferentes, e você só diz "continua o mesmo erro", não diz quais pararam de aparecer, daí fica complicado ajudar.

 

Os erros "Undefined index" pararam de aparecer né? Agora é só o erro da função file_get_contents que aparece?

 

O erro informa que o nome do arquivo não pode ser vazio, você está selecionando o arquivo antes de enviar o formulário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui arrumar Leo....a pasta temp n estava acessivel mesmo habilitando controle total nela...ai troquei de windows para linux no servidor e deu certo....

 

Vlw pela ajuda cara

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.