webentwicklung-frage-antwort-db.com.de

SMTP connect () fehlgeschlagener PHPmailer - PHP

Ich bin neu in PHP. Ich habe versucht, mir per E-Mail eine Beispiel-E-Mail über PHPmailer zu schicken. Ich verwende den SMTP-Server von Google Mail. Ich versuche, eine Mustermail von meinem Google Mail-Konto an mein Yahoo-Konto zu senden. Ich erhalte jedoch die Fehlermeldung: Mailer Error: SMTP connect() failed. 
Hier ist der Code: 

<?php

require "class.phpmailer.php";
$mail = new PHPMailer(); 
$mail->IsSMTP();                              // send via SMTP
$mail->Host = "ssl://smtp.gmail.com";
$mail->SMTPAuth = true;                       // turn on SMTP authentication
$mail->Username = "[email protected]";        // SMTP username
$mail->Password = "mypassword";               // SMTP password
$webmaster_email = "[email protected]";       //Reply to this email ID
$email="[email protected]";                // Recipients email ID
$name="My Name";                              // Recipient's name
$mail->From = $webmaster_email;
$mail->Port = 465;
$mail->FromName = "My Name";
$mail->AddAddress($email,$name);
$mail->AddReplyTo($webmaster_email,"My Name");
$mail->WordWrap = 50;                         // set Word wrap
$mail->IsHTML(true);                          // send as HTML
$mail->Subject = "subject";
$mail->Body = "Hi,
This is the HTML BODY ";                      //HTML Body 
$mail->AltBody = "This is the body when user views in plain text format"; //Text Body 

if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent";
}
?>

Ich verwende einen WAMP-Server auf einem Windows 7-64-Bit-Computer. Was könnte das Problem sein?
Bitte helfen Sie mir, das zu lösen. Vielen Dank! 

12
Chinmay Dabke

Sie müssen den Parameter Host hinzufügen

$mail->Host = "ssl://smtp.gmail.com"; 

Prüfen Sie auch, ob Sie open_ssl aktiviert haben.

<?php
echo !extension_loaded('openssl')?"Not Available":"Available";
9

Die Lösung dieses Problems ist wirklich sehr einfach. Google verwendet tatsächlich einen neuen Autorisierungsmechanismus für seinen Benutzer. Möglicherweise haben Sie in der Debug-Konsole eine weitere Zeile gesehen, in der Sie aufgefordert werden, sich mit einem beliebigen Browser in Ihrem Konto anzumelden.! Dies ist auf den neuen Authentifizierungsmechanismus XOAUTH2 zurückzuführen, den Google seit 2014 verwendet....... Verwenden Sie nicht den ssl over-Port 465, sondern tls über 587. Dies liegt nur am XOAUTH2-Authentifizierungsmechanismus. Wenn Sie SSL über 465 verwenden, wird Ihre Anfrage zurückgeschickt.

was Sie wirklich tun müssen, ist .. Melden Sie sich bei Ihrem Google-Konto an und öffnen Sie die folgende Adresse https://www.google.com/settings/security/lesssecureapps und aktivieren Sie einschalten. Sie müssen dies tun, damit Sie sich mit dem google SMTP verbinden können, da Google mit dem neuen Authentifizierungsmechanismus alle Anforderungen von all diesen Anwendungen abruft, die keiner Standardverschlüsselungstechnik folgen. Nach dem Einschalten müssen Sie dies tun go .. hier ist der Code, der für mich gut funktioniert hat ..

require_once 'C:\xampp\htdocs\email\vendor\autoload.php';

define ('GUSER','[email protected]');
define ('GPWD','your password');


// make a separate file and include this file in that. call this function in that file.

function smtpmailer($to, $from, $from_name, $subject, $body) { 
    global $error;
    $mail = new PHPMailer();  // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 2;  // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true;  // authentication enabled
    $mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail
    $mail->SMTPAutoTLS = false;
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;

    $mail->Username = GUSER;  
    $mail->Password = GPWD;           
    $mail->SetFrom($from, $from_name);
    $mail->Subject = $subject;
    $mail->Body = $body;
    $mail->AddAddress($to);
    if(!$mail->Send()) {
        $error = 'Mail error: '.$mail->ErrorInfo; 
        return false;
    } else {
        $error = 'Message sent!';
        return true;
    }
}
15

Ein fast identisches Problem wurde gelöst, indem diese Zeilen zur Standardkonfiguration von PHPMailer hinzugefügt wurden. Klappt wunderbar.

$mail->SMTPKeepAlive = true;   
$mail->Mailer = “smtp”; // don't change the quotes!

Kam durch diesen Code (von Simon Chen), während er hier nach einer Lösung suchte, https://webolio.wordpress.com/2008/03/02/phpmailer-and-smtp-on-1and1-shared-hosting/#comment) -89

4
Lynton Black

Fehlerbehebung

Sie haben diesen Code hinzugefügt:

 $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );

Durch Aktivieren von Weniger sichere Apps zulassen : "Wird das Problem für PHPMailer normalerweise gelöst, und Ihre App wird dadurch nicht wesentlich weniger sicher. Die Änderung dieser Einstellung kann eine Stunde oder länger dauern erwarten Sie also keine sofortige Korrektur "

Diese Arbeit für mich!

2
Jhonattan

Wenn das Problem immer noch nicht gelöst werden kann, überprüfen Sie den folgenden Thread und folgen Sie der Antwort von callmebob.

PHPMailer - SMTP-FEHLER: Kennwortbefehl beim Senden von E-Mails von meinem Server fehlgeschlagen

1
A.M.N.Bandara

wenn alles fehlschlägt, müssen Sie für Google Mail den Zugriff auf Apps von Drittanbietern aktivieren, um eine Verbindung mit Ihrem Google Mail-Konto herzustellen.

https://www.google.com/settings/security/lesssecureapps // schalten Sie es aus auf

1
user889030

Es fehlt die Anweisung, dass die Verbindung SSL verwendet

require ("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); 
$mail->SMTPAuth = true;     // turn of SMTP authentication
$mail->Username = "YAHOO ACCOUNT";  // SMTP username
$mail->Password = "YAHOO ACCOUNT PASSWORD"; // SMTP password
$mail->SMTPSecure = "ssl";
$mail->Host = "YAHOO Host"; // SMTP Host
$mail->Port = 465;

Fügen Sie dann die anderen Teile hinzu

$webmaster_email = "[email protected]";       //Reply to this email ID
$email="[email protected]";                // Recipients email ID
$name="My Name";                              // Recipient's name
$mail->From = $webmaster_email;
$mail->FromName = "My Name";
$mail->AddAddress($email,$name);
$mail->AddReplyTo($webmaster_email,"My Name");
$mail->WordWrap = 50;                         // set Word wrap
$mail->IsHTML(true);                          // send as HTML
$mail->Subject = "subject";
$mail->Body = "Hi,
This is the HTML BODY ";                      //HTML Body 
$mail->AltBody = "This is the body when user views in plain text format"; //Text Body 

if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent";
}

Als Randbemerkung hatte ich Probleme, Body + AltBody zusammen zu verwenden, obwohl sie funktionieren sollten. Als Ergebnis schrieb ich die folgende Wrapper-Funktion, die perfekt funktioniert.

<?php
require ("class.phpmailer.php");

// Setup Configuration for Mail Server Settings
$email['Host']          = 'smtp.email.com';
$email['port']          = 366;
$email['user']          = '[email protected]';
$email['pass']          = 'from password';
$email['from']          = 'From Name';
$email['reply']         = '[email protected]';
$email['replyname']     = 'Reply To Name';

$addresses_to_mail_to = '[email protected];[email protected]';
$email_subject = 'My Subject';
$email_body = '<html>Code Here</html>';
$who_is_receiving_name = 'John Smith';

$result = sendmail(
    $email_body,
    $email_subject,
    $addresses_to_mail_to,
    $who_is_receiving_name
);

var_export($result);


function sendmail($body, $subject, $to, $name, $attach = "") {

  global $email;
  $return = false;

  $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
  $mail->IsSMTP(); // telling the class to use SMTP
  try {
    $mail->Host       = $email['Host']; // SMTP server
//    $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Host       = $email['Host']; // sets the SMTP server
    $mail->Port       = $email['port'];                    // set the SMTP port for the GMAIL server
    $mail->SMTPSecure = "tls";
    $mail->Username   = $email['user']; // SMTP account username
    $mail->Password   = $email['pass'];        // SMTP account password
    $mail->AddReplyTo($email['reply'], $email['replyname']);
    if(stristr($to,';')) {
      $totmp = explode(';',$to);
      foreach($totmp as $destto) {
        if(trim($destto) != "") {
          $mail->AddAddress(trim($destto), $name);
        }
      }
    } else {
      $mail->AddAddress($to, $name);
    }
    $mail->SetFrom($email['user'], $email['from']);
    $mail->Subject = $subject;
    $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
    $mail->MsgHTML($body);
    if(is_array($attach)) {
        foreach($attach as $attach_f) {
            if($attach_f != "") {
              $mail->AddAttachment($attach_f);      // attachment
            }
        }
    } else {
        if($attach != "") {
          $mail->AddAttachment($attach);      // attachment
        }
    }
    $mail->Send();
  } catch (phpmailerException $e) {
    $return = $e->errorMessage();
  } catch (Exception $e) {
    $return = $e->errorMessage();
  }

  return $return;
}
1
Kraang Prime

Bitte schau dir das an

Ich habe es repariert ...

Schalten Sie diesen Zugang ein und genießen Sie ..! Das ist auf Google Mail-Kontoeinstellung.

https://github.com/PHPMailer/PHPMailer/tree/5.2-stable

<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '[email protected]';                 // SMTP username
$mail->Password = 'pass';                           // SMTP password
//$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 25;                                    // TCP port to connect to

$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'User');     // Add a recipient

$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

0

Wenn Sie VPS und den httpd-Dienst verwenden, prüfen Sie, ob httpd_can_sendmail aktiviert ist.

getsebool -a | grep mail

auf zu setzen

setsebool -P httpd_can_sendmail on
0
Maki92