Jump to content
2tpower

GMail

Recommended Posts

2tpower

Boa tarde,

Estou a desenvolver um website em que na parte dos contactos tem lá um campo para as pessoas se registarem na newsletter se assim o quiserem.

O email é adicionado a uma base de dados MySQL, mas seria bastante interessante também que fosse adicionado a uma determinada conta de email que, apesar de não ter domínio gmail.com, é administrada através do gmail.

Já procurei na net e o que encontrei foi isto: http://www.ibm.com/developerworks/opensource/library/x-phpgooglecontact/index.html mas apesar de ser bastante interessante não consigo meter a funcionar, tem dado uns erros parvos.

Existe outra maneira para fazer isto?

Resumindo: adicionar um e-mail numa e-mail account qualquer, e-mail esse que também é guardado em MySQL.

Obrigado.

ps: criar um "back-office e-mail manager" não é o objectivo, o objectivo é importar para um webmail conhecido (gmail, hotmail...).

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá 2tpower...

O melhor método é mesmo esse... queres descrever quais são os erros parvos que te aparecem?

Abraço.

Share this post


Link to post
Share on other sites
2tpower

Boas,

Obrigado pelo interesse.

Então os "erros parvos" :) são os seguintes:

Se correr através do Wamp:

Fatal error: Class 'Zend_Gdata_ClientLogin' not found - Parece que não consegue encontrar os ficheiros mas eu já verifiquei o caminho relativo e está correcto  ;)

Se correr através do Dreamwaver:

Parece que aqui não dá o erro anterior (os caminhos são os mesmos...) mas dá este:

ERROR:Unable to Connect to ssl://www.google.com:443. Error #38664464: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?

Saudações.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ora então,

Analisando o 2º erro, o problema está no suporte para sockets/ligações SSL não estarem instalados e/ou activos no PHP.

Para corrigir isso, vê este tutorial que indica como activar ligações SSL no WAMP:

http://www.leoganda.net/how-to-enable-xampp-ssl-socket-transport/ ... Aí diz XAMPP mas também dá para o WAMP ;)

Quanto à primeira situação... É estranho.... dizes que se correres do dreamweaver funciona, mas se correres do browser não?

Share this post


Link to post
Share on other sites
2tpower

Nice!  :)

Assim que puder vou dar uma olhada nesse link e aprender mais umas coisinhas. Em relação ao outro erro, se eu for localhost/site/...../gmail.php dá o tal erro no load das classes, se através do Dreamweaver executar o gmail.php dá bem mas com esse erro de SSL o que para mim é muito estranho porque está a executar .php sem estar no servidor...

Eu tenho uma cópia do site no servidor (C:\Programas\Wamp\www\site) e outra cópia a qual edito com o Dreamweaver (D:\....) sempre que faço uma alteração é feito o "upload" para o servidor wamp e corre em localhost, mas isto já vocês sabem ^^

Depois de ler o artigo dou mais noticias.

Obrigado ;)

Share this post


Link to post
Share on other sites
2tpower

Nice!  :D

Assim que puder vou dar uma olhada nesse link e aprender mais umas coisinhas. Em relação ao outro erro, se eu for localhost/site/...../gmail.php dá o tal erro no load das classes, se através do Dreamweaver executar o gmail.php dá bem mas com esse erro de SSL o que para mim é muito estranho porque está a executar .php sem estar no servidor...

Eu tenho uma cópia do site no servidor (C:\Programas\Wamp\www\site) e outra cópia a qual edito com o Dreamweaver (D:\....) sempre que faço uma alteração é feito o "upload" para o servidor wamp e corre em localhost, mas isto já vocês sabem ^^

Depois de ler o artigo dou mais noticias.

Obrigado ;)

Em relação ao SSL está resolvido e como mencionei acima, se correr o script apenas fora do site, funciona lindamente, entrei na account do google estava lá o meu teste@teste.com

Agora o outro problema mantêm-se, ou seja, quando quero executar o script contextualizado no website dá asneira.

Os erros que dão são:

Warning: include_once(Zend\Gdata.php) [function.include-once]: failed to open stream: No such file or directory in C:\...Wamp..\Site\...PHP\Zend\Loader.php on line 146

Warning: include_once() [function.include]: Failed opening 'Zend\Gdata.php' for inclusion (include_path='.;C:\php\pear') in C:\...Wamp..\Site\...PHP\Zend\Loader.php on line 146

Warning: require_once(Zend/Exception.php) [function.require-once]: failed to open stream: No such file or directory in C:\...Wamp..\Site\...PHP\Zend\Loader.php on line 98

Fatal error: require_once() [function.require]: Failed opening required 'Zend/Exception.php' (include_path='.;C:\php\pear') in C:\...Wamp..\Site\...PHP\Zend\Loader.php on line 98

Se necessitarem de cada Call Stack de cada error/warning avisem, não achei que fosse necessário.

Nota:

- "correr o script sozinho": Dreamwaver » clicar no ficheiro » F12 (preview) = funciona lindamente (ir ao servidor (c:\...\localhost\site\...\script.php) e correr o ficheiro manualmente tem o mesmo comportamento)

- "correr o script no contexto do site": utilizar o mesmo método acima só que em vez de correr o script corro normalmente a página. Preencho o campo de email clico em submeter, tudo funciona bem, adiciona na BD, mas quando chega ao código do gmail dão os erros acima descritos.

Espero ter sido claro.

Obrigado uma vez mais :D

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ola 2tpower...

Foste bastante claro. O problema deriva do facto de estares a executar manualmente (ou por caminho absoluto) o ficheiro.

O .php necessita do webserver para processar o PHP pelo que - para executares o ficheiro - deves abrir o browser colocar no endereço o caminho através do teu webserver.

Ex.:

Onde tens:

c:\...\localhost\site\...\script.php

Deverá ser:

http://localhost/site/.../script.php

Repara que o "C:\...\" é ignorado (porque o webserver nao tem nada que saber isso)....

Se fizeres F12 no Dreamweaver, vais ver que ele abre-te o browser com um endereço assim ;) Se executares directo, o browser abre com o tal "C:\....\(...)".

Abraço

Share this post


Link to post
Share on other sites
2tpower

Boas,

Sim de facto é como dizes, se eu fizer imaginemos: http://localhost/site/Scripts/PHP/gmail.php corre tudo bem, mas se eu fizer http://localhost/index.php e fizer POST já dá os erros acima.

Quando eu disse que executava directo era sempre através do http://localhost/... o ser "directo" era pelo facto de ir mesmo ao script e correr o ficheiro (http://localhost/site/Scripts/PHP/gmail.php) agora através de POST como disse acima, não consigo.

Como é que eu posso corrigir isto?

Obrigado ;)

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

AHH :)

Presumo que o ficheiro gmail.php, quando fazes POST é incluído no index.php certo?....

Se assim for, deves fazer o caminho relativo como se partisses do index.php (ou seja da pasta C:\...\localhost\ ), porque o caminho é relativamente ao ficheiro principal :)

Share this post


Link to post
Share on other sites
2tpower

Sim é isso que estou a fazer, ainda estou a apalpar terreno com .php, já sei fazer umas coisas engraçadas e tal eheh mas não domino ^^, por isso também posso perguntar isso, quando a meio do código quero executar um outro script que se encontra num ficheiro, no local desejado faço o tal @require_once(...) e ele corre certo?

Vou testar então com caminho relativo.  :)

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Só para quem não sabe:

Existem 2 funções principais de inclusão de ficheiros e 2 extensões com base nas principais. As principais são: include() e require()... As extensões são as include_once() e require_once(), que apenas diferem no facto de verificarem primeiro se o ficheiro já foi incluído alguma vez no decorrer do processamento actual. Logicamente que se já tiver sido incluído ele não é incluído novamente...

Quanto ao teu caso... Tenho quase a certeza que é isso... O problema é que o caminho para a Zend\GData.php está a ser com base no caminho do ficheiro gmail.php... E estaria bem se chamasses o ficheiro directamente (no browser) como foi especificado... (e que tu verificaste que funciona).

Só que como estás a chamar o ficheiro index.php - e incluis no index.php o gmail.php - o PHP assume que o caminho é relativo ao caminho do index.php e não do gmail.php

Fui claro?

Share this post


Link to post
Share on other sites
2tpower

Já ESTÀAAAAAA  :)

O meu problema foi resolvido com ajuda de uma coisa bastante fixe do Dreamwaver (CTRL+D) abre o ficheiro x em que o cursor está em cima do seu link.

Como disseste e bem, eu no index.php incluo um newsletter.php e depois nesse incluo o gmai.php, o stress é que eu no newsletter estava a fazer @require_once ('blablabla/gmail.php'); quando na verdade devo é @require_once ('gmail.php');

Já está a funcionar, vou só fazer mais uns testes e tal. Acho que também te referiste a isto, mas recebi a tua resposta ao mesmo tempo que resolvi  :cheesygrin:

E foste sempre bastante claro, muito obrigado :)

Share this post


Link to post
Share on other sites
2tpower

Espera lá que afinal ainda não está, isto de lançar os foguetes antes da festa LOL :wallbash:

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Ehehehe...

O problema como eu já te disse está no sítio onde fazes o require da class Zend/GData.php

Mostra aqui o código do gmail.php (não te esqueças de esconder os dados privados) para eu analisar.

Share this post


Link to post
Share on other sites
2tpower

Desculpa lá o "radio off" mas estive aqui a resolver outras coisas, bom voltando a este, então o que tenho é:

index.php

  <?php @require_once('Scripts/PHP/newsletter.php');?>
html html....

newsletter.php

php php.... (verificações, MySQL, enviar mail e se enviou bem
  <?php @require_once('gmail.php');?>

gmail.php

<?php
echo '<script type="application/javascript"> alert('.$mail.'); </script>'; [b]isto funciona como breakpoint [/b]  :cheesygrin:
@require_once ('Zend/Loader.php');	
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Http_Client');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_Feed');
    
$user = "...";
$pass = "...";

try 
{
	//Login e definir protocol version 3.0
	$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, 'cp');
	$gdata = new Zend_Gdata($client);
	$gdata->setMajorProtocolVersion(3);

	//Nova entrada
	$doc  = new DOMDocument();
	$doc->formatOutput = true;
	$entry = $doc->createElement('atom:entry');
	$entry->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:atom', 'http://www.w3.org/2005/Atom');
	$entry->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:gd', 'http://schemas.google.com/g/2005');
	$doc->appendChild($entry);

	//Nome (fica com o mesmo do e-mail)
	$name = $doc->createElement('gd:name');
	$entry->appendChild($name);
	$fullName = $doc->createElement('gd:fullName', $mail);
	$name->appendChild($fullName);

	//Email
	$email = $doc->createElement('gd:email');
	$email->setAttribute('address', $mail);
	$email->setAttribute('rel' ,'http://schemas.google.com/g/2005#work');
	$entry->appendChild($email);          

        //Inserir
	$entryResult = $gdata->insertEntry($doc->saveXML(), 'http://www.google.com/m8/feeds/contacts/default/full');

}
catch (Exception $e) 
{	
	die('ERROR:' . $e->getMessage());
}
?>

E o que me acontece é que quando faço POST fica a página em branco, e acho que está a dar erro no gmail.php porque se pedir para ver o código fonte só aparece:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>...</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <script type="application/javascript" src="Scripts/JS/jquery.js"></script>
        <script type="application/javascript" src="Scripts/JS/newsletter.js"></script>

                <script type="application/javascript"> alert(lalalala@asd.asd); </script>

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

OK não faz mal :) também estou a fazer serão!

No gmail.php, onde tens:

@require_once ('Zend/Loader.php'); 

Deve ser:

@require_once ('Scripts/PHP/Zend/Loader.php'); 

Ou então, para suportar o acesso directo:

if( stristr($_SERVER['PHP_SELF'],"gmail.php") || stristr($_SERVER['PHP_SELF'],"newsletter.php") )
  @require_once ('Zend/Loader.php'); 
else
  @require_once ('Scripts/PHP/Zend/Loader.php'); 

Testa e diz qualquer coisa :) :)

Share this post


Link to post
Share on other sites
2tpower

Já tinha testado desta maneira @require_once ('Scripts/PHP/Zend/Loader.php');

Dá o mesmo com qualquer das duas  :)

ps: bastante interessante a tua segunda abordagem!

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Então o problema está no Loader e com certeza que este erro, pelo menos, já não te aparece:

Warning: include_once(Zend\Gdata.php) [function.include-once]: failed to open stream: No such file or directory in C:\...Wamp..\Site\...PHP\Zend\Loader.php on line 146

Passemos aos seguintes... Onde tens:

Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Http_Client');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_Feed');

Deverá passar para:

$path = ( ( stristr($_SERVER['PHP_SELF'],"gmail.php") || stristr($_SERVER['PHP_SELF'],"newsletter.php") ) ? './Zend' : 'Scripts/PHP/Zend' );
Zend_Loader::loadClass('Zend_Gdata',$path);
Zend_Loader::loadClass('Zend_Gdata_ClientLogin',$path);
Zend_Loader::loadClass('Zend_Http_Client',$path);
Zend_Loader::loadClass('Zend_Gdata_Query',$path);
Zend_Loader::loadClass('Zend_Gdata_Feed',$path);

De qualquer forma, fica aqui o link para a documentação do Zend Loader... Para perceberes melhor o que fiz caso funcione:

http://framework.zend.com/manual/en/zend.loader.load.html

Share this post


Link to post
Share on other sites
2tpower

Agora nem se quer tem dado desse tipo de erros, fica a página em branco...

Continua com o mesmo problema... bolas mas o que é que se passará  :wallbash:

EDIT:

Se eu usar o gmail.php a página fica em branco, se eu em vez de usar esse ficheiro se meter tudo no newsletter.php dá: Fatal error: Class 'Zend_Loader' not found in C:\...\Scripts\PHP\newsletter.php on line 31

Obrigado pela paciência  :)

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Eu se pudesse experimentava localmente, mas não podendo, tem que ser por tentativa erro..

Tendo em conta o meu ultimo post, altera a linha k diz:

$path = ( ( stristr($_SERVER['PHP_SELF'],"gmail.php") || stristr($_SERVER['PHP_SELF'],"newsletter.php") ) ? './Zend' : 'Scripts/PHP/Zend' );

Para:

$path = ( ( stristr($_SERVER['PHP_SELF'],"gmail.php") || stristr($_SERVER['PHP_SELF'],"newsletter.php") ) ? '.' : 'Scripts/PHP');

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.