it-swarm.dev

Jak mám poslat poštu PHP)?

Nainstaloval jsem Ubuntu 11.04, LAMP pomocí taskel.

Zjistil jsem, že PHP mail() nefunguje.

Předpokládám, že to musím povolit, nebo tak něco? Jak to udělám?

73
JM at Work

Z poštovního manuálu php:

Požadavky

Aby byly dostupné poštovní funkce, PHP vyžaduje nainstalovaný a funkční e-mailový systém. Použitý program je definován nastavením konfigurace v souboru php.ini.

To znamená, že musíte nainstalovat nějaký druh poštovního serveru a nakonfigurovat php, aby jej používal. Obvykle je tento poštovní server v Ubuntu postfixem. Pokud však bude kódovaná stránka php nakonec uložena na straně hostitelské služby (např. Xmission), pravděpodobně tam bude již nainstalován poštovní server. V takovém případě pouze otestujte své stránky online namísto místně.

Potřebujete-li jej otestovat ve svém vlastním systému nebo chtít hostit na svém vlastním domovském serveru, postupujte následovně:

Instalace Postfixu

Instalace: postfixInstall postfix /Sudo apt-get install postfix Během procesu budete dotázáni, v jakém režimu chcete nainstalovat postfix. Existují čtyři možné režimy:

  • Internet : Váš vlastní poštovní server.
  • Satelit : Pro odesílání a přijímání pošty bude použit externí poskytovatel pošty (např. Google). Server neobdrží žádnou poštu.
  • Smarthost : Směs mezi těmito dvěma. Pošta je uložena místně, ale odesílána prostřednictvím externího poskytovatele pošty.
  • Pouze místní : Nebude se vás týkat. To je systémový interní poštovní server. Můžete odesílat poštu pouze od uživatele k uživateli v systému.

Ostatní možnosti instalace závisí na výběru této obecné konfigurace.

S největší pravděpodobností vyberete instalaci satelitu. To znamená, že pošta bude odeslána prostřednictvím externího poskytovatele. Jako smtp-server (server pro odchozí poštu) budete muset zadat své smtp své poskytovatele. Ostatní možnosti jsou samy vysvětlující.

Po instalaci instalace

Většina serverů smtp vyžaduje k odesílání pošty ověřování pomocí hesla. Postfix bude tedy muset toto heslo znát. Také je třeba zvážit šifrování (třeba Google). Takto konfigurujete postfix pomocí autentizace pomocí hesla (sasl):

  • Instalace libsasl2-modulesInstall libsasl2-modules a sasl2-binInstall sasl2-bin kliknutím na ikony Softwarového centra nebo z terminálu pomocí:

    Sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Povolte sasl-auth přidáním těchto řádků do /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
    
  • Vytvořit soubor /etc/postfix/sasl_password s řádkem jako:

     smtp.gmail.com [email protected]:USERPASSWORD
    

    Nahraďte skutečné heslo, uživatelské jméno a smtp-adresu.

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

    Možná budete muset obejít 'chyba odepřena' 'chybachown postfix:postfix /etc/postfix předem.

To by mělo být provedeno ve většině případů. Někteří poskytovatelé smtp však vyžadují specifickou adresu jako odesílatele nebo šifrování.

Související: PEAR :: Mail rozhraní by vás také mohlo zajímat.

Gmailu (a možná i dalším službám) se nemusí líbit, že se pokoušíte posílat poštu tímto způsobem, protože by to podle jejich standardů mohlo být považováno za nezabezpečené, a zablokovalo by váš pokus, tj. Nic se nestane na obrazovce nebo by se celý proces zablokoval vaše ověření. Také musí být povolen váš POP3.

Chcete-li čelit, viz zde. (Pokud chcete být na bezpečné straně, vytvořte fiktivní účet Gmail)

51
con-f-use

Jak již bylo uvedeno, postfix by byl nadměrný, pokud potřebujete pouze posílat e-maily z php při vývoji aplikací na domácím počítači.

Osobně používám velmi jednoduchý a lehký balíček ssmtp. K odesílání odchozích e-mailů bude používat jakýkoli server smtp. Nainstalujte jej spuštěním:

Sudo apt-get install ssmtp

Poté upravte /etc/ssmtp/ssmtp.conf file, komentujte existující řádek mailhub a přidejte následující řádky (tento příklad je pro server gmail smtp):

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Zadejte své uživatelské jméno a heslo pro gmail. Samozřejmě můžete použít jakýkoli jiný server SMTP).

Nyní se ujistěte, že vaše php.ini má správnou sendmail_path. Mělo by to znít takto:

sendmail_path = /usr/sbin/sendmail -t

(Z komentářů @ dima-l a @ omar-sabic: Nemusíte zde specifikovat ssmtp, protože instalace by měla vytvořit symbolický odkaz pro /usr/sbin/sendmail, které správně ukazuje na ssmtp. Jinak musíte zadat sendmail_path = /usr/sbin/ssmtp -t)

Znovu načtěte Apache a váš php by nyní měli být schopni odesílat odchozí e-maily.

62
Dima L.

PHP vyžaduje k odesílání pošty klienta SMTP. Chcete-li tuto funkci obsluhovat, můžete nainstalovat plnohodnotného agenta pro přenos pošty (MTA), jako je Postfix , ale je zbytečné, pokud potřebujete pouze posílat poštu přes PHP. Místo toho nainstalujte msmtp . Konfigurace je lehká a mnohem jednodušší.

Nainstalujte msmtp

Sudo apt-get install msmtp-mta ca-certificates

Nakonfigurujte

Vytvořte nový konfigurační soubor:

Sudo vi /etc/msmtprc

... s následujícími konfiguračními informacemi:

# 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

Je třeba nahradit konfigurační data představovaná vším, co je v "<" a ">" (včetně, odstranit je). V případě hostitele/uživatelského jména/hesla použijte obvyklé přihlašovací údaje pro odesílání pošty prostřednictvím poskytovatele pošty.

Řekněte PHP, aby jej použil

Sudo vi /etc/php5/Apache2/php.ini

Přidejte tento jediný řádek:

sendmail_path = /usr/bin/msmtp -t
29
colan

Měla by být jednoduchá oprava. Stačí nainstalovat Postfix, který provede skutečný e-mail.

Sudo apt-get install postfix

Chcete to spustit z terminálu (a nikoli ze softwarového centra), protože vám musí položit několik otázek ohledně nastavení. Měli byste najít, aby akceptovali všechna výchozí nastavení (pouze pro místní atd.).

4
Oli

Toto je stará otázka a výše jsou hodné odpovědi, ale pro své prostředí jsem potřeboval exim. Také se ujistěte, že máte na prvním místě nainstalován sendmail ($ which sendmail - měl by vrátit něco jako/usr/sbin/sendmail). Našel jsem dobrého průvodce na linode.com , ale Gist je:

apt-get install exim4-daemon-light mailutils

následován:

dpkg-reconfigure exim4-config

který vás přenese do interaktivního editoru.

2
vrobinson

Skvělá odpověď , con-f-use.

K účtu „fiktivní účet Gmail“ musím přidat jednu věc:

To je vysoce doporučeno, protože musíte nakonfigurovat svůj účet gmail tak, aby umožňoval méně zabezpečené aplikace: https://www.google.com/settings/u/0/security/lesssecureapps Jinak dostanete „ přihlaste se prosím pomocí webového prohlížeče a zkuste to znovu “ve vaší /var/log/mail.log soubor.

také jsem zjistil, že se mi vyskytla chyba časového limitu, pokud neodešlu gmail smtp po svém kořenovém certifikátu. Udělat toto:

Sudo nano /etc/postfix/main.cf

přidejte následující do dolní části souboru

smtp_tls_CAfile = /etc/postfix/cacert.pem

Poté zkopírujte thawte root cert do cacert.pem file:

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

Zde je odkaz, který jsem použil: Konfigurovat Postfix, aby používal Gmail SMTP na Ubuntu | EasyEngine

Doufejme, že to někomu zachrání pár vlasových folikulů ...

1
deputy_D

Našel jsem řešení poskytovaná Dima L. je nejjednodušší způsob a nejlehčí systém.

Jen nějaký doplněk pro větší přehlednost nastavení. Měli byste komentovat hostname in /etc/ssmtp/ssmtp.conf soubor. Vzorek ssmtp.conf soubor je uveden níže:

#
# 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
0
Saurin Dashadia