Problema envio mail com o swift

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Problema envio mail com o swift

Mensagempor pedrolm » Segunda Set 10, 2007 9:32

Tenho andado a tentar enviar mail com o script SWIFT, no entanto dá um erro como já acontecia com a função mail(). Para teste estou a usar:

Código: Seleccionar todos
<?php

require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";

$swift =& new Swift(new Swift_Connection_SMTP("localhost", 25));

$message =& new Swift_Message("Some subject", "Your message <u>here</u>", "text/html");

if ($swift->send($message, "xxxxxx@xxxxx", "xxxxxx@xxxxxx"))
{
    echo "Message sent";
}
else
{
    echo "Message failed to send";
}

//It's polite to do this when you're finished
$swift->disconnect();

?>


Surge sempre o mesmo erro:
Fatal error:
Uncaught Error of type [swift_connectionexception] with message [The SMTP connection failed to start [localhost:25]: fsockopen returned Error Number 10060 and Error String 'Uma tentativa de ligação falhou porque o componente ligado não respondeu correctamente após um período de tempo, ou a ligação estabelecida falhou porque o anfitrião ligado não respondeu. ']
@0 swift::swift() in c:\easyphp1-8\www\nova pasta\mail.php on line 6
@1 swift::connect() in c:\easyphp1-8\www\nova pasta\lib\Swift.php on line 109

in c:\easyphp1-8\www\nova pasta\lib\Swift\Errors.php on line 99


A configuração do servidor parece estar correcta... :(
pedrolm
Membro de Prata
Membro de Prata
 
Mensagens: 103
Registado: Quarta Mai 11, 2005 17:51

Mensagempor SkylineGTR » Segunda Set 10, 2007 10:16

Tás a testar isso localmente? Se sim, troca na parte do endereço smtp "localhost" pelo teu smtp.
Se por exemplo, o teu ISP for a netcabo, o smtp que deves usar é "smtp.netcabo.pt". Se não for vai á página do teu ISP e vê na parte de configuração de clientes de email que lá fornecem essa informação.
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26

Mensagempor pedrolm » Segunda Set 10, 2007 10:42

Obrigado pela dica SkylineGTR,

já não dá o erro mas não envia o email (tentei vários scripts simples), simplesmente diz mensagem não enviada. Então fui ao php.ini e troquei
smpt=localhost por smpt.telepac.pt, e dá o seguinte erro:


Warning: mail(): SMTP server response: 553-Relaying denied 553-Se for cliente SAPO consulte http://protegido.sapo.pt 553 Se for cliente Telepac consulte http://protegido.telepac.pt (#5.7.1) in c:\easyphp1-8\www\nova pasta\mail.php on line 6
Mensagem não enviada


Tenho de introduzir o login e password? Se sim onde?
pedrolm
Membro de Prata
Membro de Prata
 
Mensagens: 103
Registado: Quarta Mai 11, 2005 17:51

Mensagempor SkylineGTR » Segunda Set 10, 2007 11:31

Experimenta este:

http://phpmailer.sourceforge.net/

Suporta SMTP authentication ;)
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26

Mensagempor pedrolm » Segunda Set 10, 2007 12:56

:) Obrigado pela ajuda SkylineGTR, já funciona em pleno
pedrolm
Membro de Prata
Membro de Prata
 
Mensagens: 103
Registado: Quarta Mai 11, 2005 17:51

Mensagempor pedrolm » Segunda Set 10, 2007 15:56

:? Surgiu uma nova duvida, estou a utilizar o phpmailer e funciona correctamente com os dados a serem retirados de um formulario, mas não consigo que envie a mensagem para mais que um destino, por exemplo: qqcoisa@sapo.pt, qqcoisinha@sapo.pt
A ideia e que envie a mensagem para ambos mas com mais que um e-mail da erro. Existe algum comando especifico?
pedrolm
Membro de Prata
Membro de Prata
 
Mensagens: 103
Registado: Quarta Mai 11, 2005 17:51

Mensagempor SkylineGTR » Segunda Set 10, 2007 16:10

Já experimentaste tipo isto?

Código: Seleccionar todos
$mail->AddAddress("qqcoisa@sapo.pt");
$mail->AddAddress("qqcoisinha@sapo.pt");               
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26

Mensagempor pedrolm » Segunda Set 10, 2007 16:19

Sim, creio que assim funciona mas para introduzir manualmente. Neste momento vou buscar o endereço de destino a um formulario com o código:

Código: Seleccionar todos
$nome = $_POST['nome'];
           $name = $_POST['nome_origem'];
            $email = $_POST['email'];
           $subject = $_POST['assunto'];
            $message = $_POST['duvida'];
       
$mail->From     = "xxxxxxx@xxxxxx";
$mail->FromName = "$name";
$mail->AddAddress("$email","$nome");
$mail->AddAttachment($_FILES['arquivo']['tmp_name'], $_FILES['arquivo']['name']);
$mail->AddReplyTo("xxxxx@xxxxxxx","Information");


Mas caso o usuario deseje enviar para varios endereços separados por virgulas, tem de ser gerado dinamicamente e isso não estou a perceber como posso fazer. Não posso colocar manualmente porque não existe maneira de saber quantos são e atribuir nome diferente a todos.
pedrolm
Membro de Prata
Membro de Prata
 
Mensagens: 103
Registado: Quarta Mai 11, 2005 17:51

Mensagempor pedrolm » Segunda Set 10, 2007 16:51

RESOLVIDO!!! Após longa pesquisa, encontrei esta função: http://es.php.net/explode , assim divido os email introduzidos e envio um de cada vez.

Obrigado a todos que colaboraram.
pedrolm
Membro de Prata
Membro de Prata
 
Mensagens: 103
Registado: Quarta Mai 11, 2005 17:51

Mensagempor SkylineGTR » Segunda Set 10, 2007 17:01

Tens de adaptar o código então..

Pegas na string que foi introduzida no formulário e partes em várias (procuras strings separadas pela caracter ";"). Depois com um ciclo chamas o método AddAddress para adicionares o endereço tantas vezes quantas as strings que recolheste.

Não sei se me estou a fazer entender, mas é algo deste tipo:

1) O utilizador insere "a@gmail.com;b@gmail.com;c@gmail.com", se é assim que tens em mente...

2) Depois tens de ler o valor daquele campo no formulário, que é uma string, e parti-lo em vários, armazenando por exemplo num array. Tens de ver funções de php sobre strings, tipo split ou algo do genero. (Tive a pesquisar e é split())
http://pt2.php.net/manual/en/function.split.php

No fim tens algo como:
Código: Seleccionar todos
$array[0] = "a@gmail.com"
$array[1] = "b@gmail.com"
$array[2] = "c@gmail.com"


3) Agora que tens um array com todos os emails só tens de usar um ciclo (por exemplo um for), que em cada iteração vai chamar o método AddAddress.
Tipo:

Código: Seleccionar todos
$last= array[count(array)-1];  /*penso que isto vai-te buscar a última posição do array que contém um valor*/

for($i=0; $i <= $last; i++)
$mail->AddAddress(array[i]);



A ideia é +/- isso, agora não sei se percebeste...

PS: A minha área não é o php, por isso esses exemplos de código podem conter erros ou nem funcionar. Mas se perceberes a ideia consegues corrigir isso ;)
i7 920 | ASUS P6T Deluxe V2 | 6GB Corsair Dominator PC3-12800 | BFG GTX285 OC2 | 2x WD 640GB + WD 750GB + Seagate 750GB + Samsung F1 1TB | Corsair HX-620 | HP w2207 | Lian Li PC-V1110B
SkylineGTR
Membro Vitalício
Membro Vitalício
 
Mensagens: 4184
Registado: Terça Dez 28, 2004 22:26


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 3 visitantes

cron