Hallo,
wir haben so so gelöst. Leider musste ich einige Teile rausnehmen da diese zu einer fremden Mailklasse gehören.
Ich denke aber damit lässt sich dein Problem schnell lösen.
Außerdem kann ich aus Zeitgründen leider keine Support geben!
Füre das im Phpmyadmin aus:
PHP-Code:
CREATE TABLE IF NOT EXISTS `vms_mail_cache` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`an` varchar(250) NOT NULL,
`von` varchar(250) NOT NULL,
`betreff` varchar(250) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL,
`mail` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25223 ;
ersetze die Funktion usermail in lib/extras.lib.php mit dieser hier:
PHP-Code:
function usermail ($an, $betreff, $nachricht, $von, $cache='1') {
if ($cache == 0) {
// hier die Mailfunktion zum direktversand der Mail
} else {
db_query ('INSERT INTO vms_mail_cache (an, betreff, mail) VALUES ("'.mysql_real_escape_string($an).'", "'.mysql_real_escape_string($betreff).'", "'.mysql_real_escape_string($nachricht).'")');
}
}
Dort kommt der Wert Cache dazu wenn Ihr die Mail direkt verschicken wollt müsst Ihr den wert in der Funktion auf 0 setzen ( Standart ist 1)
Dies ist zum Beispiel bei der Anmeldung ganz sinnvoll.
Danach brauch Ihr noch einen Cron der immer ein paar Mails aus der Datenbank holt und verschickt. Leider musste ich diesen arg anpassen da bei uns eine fremde klasse genutzt wird und ich gerade nicht weiß ob wir diese veröffentlichen dürfen.
Ihr müsst also noch im ganzen script den versand einbauen. Dies geht entweder mir function mail() oder ihr baut euch noch eine smtp klasse ein.
Den Cron könnt Ihr alle Paar Minuten aufrufen es werden dann immer 75 Mails verschickt.
PHP-Code:
<?php
$mails = db_query('SELECT * FROM vms_mail_cache LIMIT 75')or die(mysql_error());
while($row = mysql_fetch_array($mails)) {
if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $row['an'])) {
echo 'Fehler in der E-Mail-Adresse <strong>'.$row['an'].'</strong><br>';
continue;
}
// hier noch die funktion mail() zum verschicken
echo 'Message has been sent.<br>';
@db_query('DELETE FROM vms_mail_cache WHERE id = '.$row['id']);
}
?>
Leider musste ich einiges rausnehmen ich denke aber vom Prinzip her sollte es klar sein :-).