it-swarm.com.de

Mail-Funktion konnte nicht instanziiert werden. Warum dieser Fehler auftritt

Wenn ich versuche, E-Mails über PHPMailer zu senden, erhalte ich diese Fehlermeldung. Mein Code ist unten:

<?
require("phpmailer/class.phpmailer.php"); // First we require the PHPMailer libary in our script
$mail = new PHPMailer(); // Next we create a new object of the PHPMailer called $mail
$mail->From = "[email protected]";
$mail->FromName = "Rajasekar";
$mail->AddAddress("[email protected]"); // This is the adress to witch the email has to be send.
$mail->Subject = "First PHP Email message"; // This is the subject  of the email message.
$mail->Body = "Hi! \n\n This is my first e-mail sent through PHP."; // This is the actual email message
if(!$mail->Send()) // Now we send the email and check if it was send or not.
{
   echo 'Message was not sent.';
   echo 'Mailer error: ' . $mail->ErrorInfo;
}
else
{
   echo 'Message has been sent.';
}
?>
19
Rajasekar

In Ubuntu (mindestens 12.04) scheint es, dass sendmail nicht standardmäßig installiert ist. Sie müssen es mit dem Befehl Sudo apt-get install sendmail-bin installieren.

Möglicherweise müssen Sie auch die richtigen Berechtigungen dafür konfigurieren, wie oben erwähnt.

40

Ich habe diese Codezeile verwendet

if($phpMailer->Send()){

    echo 'Sent.<br/>';

}else{

    echo 'Not sent: <pre>'.print_r(error_get_last(), true).'</pre>';

}

um herauszufinden, was das Problem war. Es stellte sich heraus, dass ich im abgesicherten Modus lief, und in Zeile 770 oder etwas anderes wurde ein fünftes Argument $params an mail() übergeben, das im abgesicherten Modus nicht unterstützt wird. Ich habe es einfach kommentiert und voilá, es hat funktioniert:

$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/);

Es ist innerhalb der MailSend- Funktion von PHPMailer.

12
arik

Ich hatte gerade dieses Problem und fand in meinem Apache-Fehlerprotokoll, dass sendmail nicht installiert war. Nach der Installation funktionierte alles wie geplant!

[email protected]:~$ tail /var/log/Apache2/error.log
sh: 1: /usr/sbin/sendmail: not found
6
Jacta

Hatte dasselbe Problem. Ich habe nur eine kurze Apache2 error.log-Datei nachgeschlagen und es wurde genau gesagt, was das Problem war:

> sh: /usr/sbin/sendmail: Permission denied

Die Lösung bestand also darin, die richtigen Berechtigungen für die /usr/sbin/sendmail-Datei zu erteilen (es war nicht über PHP zugänglich).

Der Befehl dazu wäre: 

> chmod 777 /usr/sbin/sendmail

stellen Sie sicher, dass es überhaupt existiert!

3
slawkens

Verwenden SieSMTP, um eine E-Mail zu senden: -

$mail->IsSMTP();
$mail->Host = "smtp.example.com";

// optional
// used only when SMTP requires authentication  
$mail->SMTPAuth = true;
$mail->Username = 'smtp_username';
$mail->Password = 'smtp_password';
2

Stellen Sie sicher, dass Sie auch die mit phpmailer gelieferte SMTP-Klasse einschließen:

// for mailing
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
2
Sarfraz

Um einen alten Thread erneut aufzurufen, bestand mein Problem darin, dass eine der "AddressTo" -Adressen nicht gültig war. Durch das Entfernen dieser E-Mail-Adresse wurde der Fehler behoben.

2
Greg A

here , "Dies bedeutet, dass Ihre PHP - Installation nicht dafür konfiguriert ist, die mail () - Funktion korrekt aufzurufen (z. B. sendmail_path ist in Ihrer php.ini nicht richtig eingestellt) oder Sie haben keine lokale Mail Server installiert und konfiguriert. "

In meinem Fall musste ich die mail () - Funktion ("Aktivieren der mail () - Warteschlange") in den Einstellungen meines Webhosts zulassen.

1
Fanky

Versuchen Sie es mit einer Adresse, die nicht gmail ist. Sie erlauben (soweit ich weiß) keinen Zugang zum Senden von E-Mails. Ich habe letzte Woche ein einfaches E-Mail-Programm erstellt, und es werden auch keine Standardports zum Senden verwendet, und Sie müssen über https übertragen

1
Kieran

Erkundigen Sie sich bei Ihrem Gastgeber, ob für das Senden von E-Mails stündliche Beschränkungen gelten.

1
Sir Lojik

Dies ist ein Systemfehler. 

Überprüfen Sie den Fehler des Systems mit: 

tail /var/log/httpd/error_log

Es kann einen beliebigen Grund geben.

1
Alexey

Sie müssen lediglich den alten Thread erneut aufrufen, um PHPMailer ausführlich zu debuggen, indem Sie Folgendes hinzufügen:

print_r(error_get_last());

dies gibt den genauen Fehler für Sie aus, der dazu führt, dass die Standard-PHP-Mail () beschädigt wird.

Ich hoffe es hilft jemandem.

0
Shuja Ahmed

Ein alter Thread, aber es kann jemandem wie mir helfen. Ich habe das Problem gelöst, indem der Wert des SMTP-Servers in der PHP.ini auf einen zulässigen Wert gesetzt wurde

0
Atif.Net

Ich hatte den gleichen Fehler. Das Reply-To verursachte das Problem. Ich habe es entfernt.

$email->AddReplyTo( $admin_email, $admin_name ); 
0
Zeke

In CentOS kann dies durch die SELinux-Richtlinie verursacht werden. Führen Sie den folgenden Code aus, um zu sehen, ob sie aktiviert ist.

getsebool httpd_can_sendmail

Sie können es aktivieren, indem Sie den folgenden Befehl aufrufen. Der Parameter -P macht es dauerhaft.

setsebool -P httpd_can_sendmail 1
0
Roman Štefko

"Mail-Funktion konnte nicht instanziiert werden" ist die Methode von PHPMailer, zu melden, dass der Aufruf von mail () (in der Mail-Erweiterung) fehlgeschlagen ist. (Sie verwenden also den Mail-Mailer.)

Sie könnten versuchen, das @ vor den Aufrufen von mail () in PHPMailer :: MailSend zu entfernen und zu sehen, welche Fehler ggf. unbemerkt verworfen werden.

0
Frank Shearar

ich habe mein problem gelöst (für wamp)

    $mail->IsSMTP(); 

    $mail->Host='hote_smtp'; 

Ändern Sie hote_smtp um den richtigen Wert

0
khaled_webdev