it-swarm.com.de

E-Mail senden mit PHP von einem SMTP-Server

$from = "[email protected]";
$headers = "From:" . $from;
echo mail ("[email protected]" ,"testmailfunction" , "Oj",$headers);

Ich habe Probleme beim Senden von E-Mails in PHP. Ich erhalte eine Fehlermeldung: SMTP server response: 530 SMTP authentication is required.

Ich hatte den Eindruck, dass Sie E-Mails zur Überprüfung ohne SMTP versenden können. Ich weiß, dass diese E-Mail wahrscheinlich herausgefiltert wird, aber das spielt jetzt keine Rolle.

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [email protected]

Dies ist das Setup in der php.ini-Datei. Wie muss ich SMTP einrichten? Gibt es SMTP-Server, für die keine Überprüfung erforderlich ist, oder muss ich einen Server selbst einrichten?

108
Borut Flis

Wenn Sie eine E-Mail über einen Server senden, für den SMTP-Authentifizierung erforderlich ist, müssen Sie sie unbedingt angeben und den Host, den Benutzernamen und das Kennwort festlegen (und möglicherweise den Port, falls es nicht der Standard-25 ist).

Beispielsweise verwende ich normalerweise PHPMailer mit ähnlichen Einstellungen wie diese:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

Mehr über PHPMailer finden Sie hier: https://github.com/PHPMailer/PHPMailer

150
Ivo Pereira

Für Unix-Benutzer verwendet mail () tatsächlich den Befehl Sendmail , um E-Mails zu senden. Anstatt die Anwendung zu ändern, können Sie die Umgebung ändern. msmtp ist ein SMTP-Client mit Sendmail-kompatibler CLI-Syntax, dh er kann anstelle von Sendmail verwendet werden. Es erfordert nur eine kleine Änderung an Ihrer php.ini.

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

Dann kann selbst die low-mail () - Funktion mit SMTP-Güte funktionieren. Dies ist sehr nützlich, wenn Sie versuchen, eine vorhandene Anwendung mit Mail-Diensten wie sendgrid oder mandrill zu verbinden, ohne die Anwendung zu ändern.

41
txyoji
<?php
    ini_set("SMTP", "aspmx.l.google.com");
    ini_set("sendmail_from", "[email protected]");

    $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = [email protected]";

    $headers = "From: [email protected]";


    mail("[email protected]", "Testing", $message, $headers);
    echo "Check your email now....<BR/>";
?>

ODER

WEITER LESEN

38
Dipesh Parmar

Hier ist eine Möglichkeit, dies mit PHP PEAR zu tun

// Pear Mail Library
require_once "Mail.php";

$from = '<[email protected]>'; //change this to your email address
$to = '<[email protected]>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'Host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => '[email protected]', //your gmail account
        'password' => 'snip' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);

//check mail sent or not
if (PEAR::isError($mail)) {
    echo '<p>'.$mail->getMessage().'</p>';
} else {
    echo '<p>Message successfully sent!</p>';
}

Wenn Sie Google Mail SMTP verwenden, denken Sie daran, SMTP in Ihrem Google Mail-Konto zu aktivieren 

13
Bolli

Das Problem ist, dass die Funktion PHP mail() eine sehr eingeschränkte Funktionalität hat. Es gibt mehrere Möglichkeiten, E-Mails von PHP zu senden.

  1. mail() verwendet den SMTP-Server auf Ihrem System. Unter Windows können mindestens zwei Server verwendet werden: hMailServer und xmail . Ich habe mehrere Stunden damit verbracht, sie zu konfigurieren und aufzubauen. Der erste ist meiner Meinung nach einfacher. Im Moment arbeitet hMailServer unter Windows 7 x64.
  2. mail() verwendet einen SMTP-Server auf einer Remote- oder virtuellen Maschine mit Linux. Natürlich erlaubt ein E-Mail-Dienst wie Google Mail keine direkte Verbindung ohne Anmeldeinformationen oder Schlüssel. Sie können eine virtuelle Maschine einrichten oder eine in Ihrem LAN befindliche Maschine verwenden. Die meisten Linux-Distributionen verfügen über einen Mail-Server. Konfigurieren Sie es und haben Sie Spaß. Ich verwende standardmäßig exim4 unter Debian 7, das seine LAN-Schnittstelle abhört.
  3. Mailing-Bibliotheken verwenden direkte Verbindungen. Libs sind einfacher einzurichten. Ich habe SwiftMailer verwendet, und es werden perfekt E-Mails vom Google Mail-Konto gesendet. Ich denke, dass PHPMailer auch ziemlich gut ist.

Egal welche Wahl Sie haben, ich empfehle Ihnen, eine Abstraktionsebene zu verwenden. Sie können die PHP -Bibliothek auf Ihrem Entwicklungscomputer mit Windows und die Funktion mail() auf einem Produktionscomputer mit Linux verwenden. Mit der Abstraktionsebene können Sie Mail-Treiber je nach System austauschen, auf dem Ihre Anwendung ausgeführt wird. Erstellen Sie eine abstrakte MyMailer-Klasse oder -Schnittstelle mit der abstrakten send()-Methode. Vererben Sie zwei Klassen MyPhpMailer und MySwiftMailer. Implementieren Sie die send()-Methode auf geeignete Weise.

12
George Sovetov

Es gibt einige SMTP-Server, die ohne Authentifizierung funktionieren. Wenn der Server jedoch eine Authentifizierung erfordert, gibt es keine Möglichkeit, dies zu umgehen. 

Die integrierten E-Mail-Funktionen von PHP sind sehr begrenzt - die Angabe des SMTP-Servers ist nur in Windows möglich. Bei * nix verwendet mail() die Binärdateien des Betriebssystems.

Wenn Sie E-Mails an einen beliebigen SMTP-Server im Internet senden möchten, sollten Sie eine Bibliothek wie SwiftMailer verwenden. Auf diese Weise können Sie beispielsweise die ausgehenden Server von Google Mail verwenden. 

10
Pekka 웃

In Fällen, in denen Sie eine Wordpress-Site unter Linux hosten und Serverzugriff haben, können Sie einige Probleme mit der Installation von msmtp vermeiden, die das Senden über die smtp-Standardfunktion von php mail () ermöglicht. msmtp ist eine einfachere Alternative zu Postfix, die etwas mehr Konfiguration erfordert. 

Hier sind die Schritte:

Msmtp installieren

Sudo apt-get install msmtp-mta ca-certificates

Erstellen Sie eine neue Konfigurationsdatei:

Sudo nano /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 innerhalb von "<" und ">" dargestellt werden (einschließlich, entfernen Sie diese). Verwenden Sie für Host/Benutzername/Kennwort Ihre normalen Anmeldeinformationen, um E-Mails über Ihren E-Mail-Anbieter zu senden.

Sagen Sie PHP, um es zu verwenden

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

Fügen Sie diese einzelne Zeile hinzu:

sendmail_path = /usr/bin/msmtp -t

Die vollständige Dokumentation finden Sie hier:

https://marlam.de/msmtp/

0
Peter Drinnan