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 / 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):
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):
(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.
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.
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).
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 é:
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
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
Respostas:
No manual de correio do php:
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 /
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.
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 e sasl2-bin clicando nos ícones do Software Center ou no terminal usando:
Ative o sasl-auth adicionando essas linhas ao
/etc/postfix/main.cf
Crie um arquivo
/etc/postfix/sasl_password
com uma linha como:Substitua a senha real, nome de usuário e endereço smtp.
Atualizar postfix:
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)
fonte
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:
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):(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:( 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 corretamentessmtp
. Caso contrário, você deve especificarsendmail_path = /usr/sbin/ssmtp -t
)Recarregue o apache e seu php deve poder enviar e-mails enviados agora.
fonte
sendmail_path = /usr/sbin/ssmtp -t
. Isso funcionou, obrigado/usr/sbin/sendmail
, que aponte corretamente para ssmtp. Portanto, o uso tambémsendmail_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
Configure-o
Crie um novo arquivo de configuração:
... com as seguintes informações de configuração:
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
Adicione esta linha única:
fonte
cat <<EOF | msmtp <[email protected]> Subject: test This is a test! EOF
Deve ser uma solução simples. Você só precisa instalar o Postfix, que envia os emails.
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).
fonte
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 é:Seguido por:
o que o levará a um editor interativo.
fonte
Ó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:
adicione o seguinte na parte inferior do arquivo
Em seguida, copie o certificado raiz thawte para o
cacert.pem
arquivo: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 ...
fonte
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. Ossmtp.conf
arquivo de amostra é como abaixo:fonte