Como ter meu PHP Send mail?

69

Eu instalei o Ubuntu 11.04, LAMP usando o tasksel.

Acho que o PHP mail() não funciona.

Suponho que preciso ativá-lo ou algo assim? Como eu faço isso?

    
por JM at Work 08.06.2011 / 12:25

7 respostas

51

Do manual de correio do php:

% bl0ck_qu0te%

Isso significa que você precisa instalar algum tipo de servidor de e-mail e configurar o php para usá-lo. Normalmente este servidor de e-mail é postfix no Ubuntu. No entanto - se o lado do php que você está codificando for eventualmente 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 on-line 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, continue com:

Instalação do Postfix

Instalação: postfix /sudoapt-getinstallpostfixDuranteoprocesso,vocêseráperguntadoemqualmodovocêdesejaqueopostfixsejainstalado.Existemquatromodospossíveis:

  • Internet:seupróprioservidordee-mail.
  • Satélite:umprovedordee-mailexterno(porexemplo,oGoogle)seráusadoparaenviarerecebere-mails.Oservidornãoreceberánenhumemail.
  • Smarthost:Misturaentreosdois.Ocorreioéarmazenadolocalmente,masenviadopormeiodeumprovedordecorreioexterno.
  • Somentelocal:nãoafetarávocê.Esseéumservidordeemailinternodosistema.Vocêsópodeenviare-mailsdeusuárioparausuárionosistema.

Orestantedasopçõesdeinstalaçãodependedasuaescolhadestaconfiguraçãogeral.

Omaisprováveléquevocêescolhaumainstalaçãoviasatélite.Issosignificaqueocorreioseráenviadousandoumprovedorexterno.Comosmtp-server(servidordeemaildesaída),vocêteráqueespecificarseusprovedoressmtp.Orestodasopçõeséauto-explicativo.

Configuraçãopós-instalação

Amaioriadosservidoressmtpexigeumaautenticaçãodesenhaparaenviarmensagens.Então,opostfixprecisarásaberessasenha.Tambémhácoisascomocriptografiaaconsiderar(quevocêteráquegoogle).Éassimquevocêconfiguraopostfixusandoautenticaçãodesenha(sasl):

  • Instale libsasl2-modules e sasl2-bin clicandonosíconesdaCentraldeSoftwareoudoterminalusando:

    sudoapt-getinstalllibsasl2-2libsasl2-modulessasl2-bin
  • Ativeosasl-authadicionandoessaslinhasa/etc/postfix/main.cf

    #addto/etc/postfix/main.cfsmtp_sasl_auth_enable=yessmtp_sasl_security_options=noplaintextnoanonymoussmtp_sasl_password_maps=hash:/etc/postfix/sasl_password
  • Crieumarquivo/etc/postfix/sasl_passwordcomumalinhacomo:

    [email protected]:USERPASSWORD

    Substituaasenhaatual,onomedeusuárioeoendereçoSMTP.

  • Atualizarpostfix:

    sudochmod600/etc/postfix/sasl_password#forsafetyofyoursmtppasswordsudopostmaphash:/etc/postfix/sasl_passwordsudopostmap/etc/postfix/sender_canonicalsudo/etc/init.d/postfixrestart

    Vocêpodeterquecontornaro 'permissão negada' bug por chown postfix:postfix /etc/postfix de antemão.

Isso deve ser feito na maioria dos casos. No entanto, alguns provedores smtp exigem um endereço específico como remetente ou criptografia.

Relacionados: a interface PEAR :: Mail também pode seja do seu interesse.

O Gmail (e talvez outros serviços) pode não gostar que você esteja tentando enviar e-mails dessa maneira, pois pode ser considerado inseguro pelos padrões deles, e bloquearia sua tentativa, ou seja, nada acontecerá na tela ou em algum lugar do todo processo bloquearia sua autenticação. Além disso, seu POP3 deve estar ativado.

Para combater isso, veja aqui. (Se você quer estar no lado seguro, crie uma conta do Gmail fictícia)

    
por con-f-use 08.06.2011 / 13:33
59

Como já foi observado, o postfix seria um exagero se você só precisasse enviar e-mails do php enquanto desenvolvia aplicativos em seu computador doméstico.

Eu pessoalmente uso ssmtp pacote muito simples e leve. Ele usará qualquer servidor SMTP para enviar e-mails enviados. Instale-o executando:

sudo apt-get install ssmtp

Em seguida, edite o arquivo /etc/ssmtp/ssmtp.conf , comente a linha mailhub existente 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, certifique-se de que seu php.ini tenha o sendmail_path correto. Deve ser lido como:

sendmail_path = /usr/sbin/sendmail -t

( De comentários de @ dima-l e @ omar-sabic : Você não precisa especificar ssmtp aqui porque a instalação deveria ter criado um symlink para /usr/sbin/sendmail , que aponta corretamente para ssmtp . Caso contrário, você tem que especificar sendmail_path = /usr/sbin/ssmtp -t )

Recarregue o apache e seu php deve ser capaz de enviar e-mails enviados agora.

    
por Dima L. 29.10.2013 / 20:08
29

O PHP requer um cliente SMTP para enviar e-mails. Você pode instalar um agente de transferência de e-mail (MTA) completo como o Postfix para veicular este função, mas é um exagero se você só precisa enviar e-mail 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 em "<" e ">" (inclusive, remova estes). Para host / nome de usuário / senha, use suas credenciais normais para enviar e-mails através de 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
    
por colan 29.04.2012 / 21:19
3

Deve ser uma correção simples. Você só precisa instalar o Postfix, que faz o e-mail real.

sudo apt-get install postfix

Você deseja executar isso de um terminal (e não do centro de software) porque ele precisa fazer algumas perguntas de configuração. Você deve encontrar apenas para aceitar todos os padrões (somente locais, etc.).

    
por Oli 08.06.2011 / 12:47
2

Essa é uma pergunta antiga e há respostas válidas acima, mas eu precisava de exim para meu ambiente. Além disso, confirme que você tem o sendmail instalado em primeiro lugar ( $ which sendmail - deve retornar algo como / usr / sbin / sendmail). Eu encontrei um bom guia em linode.com , mas o A essência é:

apt-get install exim4-daemon-light mailutils

seguido por:

dpkg-reconfigure exim4-config

que leva você a um editor interativo.

    
por vrobinson 30.04.2014 / 23:46
1

Ótima resposta , con-f-use.

Eu 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: link Caso contrário, você receberá um erro "efetue login usando seu navegador da Web e tente novamente" no arquivo /var/log/mail.log .

também descobri que recebo um erro de tempo limite, a menos que eu envie o certificado SMTP do gmail smtp sever. Para fazer isso:

sudo nano /etc/postfix/main.cf

adicione o seguinte ao final do arquivo

smtp_tls_CAfile = /etc/postfix/cacert.pem

Em seguida, copie o certificado raiz do thawte para o arquivo cacert.pem :

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Aqui está o link que eu usei: Configure o Postfix para usar o Gmail SMTP no Ubuntu | EasyEngine

Espero que isso poupe alguns folículos pilosos ...

    
por deputy_D 25.05.2016 / 19:12
0

Eu encontrei as soluções fornecidas por Dima L. é a maneira mais fácil & amp; leve ao sistema.

Apenas alguma adição para mais clareza na configuração. Você deve comentar hostname no arquivo /etc/ssmtp/ssmtp.conf . O exemplo de arquivo ssmtp.conf é o seguinte:

#
# 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
    
por SD. 13.04.2018 / 08:33