Wie kann ich PHP senden?

68

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 at Work 08.06.2011, 12:25
quelle

7 Antworten

51

Aus dem Mail-Handbuch von php:

  

Anforderungen

     

Damit die Mail-Funktionen funktionieren   verfügbar, benötigt PHP eine installierte   und funktionierendes E-Mail-System. Das Programm   verwendet werden definiert durch die   Konfigurationseinstellungen in der php.ini   Datei.

Dies bedeutet, dass Sie eine Art von Mailserver installieren und php konfigurieren müssen, um es zu verwenden. Normalerweise ist dieser Mailserver in Ubuntu postfix. Jedoch - wenn die PHP-Seite, die Sie kodieren, letztendlich auf der Seite eines Hosting-Dienstes (z. B. xmission) gespeichert wird, wird höchstwahrscheinlich bereits ein Mail-Server dort installiert sein. Testen Sie in diesem Fall Ihre Site online anstatt lokal.

Wenn Sie es auf Ihrem eigenen System testen müssen oder es auf Ihrem eigenen Home-Server hosten möchten, gehen Sie folgendermaßen vor:

Postfix-Installation

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:

  • Internet : Ihr eigener Mail-Server.
  • Satellit : Ein externer E-Mail-Anbieter (z. B. Google) wird zum Senden und Empfangen von E-Mails verwendet. Der Server erhält keine Mail.
  • Smarthost : Mischung zwischen den beiden. Mail wird lokal gespeichert, aber über einen externen Mail-Provider gesendet.
  • Nur lokal : Wird Sie nicht interessieren. Das ist ein systeminterner Mailserver. Sie können nur E-Mails von Benutzer zu Benutzer auf dem System senden.

Der Rest der Installationsoptionen hängt von Ihrer Wahl dieser allgemeinen Konfiguration ab.

Wahrscheinlich werden Sie eine Satelliteninstallation wählen. Das bedeutet, dass die Mail mit einem externen Provider versendet wird. 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 benötigen eine Passwort-Authentifizierung, um E-Mails zu versenden. Postfix muss also dieses Passwort kennen. Außerdem gibt es Dinge zu beachten, wie Verschlüsselung (die Sie googlen müssen). So konfigurieren Sie Postfix mit Passwort-Authentifizierung (sasl):

  • Installieren libsasl2-modules < img src="https://i.stack.imgur.com/9SOjZ.png"> und sasl2-bin < img src="https://i.stack.imgur.com/9SOjZ.png"> 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 /etc/postfix/main.cf

    hinzufügen
     # 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 tatsächliche 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 die Fehler 'Berechtigung verweigert' von chown postfix:postfix /etc/postfix vorher.

Dies sollte es in den meisten Fällen tun. Einige SMTP-Provider benötigen jedoch eine bestimmte Adresse als Absender oder Verschlüsselung.

Verwandte: PEAR :: Mail Schnittstelle könnte auch für dich interessant sein.

Google Mail (und vielleicht andere Dienste) mögen es nicht, wenn Sie versuchen, E-Mails auf diese Weise zu senden, da dies nach ihren Standards als unsicher angesehen werden könnte und Ihren Versuch blockieren würde, dh auf dem Bildschirm oder an einem anderen Ort wird nichts passieren Prozess würde Ihre Authentifizierung blockieren. Auch Ihr POP3 muss aktiviert sein.

Um dem zu begegnen, siehe hier. (Wenn Sie auf der sicheren Seite sein möchten, erstellen Sie ein Dummy-Gmail-Konto)

    
con-f-use 08.06.2011, 13:33
quelle
58

Wie bereits erwähnt, wäre Postfix ein Overkill, wenn Sie nur E-Mails von PHP senden müssen, während Sie Anwendungen auf Ihrem Heimcomputer entwickeln.

Ich persönlich verwende sehr einfaches und leichtes Paket ssmtp. Es verwendet jeden SMTP-Server, um ausgehende E-Mails zu senden. Installieren Sie es, indem Sie Folgendes ausführen:

sudo apt-get install ssmtp

Bearbeiten Sie dann /etc/ssmtp/ssmtp.conf datei, kommentieren Sie die vorhandene mailhub-Zeile und fügen Sie die folgenden Zeilen hinzu (dieses Beispiel gilt für den gmail SMTP-Server):

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

(Geben Sie Ihren Google Mail-Nutzernamen und Ihr Passwort an. Natürlich können Sie jeden anderen SMTP-Server verwenden.)

Stelle nun sicher, dass deine php.ini korrekt sendmail_path ist. Es sollte wie lauten:

sendmail_path = /usr/sbin/sendmail -t

( Aus Kommentaren von @ dima-l und @ omar-sabic : Sie müssen ssmtp hier nicht angeben, da die Installation einen Symlink für /usr/sbin/sendmail erstellt haben sollte, der korrekt zeigt to ssmtp , ansonsten müssen Sie sendmail_path = /usr/sbin/ssmtp -t ) angeben

Apache neu laden und dein php sollte jetzt ausgehende E-Mails senden können.

    
Dima L. 29.10.2013 20:08
quelle
27

PHP benötigt einen SMTP-Client, um E-Mails zu senden. Sie könnten einen voll funktionsfähigen Mail Transfer Agent (MTA) wie Postfix installieren, um dies zu erfüllen Funktion, aber es ist Overkill, wenn Sie nur Mail ü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 den 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 innerhalb von "& lt;" und "& gt;" (inklusive, entfernen Sie diese). Verwenden Sie für Host / Benutzername / Passwort Ihre normalen Anmeldeinformationen zum Senden von E-Mails über Ihren E-Mail-Anbieter.

Sagen Sie PHP, es zu verwenden

sudo vi /etc/php5/apache2/php.ini

Fügen Sie diese einzelne Zeile hinzu:

sendmail_path = /usr/bin/msmtp -t
    
Apple Mail 29.04.2012 21:19
quelle
3

Sollte eine einfache Lösung sein. Sie müssen nur Postfix installieren, die das eigentliche Mailing durchführt.

sudo apt-get install postfix

Sie möchten das von einem Terminal aus (und nicht vom Software-Center) ausführen, da es einige Setup-Fragen stellen muss. Sie sollten feststellen, dass alle Standardeinstellungen (nur lokal, usw.) akzeptiert werden.

    
Oli 08.06.2011 12:47
quelle
2

Das ist eine alte Frage und es gibt oben gute Antworten, aber ich brauchte exim für meine Umgebung. Bestätigen Sie außerdem, dass Sie sendmail an erster Stelle installiert haben ( $ which sendmail - sollte etwas wie / usr / sbin / sendmail zurückgeben). Ich fand eine gute Anleitung bei linode.com , aber die Das Wichtigste ist:

apt-get install exim4-daemon-light mailutils

gefolgt von:

dpkg-reconfigure exim4-config

was Sie zu einem interaktiven Editor bringt.

    
vrobinson 30.04.2014 23:46
quelle
1

Gute Antwort , con-f-use.

Ich möchte etwas über den "Dummy-Gmail-Account" hinzufügen:

Dies wird dringend empfohlen, da Sie Ihr Google Mail-Konto so konfigurieren müssen, dass weniger sichere Anwendungen zugelassen werden: link Andernfalls erhalten Sie in Ihrer /var/log/mail.log -Datei eine Fehlermeldung "Bitte melden Sie sich mit Ihrem Webbrowser an und versuchen Sie es erneut".

Ich habe auch festgestellt, dass ich einen Timeout-Fehler bekomme, wenn ich dem gmail SMTP-Server mein Stammzertifikat nicht sende. Um dies zu tun:

sudo nano /etc/postfix/main.cf

füge folgendes am Ende der Datei 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 rettet das ein paar Haarfollikel ...

    
deputy_D 25.05.2016 19:12
quelle
0

Ich fand die Lösungen von Dima L. ist der einfachste Weg & amp; leicht zu System.

Nur ein paar Ergänzungen für mehr Klarheit bei der Einstellung. Sie sollten hostname in /etc/ssmtp/ssmtp.conf file 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
    
SD. 13.04.2018 08:33
quelle

Tags und Links