Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal...
Bom... recebi, onde trabalho, um novo computador e, em troca de instalar o Ubuntu numa VBox dentro do XP, resolvi detonar o Windows7 original da máquina e instalar o Ubuntu (10.04) e um XP numa VBox...
Até aí, tudo bem... configurei a máquina toda com o gerenciador de instalações e foi tudo bem (exceto alguns caracteres trocadas nos bancos importados no MySQL) mas, principalmente, a função mail do PHP não funciona de jeito nenhum no Ubuntu/Apache2/PHP5...
Verificando o comando SendMail, descobri que é ele que não está funcionando, não sendo possível enviar uma mensagem pelo próprio Prompt.
O código PHP original enquanto hospedado no XP+IIS+PHP5 é simples... um exemplo:
ini_set('SMTP', 'smtp.marte.mg.gov.br');
$to = 'joao@ig.com.br';
$subject = 'Atribuição de Tarefa em Projeto';
$msg = 'Olá. Queremos informá-lo(a) sobre a designação de tarefa.';
$from = "From: <bergo@marte.mg.gov.br>";
mail($to, $subject, $msg, $from);
Em todas as páginas, quando é preciso enviar um email, apenas uso o código como visto acima... e não foi preciso configurar nada na máquina, nem no PHP.INI, IIS, etc... e sempre funcionou...
O servidor de email (smtp.marte.mg.gov.br) fica em outra máquina na rede... meu computador antigo, assim como o novo, obtém o IP via outro servidor DHCP, e nunca precisou de nenhum esquema ou permissão especial para enviar email pelo meu código em PHP...
No entanto, ao mudar os sites para o Apache/Linux, a função deixou de funcionar...
Muitos colegas "especialistas" em Linux deram, é claro, sua opinião, desde a condenar o Ubuntu, o Sendmail, postfix pra lá, mail pra cá e nada de descobrir porque não funciona... e configura arquivo .fc, .conf, apt-get nisso, apt-get naquilo, e nada... creio que por falta de saber como realmente o PHP funciona ou do que ele precisa na hora de enviar emails...
Então, gostaria de saber se alguém já passou por isso e se saberia exatamente o que precisa ser configurado no Linux para que a função mail funcione...
Em tempo... No WindowsXP, o php.ini (c:\arquivos de programas\PHP\php.ini) está assim:
[mail function]
; For Win32 only
SMTP = Localhost
smtp_port = 25
; For Win32 only
;sendmail_from = me@example.com
; Force ... ... even in safe mode.
;mail.force_extra_parameters =
[SQL]
No Linux, este é o php.ini (\etc\php5\apache2\php.ini):
[mail function]
; For Win32 only.
;SMTP = localhost
smtp_port = 25
; For Win32 only.
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; sendmail_path = /usr/sbin/sendmail -t -i
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On
; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log =
[SQL]
O nome do meu computador é P01140054.
O nome do usuário padrão é bergo (adminstrador)
O servidor de email é o smtp.marte.mg.gov.br (configurado assim tanto no OutLook/XP como no Evolution/Linux)
A agẽncia do email é o pop3.marte.mg.gov.br (também configurado no Outlook/XP e Evolution/Linux).
A conta que vai enviar os emails pelo site PHP é o bergo@marte.mg.gov.br.
Então... é isso...
Apesar do meu computador não ser o servidor de emails corporativo, quando usando o WindowsXP, as mensagens são enviadas sem problemas... mas no Linux o mesmo não acontece... a função mail() não acusa erro, mas "prende" momentaneamente a página e não envia nada...
Já segui (tentei pelo menos) vários roteiros de configuração do sendmail, porém, até agora não encontrei um realmente claro e completo...
Então, se alguém puder ajuda, fico muito Grato!
Abraços!
Fim do mistério!
Resolvido o problema... foi necessário que o administrador do servidor de email da corporação incluísse, na sua lista de "servidores confiáveis", a identificação do meu computador...
No final das contas, a melhor solução foi manter o PostFix+Mail+Mailx instalados. O PHP agora consegue enviar as mensagens normalmente, principalmente para os destinatários com conta no próprio domínio da corporação.
Não sei exatamente como meu computador (p01140144@marte.mg.gov.br) passou a ser "confiável" no servidor (o único smtp.marte.mg.gov.br), e nem quais são os programas ou recursos nesse servidor... assim que obter essa informação, complemento aqui...
Grato a todos!
Resolvido!
Olá pessoal...
Depois de muita luta, consegui fazer com que o PHP passasse a enviar emails da minha máquina, com o Ubuntu10.04, para outros destinatários.
No final de muito instala e desinstala, quem acabou funcionando foi o Postfix.
A função mail() do PHP então começou a funcionar...
Agora, ainda resta um problema... não consigo enviar mensagens, ainda, para destinatários do próprio domínio (nem mesmo para mim)...
Se envio uma mensagem pelo prompt, com mail ou mailx, envia 100% para outros destinos mas nada para o próprio domínio.
Se envio pelo PHP, ocorre o mesmo... só dá certo para fora do domínio.
Exemplo, pelo prompt:
bergo@p01140044:~$ mailx bergo@marte.mg.gov.br -s "Teste"
Bom dia!
.
Cc: eu.bergo@ig.com.br
bergo@p01140044:~$
e
bergo@p01140044:~$ mailx eu.bergo@ig.com.br -s "Teste"
Bom dia!
.
Cc: bergo@marte.mg.gov.br
bergo@p01140044:~$
Resultado: email enviado para eu.bergo@ig.com.br em ambos, mas nada enviado para bergo@marte.mg.gov.br
O mesmo ocorre com o PHP...
$headers = 'From: bergo@marte.mg.gov.br' . "\r\n" . 'Cc: juliocssilva@marte.mg.gov.br, eu.bergo@yahoo.co.uk, eu.bergo@ig.com.br ' . "\r\n" . 'Reply-To: bergo@marte.mg.gov.br' . "\r\n" . if (! mail($to, $subject, $message, $headers)) { } else {Resultado: mensagem enviada somenta para os usuários que não estão no domínio, ou seja, os que estão em "marte.mg.gov.br" não recebem a mensagem...
E este exemplo:
$headers = 'From: bergo@marte.mg.gov.br' . "\r\n" . 'Cc: eu.bergo@yahoo.co.uk, eu.bergo@marte.mg.gov.br ' . "\r\n" . 'Reply-To: bergo@marte.mg.gov.br' . "\r\n" . if (! mail($to, $subject, $message, $headers)) { } else {Ao exibir os detalhes da mensagem no webmail na própria página do IG, temos:
de bergo@marte.mg.gov.br
responder a bergo@marte.mg.gov.br
para eu.bergo@ig.com.br
cc eu.bergo@yahoo.co.uk,
paulo.bergo@marte.mg.gov.br
data 20 de maio de 2010 07:54
assunto O Assunto vai aqui
enviado por marte.mg.gov.br
ocultar detalhes 07:54 (4 minutos atrás)
Hola hermanos (25)
A atual configuração do PostFix (mail.cf) é:
See /usr/share/postfix/main.cf.dist for a commented, more complete version
Debian specific: Specifying a file name will cause the first
line of that file to be used as the name. The Debian default
is /etc/mailname.
#myorigin = /etc/mailname myorigin = marte.mg.gov.bré o domínio... o "marte.mg.gov.br" do bergo@marte.mg.gov.br.
#myhostname = p01140044
myhostname = bergo
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
appending .domain is the MUA's job.
append_dot_mydomain = noUncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4hreadme_directory = no
TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scacheSee /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
information on enabling SSL in the smtp client.
mydomain = marte.mg.gov.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myhostname = p01140044
#myhostname = bergo
mydestination = bergo@marte.mg.gov.br, marte.mg.gov.br, p01140044, localhost.localdomain, localhost
relayhost = smtp.marte.mg.gov.br
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.254.5
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Finalmente, último detalhe:
Meu computador não é o servidor de emails da empresa. Minha máquina tinha um XP+PHP5+IIS com um site de gerenciamento dos projetos da própria seção (streber-pm) e enviava os emails para as demais pessoas da seção numa boa... os problemas surgiram ao migrar tudo para o Ubuntu10.04...
O curioso é que até pela página original, agora dentro de um XP rodando numa VirtualBox dentro do Ubuntu, consegue enviar as mensagens (é o que está me "salvando" até agora!)... pois a necessidade e' realmente a de apenas enviar mensagens para os emails corporativos...
Ah... e para uso pessoal e demais comunicações internas ou externas, uso o próprio Evolution, sem problemas...
Então é isso...
Qualquer dica é bem recebida!
Grato!
Abraços!