Wie kann ich mit PHP E-Mails senden?

71

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?

JM bei der Arbeit
quelle
Dies ist einfach und leicht von Ihrem Google Mail zu senden. kvcodes.com/2016/03/send-e-mail-localhost-ubuntu-php
Kvvaradha

Antworten:

51

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:

Postfix-Installation

Installation: postfix Postfix installieren / 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:

  • Internet : Ihr eigener Mailserver.
  • Satellit : Ein externer E-Mail-Anbieter (zB Google) wird zum Senden und Empfangen von E-Mails verwendet. Der Server erhält keine Mail.
  • Smarthost : Mischung aus beiden. E-Mails werden lokal gespeichert, aber über einen externen E-Mail-Anbieter gesendet.
  • Nur vor Ort : Betrifft Sie nicht. Das ist ein systeminterner Mailserver. Sie können nur E-Mails von Benutzer zu Benutzer im System senden.

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.

Konfiguration nach der Installation

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 Installieren Sie libsasl2-modules und sasl2-bin, Installieren Sie 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_passwordmit einer Zeile wie:

     smtp.gmail.com [email protected]: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/postfixVoraus 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.)

verwechseln
quelle
Das Senden von E-Mails aus Ubuntu (lokal) funktioniert. Aber was ist, wenn ich möchte, dass mein Windows diesen Computer zum Senden von E-Mails verwendet (auch PHP)? Wie konfiguriere ich das?
JM at Work
Ich bin mir nicht sicher, ob ich die Frage verstehe. Sie können von Ihrer Ubuntu-Maschine aus schleifen. Nun wollen Sie mal über diesen Ubuntu-Rechner von Ihrem Windows-PC aus über PHP senden? Ist das korrekt?
con-f-use
2
Jetzt existiert das Paket libsasl2 nicht mehr. Ich benutze 11.04. Seine libsasl2-2 nach aktualisiertem Paket ..
mythicalcoder
61

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

Dima L.
quelle
3
Ich denke du meintest sendmail_path = /usr/sbin/ssmtp -t. Das hat funktioniert, danke
Omer Sabic
1
ssmtp sollte einen Symlink für erstellen /usr/sbin/sendmail, der korrekt auf ssmtp verweist. Also sendmail_path = /usr/sbin/sendmail -tsollte es auch funktionieren
Dima L.
2
Weitere Informationen zur Konfiguration ssmtp(einige nützliche Hinweise gefunden): So richten Sie PHP-Mail in Debian ein - diese Frage und dieser Link halfen, das Programm einzurichten.
Gskema
1
Für Google Mail müssen Sie Ihr Google-Konto so konfigurieren, dass "unsichere Apps" funktionieren. Siehe support.google.com/accounts/answer/6010255
aesede,
1
Ich musste auch die folgende Zeile hinzufügen FromLineOverride=YES, um den folgenden Fehler zu vermeiden:550 5.7.60 SMTP; Client does not have permissions to send as this sender
Caumons
29

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 <[email protected]>
password <password>
from <[email protected]>
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
colan
quelle
Natürlich wird 'sudo vi /etc/php5/conf.d' ohne eine php.ini nicht funktionieren. In meinem Fall (Ubuntu) musste ich '/etc/php5/apache2/php.ini' bearbeiten und auch Apache 'sudo /etc/init.d/apache2 reload' neu starten, damit es funktioniert.
Dejan
1
Übrigens können Sie Ihre msmtprc-Konfiguration testen, indem Sie Folgendes verwenden:cat <<EOF | msmtp <[email protected]> Subject: test This is a test! EOF
Dejan
Wäre nett, aber es funktioniert bei mir nicht. In seinem Protokoll wird nichts angezeigt. Es scheint völlig in Ordnung, aber keine Würfel.
James T Snell
2
Um msmtp systemweit verfügbar zu machen, installieren Sie "msmtp-mta".
Colan
1
Falls Sie wie ich in den folgenden Anweisungen zu wörtlich sind, behalten Sie die <> -Klammern in der Konfigurationsdatei nicht bei. Ich habe gut 20 Minuten gebraucht, um das herauszufinden
de Raad
4

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.

Oli
quelle
2

Dies ist eine alte Frage und es gibt oben wertvolle Antworten, aber ich brauchte eximfü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.

vrobinson
quelle
1

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

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

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

deputy_D
quelle
0

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 hostnamein der /etc/ssmtp/ssmtp.confDatei kommentieren . Die Beispieldatei ssmtp.confist 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
[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
SD.
quelle