Como ter meu PHP Send mail?

71

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?

JM no Trabalho
fonte
Isso é simples e fácil de enviar do seu gmail. kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php
Kvvaradha

Respostas:

51

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 do Postfix

Instalação: postfix Instalar 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:

  • Internet : seu próprio servidor de correio.
  • Satélite : um provedor de correio externo (por exemplo, Google) será usado para enviar e receber e-mails. O servidor não receberá nenhum email.
  • Smarthost : Mistura entre os dois. O correio é armazenado localmente, mas enviado através de um provedor de correio externo.
  • Apenas local : não lhe diz respeito. Esse é um servidor de correio interno do sistema. Você só pode enviar email de usuário para usuário no sistema.

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.

Configuração pós-instalação

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 Instale libsasl2-modules e sasl2-bin Instalar 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_passwordcom uma linha como:

     smtp.gmail.com [email protected]: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/postfixantecedê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)

confundir
fonte
Enviar email do Ubuntu (local) funciona. Mas e se eu quiser que meu Windows use esta máquina para enviar email (PHP também)? Como eu configuro isso?
JM no Trabalho
Não tenho certeza se entendi a pergunta. Você pode lixar da sua máquina Ubuntu. Agora, o que você quer fazer é enviar mal através dessa máquina Ubuntu do seu PC com Windows via php? Isso está correto?
con-f-use
2
Agora o pacote libsasl2 não existe. Estou usando o 11.04. Sua libsasl2-2 conforme o pacote atualizado .. #
mythicalcoder
61

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.confarquivo, 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 ssmtpaqui 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.

Dima L.
fonte
3
Eu acho que você quis dizer sendmail_path = /usr/sbin/ssmtp -t. Isso funcionou, obrigado
Omer Sabic
11
O ssmtp deve criar um link simbólico para /usr/sbin/sendmail, que aponte corretamente para ssmtp. Portanto, o uso também sendmail_path = /usr/sbin/sendmail -tdeve funcionar #
Dima L.
2
Mais sobre a configuração ssmtp(encontrei algumas notas úteis): Como configurar o correio PHP no Debian - esta pergunta + este link ajudou a configurar o programa.
Gskema #
11
Para o gmail, considere que você precisa configurar sua conta do Google para permitir que "aplicativos não seguros" funcionem. Consulte support.google.com/accounts/answer/6010255
aesede 14/04/16
11
Eu também tive que adicionar a seguinte linha: FromLineOverride=YESpara evitar o seguinte erro:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons
29

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 <[email protected]>
password <password>
from <[email protected]>
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
colan
fonte
Obviamente, 'sudo vi /etc/php5/conf.d' sem o php.ini não funcionará. No meu caso (Ubuntu), tive que editar '/etc/php5/apache2/php.ini' e também reiniciar o apache 'sudo /etc/init.d/apache2 reload' para que funcionasse.
Dejan
11
BTW, você pode testar sua configuração do msmtprc usando:cat <<EOF | msmtp <[email protected]> Subject: test This is a test! EOF
Dejan
Seria bom, mas não está funcionando para mim. Nada aparece em seu log. Parece totalmente bom, mas não há dados.
James T Snell
2
Para disponibilizar o msmtp em todo o sistema, instale "msmtp-mta".
Colan
11
Caso você seja muito literal como eu, seguindo as instruções, na verdade não mantém os colchetes <> no arquivo de configuração. Levei uns bons 20 minutos para descobrir isso
de Raad
4

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).

Oli
fonte
2

Esta é uma pergunta antiga e há respostas dignas acima, mas eu precisava eximpara 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.

vrobinson
fonte
1

Ó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.logarquivo.

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.pemarquivo:

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 ...

deputado_D
fonte
0

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 hostnameem /etc/ssmtp/ssmtp.confarquivo. O ssmtp.confarquivo 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
[email protected]
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
SD.
fonte