Enviando e-mails com PHP, LAMPP e PostFix


9

Eu tenho tentado por 2 dias inteiros agora, e eu simplesmente não consigo fazer a coisa mais simples funcionar.

O problema: Enviar e-mails do PHP para o meu endereço de e-mail não funciona

Eu já trabalhei com Windows e Sendmail (o Sendmail estava dentro do pacote XAMPP) antes e estava tudo bem. O pacote XAMPP (1.7.7) para Linux não possui o Sendmail integrado. Então, depois de pesquisar um pouco, descobri que o Postfix se encaixa melhor em um ambiente LAMPP.


O que eu tentei até agora:

Instalei o Postfix e queria configurá-lo para usar apenas o servidor smtp do meu provedor de e-mail privado (como no Windows). Então, eu confoguei meu php.ini assim:

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

sendmail_path = /etc/postfix
mail.add_x_header = On

Observe que eu comentei o material "somente Win32". O /etc/postfix/main.cf aparece assim:

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
myhostname = ubuntu
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
sender_canonical_maps = hash:/etc/postfix/sender_canonical
mydestination = ubuntu, localhost.localdomain, localhost
relayhost = mail.gmx.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

/ etc / aliases permanece inalterado:

# Required aliases
postmaster: root
MAILER-DAEMON:  postmaster

# Common aliases
abuse:      postmaster
spam:       postmaster

/ etc / postfix / sasl_password :

my.providers.smtp my_login:my_password

/ etc / postfic / sender_canonical:

postmaster my.email@ddress.com

O que acontece:

Então quando eu faço

> sudo /etc/init.d/postfix start

tudo parece funcionar bem e o /var/log/mail.log diz: "ubuntu postfix / master [9720]: daemon iniciado - versão 2.8.5, configuração / etc / postfix"

Mas quando executo meu script PHP (que funcionou bem com o Windows e o Sendmail), ele é executado e nada acontece, nem mesmo um erro é registrado.


O que eu realmente quero alcançar:

Estou trabalhando localmente em um site de comércio eletrônico. Ele funciona bem no servidor da web dedicado, mas também quero executá-lo localmente por razões óbvias. Em alguns casos, ele envia e-mails e eu só quero recebê-los com o Thunderbird ou de qualquer outra forma. Está usando um exagero do Postfix aqui? Não preciso receber e-mails - só quero tornar os e-mails visíveis de alguma forma. Não consegui encontrar nenhum tutorial passo a passo útil para esse problema (nem sobre o Senmail nem o Postfix - mas, para ser sincero, sou muito novo no Linux).

Respostas:


13

No seu php.ini, isto:

sendmail_path = /etc/postfix

Deve ser o caminho para o binário sendmail (ou compatível).
Você o definiu no diretório de configuração do postfix, o que não está certo.

Por razões históricas, geralmente /usr/bin/sendmailé mantido como um link de compatibilidade.
sendmailfoi o primeiro (eu acho) e praticamente tudo pressupõe que esteja no MTA instalado. Portanto, quando não está, a substituição cria um link simbólico para que nada quebre.


Muito obrigado! Mesmo que eu não entenda bem por que e de que maneira o Sendmail e o Postfix funcionam juntos - agora funciona! Não me lembro onde li sobre definindo-o como postfix, mas esta é a configuração correta no meu caso:sendmail_path = "/usr/sbin/sendmail -t -i"
Quasdunk

Adicionamos um pouco mais de informação - basicamente eles não estão trabalhando juntos, como tal, você não tem o sendmail, mas o postfix está fingindo estar, porque muitas coisas esperam que ele esteja lá :) Você também pode definir o sendmail_path para apontar para o binário do postfix.
Cesium

1
Eu lembro! O sendmail teve bug após bug após bug após bug por anos a fio. Em um ponto, você pode incluir um comando somente raiz no ~ / .forward, enviar a si mesmo um e-mail e fazer o que quiser em um sistema Unix / Linux. Havia um êxodo em massa, e os novos servidores de email incluíam um programa semelhante ao sendmail, projetado para se comportar como o sendmail, de modo que todos os outros programas criados em torno do sendmail ainda funcionassem sem nenhum esforço adicional.

Muito obrigado pelas informações adicionais! Tudo faz mais sentido agora;) Eu te daria outra +1 se eu pudesse, mas eu espero que alguém que acha isso tão útil vai fazer isso por mim :-D
Quasdunk

1

Para enviar email do host local (WAMP, XAMP ou LAMP), você pode usar o pacote PHPMailer

Esta será a mesma instrução fornecida no arquivo leia-me.

WAMP (janelas):

Primeiro você tem que editar o "php.ini". Para encontrar este arquivo, exiba o phpinfo usando o seguinte código do servidor WAMP. Crie um arquivo php [setting.php] dentro de C: / wamp / www / e adicione o seguinte conteúdo a esse arquivo.

<?php
     echo phpinfo();
?>

Digite localhost / setting.php no navegador. Procure por "Arquivo de configuração carregado". Esse será o caminho para o seu php.ini .

No arquivo php.ini remova o; (ponto e vírgula) fornecido para `extension = php_openssl.dll. Agora a configuração do servidor acabou ...

  • Após baixar a pasta PHPMailer do github,
  • Extrair-> Copie a pasta completa para a pasta do projeto, ou seja, C: / wamp / www /
  • Encontre o arquivo index.php.
  • Mude o parâmetro conforme sua necessidade.
  • Em seguida, no navegador, digite localhost / PHPMailer / index.php .
  • Em seguida, ele mostrará uma mensagem de sucesso se o email for enviado, caso contrário, será exibida uma mensagem de erro.

LAMP (Linux):

  • No caso do linux, não há necessidade de editar o arquivo php.ini como expliquei o primeiro ponto no WAMP.

  • Mais uma alteração é o projeto ou a pasta raiz do documento é diferente.

  • No Linux, a pasta raiz do documento padrão será / var / www
  • Você pode alterar a pasta raiz do documento facilmente. Para essa visita, https://stackoverflow.com/a/17612396/1925943
  • Copie o PhpMailer para esta pasta raiz do documento e edite index.php conforme sua necessidade.
  • Digite localhost / PhpMailer / index.php no navegador.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.