PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   phpMailer Problem, 2 Mail hintereinander können nicht versendet werden (http://www.selfphp.de/forum/showthread.php?t=15154)

panametrics 13.11.2006 14:00:30

phpMailer Problem, 2 Mail hintereinander können nicht versendet werden
 
Hallo,
ich arbeite mit dem PHP-Mailer, und habe damit eine kleine Grenze erreicht.

Hintergrund:
Gesendet werden die Mails an einen Lotus Notes Domino-Server,
dieser benötigt keine SMTP-Authentifizierung,
Er nimmt Mails an, und das intern in unbegrenzten Zeitabständen, also muss keine Leerzeit zwischen 2 Mails sein.

Nun zum Problem:
ich habe mir eine kleine phpmailer Funktion gebaut, und gebe dieser die wichtigsten Daten, recipient, subject, body und alternativ body...

Den rest macht dann die Funktion (Verbindungsaufbau, etc.)

Wenn ich die Funktion (oder auch das komplette Script zum versenden, ist egal welche Methode) zweimal hintereinander aufrufe, was ich aktuell bewerkstelligen müsste, sendet er nur die erste Mail, und alles danach bricht ab!
Es wird also nicht die zweite Funktion durchlaufen.

Dachte mir gut, vielleicht ist ein "break" oder "die" in der phpmailer class, was ich auch gefunden habe. also habe ich mir die Arbeit gemacht, und alle Switch/Case Aufrufe in if/elseif/else geändert, das Script funktioniert auch nach wie vor problemlos, nur die zweite Mail geht noch immer nicht raus.
Hat da schonmal wer mit gekämpft?

PS: momentan läuft das Script auf ner Windows Maschine mit Xampp, geht aber auch unter ner anständigen Suse Linux umgebung nicht, da hab ich es auch getestet! ;-(

Auszug aus der Funktion "f_phpmailer.php":
PHP-Code:

<?
FUNCTION phpmailer( $email_recipient, $email_subject, $email_body, $email_altbody )
{
    ini_set("include_path", "D:/Programme/xampp/htdocs/berechtigung/phpmailer/");

    require("class.phpmailer.php");

    #$mail->SetLanguage("de", "/language/");

    $mail                 = new PHPMailer();
    $mail->IsSMTP();                                                  // Mailer anweisen SMTP zu nutzen
    $mail->Host         = "my_private_host";                // Haupt- und Backup-SMTP-Server
    $mail->SMTPAuth     = false;                                     // SMTP Authentification notwendig?

    $mail->From         = "mail@my_private_host";
    $mail->FromName     = "Helpdesk";
    #$mail->AddAddress( $empfaenger_adresse );
    $mail->AddAddress( $email_recipient );                          // Der Displayname ist Optional

    $mail->WordWrap     = 50;                                          // WordWrap nach 50 Zeichen
    $mail->IsHTML(true);                                              // Email Format auf HTML setzen

    $mail->Subject         = $email_subject;
    $mail->Body            = $email_body;
    $mail->AltBody         = $email_altbody;

    if(!$mail->Send())
    {
        return false;
        #return "Message could not be sent. <p>Mailer Error: " . $mail->ErrorInfo;
    }
    else
    {
        return true;
    }
}
?>

Würde mich freuen wenn wer ne Lösung hat,
die class.phpmailer.php und class.smtp.php sind die org Dateien...

Tom

BenniG. 13.11.2006 14:10:44

AW: phpMailer Problem, 2 Mail hintereinander können nicht versendet werden
 
mal Error_Reporting hochgesetzt?
PHP-Code:

ini_set("display_errors",true);
error_reporting(E_ALL); 

ich könnte mir vorstellen, dass das require bei jedem Funktionsaufruf Probleme macht..
Vielleicht mal das require außerhalb der Funktion aufrufen..

panametrics 13.11.2006 14:25:57

AW: phpMailer Problem, 2 Mail hintereinander können nicht versendet werden
 
Habs probiert, bringt net viel... ;-(
hab ja auch schon versucht das was in der Funktion abgearbeitet wird manuell ins script zu coden, da wird dann ja auch explizit die class.phpmailer.php ohne Funktion aufgerufen...

hm, irgendwie muss des doch sicher gehen, aber wie?

son shice! ich grübel da schon seit einer woche dran rum, und finde keine lösung.

hab schon über legt, dass wenn die erste mail raus ist, dass ich dann nen header redirect auf ne neue seite mache, in der ich dann die funktion nochmal aufrufe, und dann erst ne Meldung rausgeben, aber wies der teufel will, gefällt mir redirect einfach net!

Danke trotzdem erstmal: Tom

meikel (†) 13.11.2006 14:27:22

AW: phpMailer Problem, 2 Mail hintereinander können nicht versendet werden
 
Zitat:

Zitat von BenniG. (Beitrag 91945)
mal Error_Reporting hochgesetzt?

Sicher nicht, sonst gäbe es das Thema nicht.
Zitat:

ich könnte mir vorstellen, dass das require bei jedem Funktionsaufruf Probleme macht..
Die Vorstellung ist richtig. Die Fehlermeldung kann zwar durch die Verwendung von require_once() vermieden werden, aber ein Klasse per require(_once) innerhalb einer Funktion, die mehrfach aufgerufen wird, zu verwenden, ist sinnfrei.

meikel (†) 13.11.2006 14:30:34

AW: phpMailer Problem, 2 Mail hintereinander können nicht versendet werden
 
Zitat:

Zitat von panametrics (Beitrag 91946)
Habs probiert, bringt net viel... ;-(

Das, was Du getippert hast, bringt noch weniger.

Zitat:

hab ja auch schon versucht das was in der Funktion abgearbeitet wird manuell ins script zu coden, da wird dann ja auch explizit die class.phpmailer.php ohne Funktion aufgerufen...
Das ist Quark. Du sollst im "Hauptscript" die Klasse per require einfügen, damit die Klasse an sich dem Script bekannt ist. Dann kannst Du in Deiner Funktion so oft Du willst Deine Instanzen bilden.

BenniG. 13.11.2006 14:31:59

AW: phpMailer Problem, 2 Mail hintereinander können nicht versendet werden
 
Zur not probier es mal so wie hier (im ersten sample)
http://phpmailer.sourceforge.net/extending.html

vielleicht kannst du deine variable global machen und nur beim ersten Aufruf der Funktion eine Instanz des PHP-Mailers erstellen:
PHP-Code:

FUNCTION phpmailer$email_recipient$email_subject$email_body$email_altbody )
{
    global 
$mailer;
    if (!isset(
$mailer)) {
        
ini_set("include_path""D:/Programme/xampp/htdocs/berechtigung/phpmailer/");
        require(
"class.phpmailer.php");
    
#$mail->SetLanguage("de", "/language/");
        
$mailer                 = new PHPMailer();
        
// weitere intialisierung
    


Nach dem Senden machst du dann ClearAddresses und ClearAttachments..
Wenn Du eine eigene Klasse hast kannst du die phpMailer-Instanz auch in deinem Konstruktor erzeugen, das wäre sauberer, als hier mit globalen Variablen zu arbeiten..


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:03:50 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.