PHP mail

K0mA

Power Member
Boas,

Como posso testar um script PHP que vai usar a função de enviar email sem ter um servidor de mail para testar?

Há algum servidor público ou que alguém conheça que se possa usar?

Caso não haja terei de instalar um? há algum que seja gratuito e fácil de configurar?
 
Tentei correr o exemplo 1037, localmente, com as configurações base que vem no pacote XAMPP, e deu-me este erro:
Código:
[B]Warning[/B]:  mail() [[URL="http://127.0.0.1/function.mail"]function.mail[/URL]]: SMTP server response: 553 We do not relay non-local mail, sorry. in [B]C:\xampp\htdocs\mail.php[/B] on line [B]43[/B]
Isto com o mercury ligado. Sem o Mercury não deixa:
Código:
[B]Warning[/B]:  mail() [[URL="http://127.0.0.1/function.mail"]function.mail[/URL]]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in [B]C:\xampp\htdocs\mail.php[/B] on line [B]43[/B]
Pode ser das configurações.

PHP Mail

Não vejo maneira de enviar um e-mail sem um servidor SMTP.
Não conheço servidores públicos.
O Mercury é um servidor de e-mail gratuito.

Cumps
 
A experiência que EU tenho de envio de e-mails não é nem de PHP nem de qualquer tipo de programação relacionada com a web. É de Visual Basic.

Tenho por aqui um código source dum programa que procura servidores MX (Mail eXchange) com base no servidor de e-mail dado. Isto é, executando o source que tenho, a resposta dada ao servidor hotmail.com é:
DNS Servers - 2
DNS Server 1 - 194.65.100.117
DNS Server 2 - 192.168.0.1
Local Domain -
Root Domain -

MX records for: hotmail.com
MX records - 4
Best server - mx1.hotmail.com
Mail Server 1 - mx1.hotmail.com Pref - 5
Mail Server 2 - mx2.hotmail.com Pref - 5
Mail Server 3 - mx3.hotmail.com Pref - 5
Mail Server 4 - mx4.hotmail.com Pref - 5

e a gmail.com é:
DNS Servers - 2
DNS Server 1 - 194.65.100.117
DNS Server 2 - 192.168.0.1
Local Domain -
Root Domain -

MX records for: gmail.com
MX records - 5
Best server - gmail-smtp-in.l.google.com
Mail Server 1 - gmail-smtp-in.l.google.com Pref - 5
Mail Server 2 - alt1.gmail-smtp-in.l.google.com Pref - 10
Mail Server 3 - alt2.gmail-smtp-in.l.google.com Pref - 10
Mail Server 4 - gsmtp183.google.com Pref - 50
Mail Server 5 - gsmtp163.google.com Pref - 50

ZMail.pt:
DNS Servers - 2
DNS Server 1 - 194.65.100.117
DNS Server 2 - 192.168.0.1
Local Domain -
Root Domain -

MX records for: zmail.pt
MX records - 1
Best server - mta0.zmail.pt
Mail Server 1 - mta0.zmail.pt Pref - 10

iol.pt:
DNS Servers - 2
DNS Server 1 - 194.65.100.117
DNS Server 2 - 192.168.0.1
Local Domain -
Root Domain -

MX records for: iol.pt
MX records - 1
Best server - relay.iol.pt
Mail Server 1 - relay.iol.pt Pref - 10

Tudo isto apenas com um objectivo: o que os relayers fazem na realidade é conectar-se aos MX servers do endereço do destino (fazem um query de hotmail.com e ligam-se a mx1.hotmail.com por ser o Best Server), e conectam-se a esse servidor, e seguem o protocolo (SMTP). Qualquer servidor MX faz relay para dentro da própria rede, já que é esse mesmo o objectivo dele - entregar o mail para dentro da sua rede.

Googlem "MX Query", ou em último recurso posso dar-me ao trabalho de analisar isto e ver como trabalha :P

E para que disse eu isto tudo? Porque para enviar um mail tem-se obrigatoriamente de se conectar a qualquer servidor. Agora, com o MX Query, conecta-se directamente ao servidor adequado.

Cumps [[[[[[[[]]]]]]]]
angelofwisdom
 
Obrigado pelas respostas.

Então sendo assim não é necessário instalar um servidor de email.

Basta configurar no php.ini que me quero ligar a mx1.hotmail.com, caso o email seja enviado para a para o hotmail (relay para a própria rede)?

Infelizmente tentei e não deu!

EDITADO1: já deu, bastava descomentar o sendmail_from do php.ini
deixo aqui um exemplo:

PHP:
 $assunto = "Formulario recebido\n";
$headers = "recebido";
$headers .= "Content-Type: text/plain;\r\n charset=iso-8859-1\r\n"; 

    mail("[email protected]", $assunto, $headers);
    echo "fim";
Com as seguintes linhas no php.ini:

SMTP = mx1.hotmail.com
smtp_port = 25

; For Win32 only.
sendmail_from = [email protected]


Era bom era que desse para alterar o SMTP = mx1.hotmail.com apartir do código, sem mexer no php.ini, mas não deve dar...


Aqui fica um endereço onde podem fazer uma MX query a um dado dominio (conforme explicado pelo angelofwisdom):

http://www.mxtoolbox.com/index.aspx


EDITADO2: correcção no código
 
Última edição:
Esse era o Best Server no momento em que fiz o Query. Pode, a dado momento, haver servidores mais indicados caso esse esteja sobrelotado. Daí te aconselhar a fazer o Query a cada vez que enviares um e-mail ;) mas caso não queiras queries desnecessários, podes sempre meter aí uma lista "hard-coded". Mete os servidores q meto os servidores MX ;)
 
Obrigadíssimo angel| talvez pro hotmail e para o gmail desse jeito a lista.
Para esses dois já tens a lista lá em cima :P
Vou mesmo dar uma vista de olhos e ver como trabalha isto do MX Query. Pode vir a dar jeito saber como funciona. Se perceber, dou-te aqui uns detalhes e pode ser que consigas fazer uma função em PHP para os Queries :)
 
Back
Topo