Como ter meu PHP Send mail?


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


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.


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

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 <receiver@test.com> 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).


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.


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


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