Eu instalei o Ubuntu 11.04, LAMP usando o tasksel.
Eu acho que o PHP mail()
não funciona.
Suponho que preciso habilitá-lo ou algo assim? Como faço isso?
Eu instalei o Ubuntu 11.04, LAMP usando o tasksel.
Eu acho que o PHP mail()
não funciona.
Suponho que preciso habilitá-lo ou algo assim? Como faço isso?
Respostas:
No manual de correio do php:
Exigências
Para que as funções de email estejam disponíveis, o PHP requer um sistema de email instalado e funcionando. O programa a ser usado é definido pelas definições de configuração no arquivo php.ini.
Isso significa que você precisa instalar algum tipo de servidor de correio e configurar o php para usá-lo. Normalmente, este servidor de correio é postfix no Ubuntu. No entanto - se o lado php que você está codificando eventualmente for armazenado no lado de um serviço de hospedagem (por exemplo, xmission), um servidor de email provavelmente já estará instalado lá. Nesse caso, basta testar seu site online em vez de localmente.
Se você precisar testá-lo em seu próprio sistema ou pretender hospedá-lo em seu próprio servidor doméstico, prossiga com:
Instalação: postfix / sudo apt-get install postfix
Durante o processo, você será perguntado em qual modo deseja instalar o postfix. Existem quatro modos possíveis:
O restante das opções de instalação depende da sua escolha dessa configuração geral.
Provavelmente você escolherá uma instalação via satélite. Isso significa que o email será enviado usando um provedor externo. Como servidor SMTP (servidor de e-mail de saída), você precisará especificar o SMTP dos seus provedores. O restante das opções é auto-explicativo.
A maioria dos servidores SMTP requer uma autenticação de senha para enviar email. Portanto, o postfix precisará conhecer essa senha. Também há coisas como criptografia a considerar (que você precisará pesquisar no Google). É assim que você configura o postfix usando a autenticação por senha (sasl):
Instale libsasl2-modules e sasl2-bin clicando nos ícones do Software Center ou no terminal usando:
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
Ative o sasl-auth adicionando essas linhas ao /etc/postfix/main.cf
# add to /etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noplaintext noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
Crie um arquivo /etc/postfix/sasl_password
com uma linha como:
smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
Substitua a senha real, nome de usuário e endereço smtp.
Atualizar postfix:
sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
sudo postmap hash:/etc/postfix/sasl_password
sudo postmap /etc/postfix/sender_canonical
sudo /etc/init.d/postfix restart
Talvez você precise contornar o erro 'permissão negada' com chown postfix:postfix /etc/postfix
antecedência.
Isso deve ser feito na maioria dos casos. No entanto, alguns provedores de SMTP requerem um endereço específico como remetente ou criptografia.
Relacionadas: A interface PEAR :: Mail também pode ser interessante para você.
O Gmail (e talvez outros serviços) pode não gostar do fato de você estar tentando enviar e-mails dessa maneira, pois isso pode ser considerado inseguro pelos padrões deles e bloquearia sua tentativa, ou seja, nada acontecerá na tela ou em algum lugar do processo todo sua autenticação. Além disso, seu POP3 deve estar ativado.
Para combater isso, veja aqui. (Se você quer estar do lado seguro, crie uma conta fictícia do Gmail)
Como já foi observado, o postfix seria um exagero se você apenas enviar e-mails do php enquanto estiver desenvolvendo aplicativos no seu computador doméstico.
Eu pessoalmente uso o pacote ssmtp muito simples e leve. Ele usará qualquer servidor smtp para enviar emails de saída. Instale-o executando:
sudo apt-get install ssmtp
Em seguida, edite o /etc/ssmtp/ssmtp.conf
arquivo, comente a linha existente do mailhub e adicione as seguintes linhas (este exemplo é para o servidor gmail smtp):
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>
(Forneça seu nome de usuário e senha do gmail. É claro que você pode usar qualquer outro servidor SMTP).
Agora verifique se o seu php.ini está correto sendmail_path
. Deve ler como:
sendmail_path = /usr/sbin/sendmail -t
( Dos comentários de @ dima-l e @ omar-sabic : você não precisa especificar ssmtp
aqui porque a instalação deve ter criado um link simbólico para /usr/sbin/sendmail
, o que indica corretamente ssmtp
. Caso contrário, você deve especificar sendmail_path = /usr/sbin/ssmtp -t
)
Recarregue o apache e seu php deve poder enviar e-mails enviados agora.
sendmail_path = /usr/sbin/ssmtp -t
. Isso funcionou, obrigado
/usr/sbin/sendmail
, que aponte corretamente para ssmtp. Portanto, o uso também sendmail_path = /usr/sbin/sendmail -t
deve funcionar #
ssmtp
(encontrei algumas notas úteis): Como configurar o correio PHP no Debian - esta pergunta + este link ajudou a configurar o programa.
FromLineOverride=YES
para evitar o seguinte erro:550 5.7.60 SMTP; Client does not have permissions to send as this sender
O PHP requer que um cliente SMTP envie correio. Você pode instalar um MTA (agente de transferência de e-mail) completo como o Postfix para atender a essa função, mas é um exagero se você só precisar enviar e-mails através do PHP. Em vez disso, instale o msmtp . É leve e muito mais simples de configurar.
Instale o msmtp
sudo apt-get install msmtp-mta ca-certificates
Configure-o
Crie um novo arquivo de configuração:
sudo vi /etc/msmtprc
... com as seguintes informações de configuração:
# Set defaults.
defaults
# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL
Você precisa substituir os dados de configuração representados por tudo dentro de "<" e ">" (inclusive, remova-os). Para host / nome de usuário / senha, use suas credenciais normais para enviar e-mail através do seu provedor de e-mail.
Diga ao PHP para usá-lo
sudo vi /etc/php5/apache2/php.ini
Adicione esta linha única:
sendmail_path = /usr/bin/msmtp -t
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Deve ser uma solução simples. Você só precisa instalar o Postfix, que envia os emails.
sudo apt-get install postfix
Você deseja executá-lo em um terminal (e não no centro de software), pois ele precisa fazer algumas perguntas de configuração. Você deve aceitar apenas todos os padrões (somente local, etc).
Esta é uma pergunta antiga e há respostas dignas acima, mas eu precisava exim
para o meu ambiente. Além disso, confirme se você instalou o sendmail em primeiro lugar ( $ which sendmail
- deve retornar algo como / usr / sbin / sendmail). Encontrei um bom guia em linode.com , mas a essência é:
apt-get install exim4-daemon-light mailutils
Seguido por:
dpkg-reconfigure exim4-config
o que o levará a um editor interativo.
Ótima resposta , con-f-use.
Tenho uma coisa a acrescentar sobre a "conta fictícia do Gmail":
Isso é altamente recomendado porque você precisa configurar sua conta do Gmail para permitir aplicativos menos seguros: https://www.google.com/settings/u/0/security/lesssecureapps
Caso contrário, você receberá um "faça login usando seu navegador da web e tente novamente "erro no seu /var/log/mail.log
arquivo.
também descobri que recebo um erro de tempo limite, a menos que eu envie o gmail smtp sever meu certificado raiz. Para fazer isso:
sudo nano /etc/postfix/main.cf
adicione o seguinte na parte inferior do arquivo
smtp_tls_CAfile = /etc/postfix/cacert.pem
Em seguida, copie o certificado raiz thawte para o cacert.pem
arquivo:
cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Aqui está o link que eu usei: Configurar o Postfix para usar o Gmail SMTP no Ubuntu | EasyEngine
Espero que isso poupe a alguém alguns folículos capilares ...
Eu encontrei as soluções fornecidas por Dima L. é a maneira mais fácil e leve para o sistema.
Apenas alguma adição para mais clareza na configuração. Você deve comentar hostname
em /etc/ssmtp/ssmtp.conf
arquivo. O ssmtp.conf
arquivo de amostra é como abaixo:
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yourdomain.com
UseSTARTTLS=YES
AuthUser=mail@yourdomain.com
AuthPass=YOUREMAILPASSWORD
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
#hostname=
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES