Ich habe Ubuntu 11.04, LAMP mit tasksel installiert.
Ich finde, dass PHP mail()
nicht funktioniert.
Ich nehme an, ich muss es aktivieren oder so? Wie mache ich das?
Ich habe Ubuntu 11.04, LAMP mit tasksel installiert.
Ich finde, dass PHP mail()
nicht funktioniert.
Ich nehme an, ich muss es aktivieren oder so? Wie mache ich das?
Antworten:
Aus dem Mail-Handbuch von PHP:
Bedarf
Damit die Mail-Funktionen verfügbar sind, benötigt PHP ein installiertes und funktionsfähiges E-Mail-System. Das zu verwendende Programm wird durch die Konfigurationseinstellungen in der Datei php.ini festgelegt.
Dies bedeutet, dass Sie eine Art Mailserver installieren und PHP konfigurieren müssen, um ihn zu verwenden. Normalerweise ist dieser Mailserver in Ubuntu Postfix. Wenn jedoch die PHP-Seite, die Sie codieren, irgendwann auf der Seite eines Hosting-Dienstes gespeichert wird (z. B. xmission), ist dort höchstwahrscheinlich bereits ein Mail-Server installiert. In diesem Fall testen Sie Ihre Site einfach online anstatt lokal.
Wenn Sie es auf Ihrem eigenen System testen oder auf Ihrem eigenen Heimserver hosten möchten, fahren Sie fort mit:
Installation: postfix / sudo apt-get install postfix
Während des Vorgangs werden Sie gefragt, in welchem Modus Postfix installiert werden soll. Es gibt vier mögliche Modi:
Die restlichen Installationsoptionen hängen von Ihrer Wahl dieser allgemeinen Konfiguration ab.
Höchstwahrscheinlich wählen Sie eine Satelliteninstallation. Das heißt, die Post wird von einem externen Anbieter verschickt. Als SMTP-Server (Postausgangsserver) müssen Sie dann Ihren Provider SMTP angeben. Der Rest der Optionen ist selbsterklärend.
Die meisten SMTP-Server erfordern eine Kennwortauthentifizierung, um E-Mails zu senden. Daher muss postfix dieses Passwort kennen. Es gibt auch Dinge wie Verschlüsselung zu berücksichtigen (die Sie googeln müssen). So konfigurieren Sie Postfix mithilfe der Kennwortauthentifizierung (sasl):
Installieren Sie libsasl2-modules und sasl2-bin, indem Sie auf die Software Center-Symbole klicken oder vom Terminal aus:
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
Aktivieren Sie sasl-auth, indem Sie diese Zeilen zu hinzufügen /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
Erstellen Sie eine Datei /etc/postfix/sasl_password
mit einer Zeile wie:
smtp.gmail.com USERNAME@gmail.com:USERPASSWORD
Ersetzen Sie das aktuelle Passwort, den Benutzernamen und die SMTP-Adresse.
Postfix aktualisieren:
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
Möglicherweise müssen Sie den Fehler "Erlaubnis verweigert" im chown postfix:postfix /etc/postfix
Voraus umgehen .
Dies sollte in den meisten Fällen der Fall sein. Einige SMTP-Anbieter benötigen jedoch eine bestimmte Adresse als Absender oder Verschlüsselung.
Verwandte Themen : Das PEAR :: Mail- Interface könnte Sie auch interessieren.
Google Mail (und möglicherweise auch andere Dienste) mögen es möglicherweise nicht, dass Sie versuchen, E-Mails auf diese Weise zu senden, da dies nach deren Maßstäben als unsicher eingestuft werden könnte und Ihren Versuch blockieren würde Ihre Authentifizierung. Auch Ihr POP3 muss aktiviert sein.
Um dem entgegenzuwirken, siehe hier. (Wenn Sie auf der sicheren Seite sein möchten, erstellen Sie ein Dummy-Google Mail-Konto.)
Wie bereits erwähnt, wäre Postfix ein Overkill, wenn Sie beim Entwickeln von Anwendungen auf Ihrem Heimcomputer nur E-Mails von PHP senden müssen.
Ich persönlich benutze sehr einfaches und leichtes Paket ssmtp. Es wird ein beliebiger SMTP-Server zum Versenden ausgehender E-Mails verwendet. Installieren Sie es, indem Sie Folgendes ausführen:
sudo apt-get install ssmtp
Bearbeiten Sie dann die /etc/ssmtp/ssmtp.conf
Datei, kommentieren Sie die vorhandene Mailhub-Zeile aus und fügen Sie die folgenden Zeilen hinzu (dieses Beispiel gilt für den SMTP-Server von Google Mail):
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>
(Geben Sie Ihren Google Mail-Benutzernamen und Ihr Passwort an. Natürlich können Sie auch einen anderen SMTP-Server verwenden.)
Stellen Sie nun sicher, dass Ihre php.ini korrekt ist sendmail_path
. Es sollte lauten:
sendmail_path = /usr/sbin/sendmail -t
( Aus Kommentaren von @ dima-l und @ omar-sabic : Sie müssen hier nicht angeben ssmtp
, da die Installation einen Symlink für erstellt haben sollte /usr/sbin/sendmail
, der korrekt auf verweist ssmtp
. Andernfalls müssen Sie angeben sendmail_path = /usr/sbin/ssmtp -t
)
Laden Sie Apache neu und Ihr PHP sollte nun in der Lage sein, ausgehende E-Mails zu versenden.
sendmail_path = /usr/sbin/ssmtp -t
. Das hat funktioniert, danke
/usr/sbin/sendmail
, der korrekt auf ssmtp verweist. Also sendmail_path = /usr/sbin/sendmail -t
sollte es auch funktionieren
ssmtp
(einige nützliche Hinweise gefunden): So richten Sie PHP-Mail in Debian ein - diese Frage und dieser Link halfen, das Programm einzurichten.
FromLineOverride=YES
, um den folgenden Fehler zu vermeiden:550 5.7.60 SMTP; Client does not have permissions to send as this sender
PHP benötigt einen SMTP-Client, um E-Mails zu senden. Sie könnten einen Mail Transfer Agent (MTA) mit vollem Funktionsumfang wie Postfix installieren , um diese Funktion auszuführen. Dies ist jedoch zu viel, wenn Sie nur E-Mails über PHP senden müssen. Installieren Sie stattdessen msmtp . Es ist leicht und viel einfacher zu konfigurieren.
Installieren Sie msmtp
sudo apt-get install msmtp-mta ca-certificates
Konfigurieren Sie es
Erstellen Sie eine neue Konfigurationsdatei:
sudo vi /etc/msmtprc
... mit folgenden Konfigurationsinformationen:
# 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
Sie müssen die Konfigurationsdaten ersetzen, die durch alles in "<" und ">" dargestellt werden (einschließlich, entfernen Sie diese). Verwenden Sie für Host / Benutzername / Kennwort Ihre normalen Anmeldeinformationen zum Senden von E-Mails über Ihren E-Mail-Anbieter.
Sagen Sie PHP, es zu benutzen
sudo vi /etc/php5/apache2/php.ini
Fügen Sie diese einzelne Zeile hinzu:
sendmail_path = /usr/bin/msmtp -t
cat <<EOF | msmtp <receiver@test.com> Subject: test This is a test! EOF
Sollte eine einfache Lösung sein. Sie müssen nur Postfix installieren, das den eigentlichen E-Mail-Versand durchführt.
sudo apt-get install postfix
Sie möchten dies von einem Terminal (und nicht vom Software-Center) aus ausführen, da Sie einige Fragen zur Einrichtung stellen müssen. Es sollte sich herausstellen, dass alle Standardeinstellungen (nur lokal usw.) akzeptiert werden.
Dies ist eine alte Frage und es gibt oben wertvolle Antworten, aber ich brauchte exim
für meine Umgebung. Stellen Sie außerdem sicher, dass Sie sendmail installiert haben ( $ which sendmail
- sollte etwa / usr / sbin / sendmail zurückgeben). Ich habe bei linode.com einen guten Leitfaden gefunden , aber der Kern ist:
apt-get install exim4-daemon-light mailutils
gefolgt von:
dpkg-reconfigure exim4-config
Damit gelangen Sie zu einem interaktiven Editor.
Gute Antwort , con-f-use.
Ich muss Folgendes zum "Dummy-Google Mail-Konto" hinzufügen:
Dies wird dringend empfohlen, da Sie Ihr Google Mail-Konto so konfigurieren müssen, dass weniger sichere Anwendungen zugelassen werden: https://www.google.com/settings/u/0/security/lesssecureapps
Andernfalls erhalten Sie eine "Bitte melden Sie sich mit Ihrem Webbrowser an und versuchen Sie es dann erneut "Fehler in Ihrer /var/log/mail.log
Datei.
Außerdem habe ich festgestellt, dass eine Zeitüberschreitung auftritt, es sei denn, ich sende dem SMTP-Server von Google Mail mein Stammzertifikat. Um dies zu tun:
sudo nano /etc/postfix/main.cf
Fügen Sie am Ende der Datei Folgendes hinzu
smtp_tls_CAfile = /etc/postfix/cacert.pem
Kopieren Sie dann das thawte-Root-Zertifikat in die cacert.pem
Datei:
cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Hier ist der Link, den ich verwendet habe: Konfigurieren Sie Postfix für die Verwendung von Gmail SMTP unter Ubuntu | EasyEngine
Hoffentlich spart das jemandem ein paar Haarfollikel ...
Ich fand, dass die Lösungen von Dima L. der einfachste und leichteste Weg sind, ein System zu entwickeln.
Nur eine Ergänzung für mehr Klarheit beim Einstellen. Sie sollten hostname
in der /etc/ssmtp/ssmtp.conf
Datei kommentieren . Die Beispieldatei ssmtp.conf
ist wie folgt:
#
# 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