Tjena,
Har ett system där ett större antal aviseringar via e-post skickas ut ibland, kan röra sig om 100 - 300 åt gången ungefär.
Alla mottagare finns i en array som jag loopar igenom och skickar aviseringen med PHP Mailer via SMTP. Nu på sistone har flera hört av sig angående att dom fått "fel" mail, namnet på mottagaren och e-postadressen är rätt, men de uppgifter som står i mailbodyn tillhör en annan användare.
I loopen så skapar jag vid varje varv en ny instans av min mailklass, och dödar den (såklart) i slutet. Ändå blir det fel ibland och jag förstår inte riktigt varför.
Det verkar bara vara just när det är en större mängd aviseringar som ska skickas. Kan det vara så att mailen "blandas ihop" på servern/i kön innan dom skickas eller tror ni att felet ligger i min kod?
Vad är nackdelen med SENDMAIL? Har tänkt prova det istället eftersom det bör gå snabbare att anropa den funktionen istället för att ansluta tilll en (extern) SMTP server. I nuläget ingen större nytta med att visa kod, ville mest kolla allmänt vad ni tror?
Vad jag lärt mig kan Sendmail ibland vara gnälligt när det gäller vissa spamfilter, går det t.ex. att verifiera avsändaradressen så att sådant undviks?
Tack!
Här kommer förresten del del av koden som har med parsningen av bodyn att göra. Ser förresten nu att jag inte skapar en ny instans i varje loop, kanske kan det vara det som ställer till det? Om det är något i koden, tror jag att det är någon av funktionerna "setTemplate()" eller "parseMail()" i klassen som strular. Någon som tror något annat?
Klassen:
require("phpMailer/class.phpmailer.php");
Class KOMail extends PHPMailer {
var $template;
var $vars;
function __construct(){
$this->init();
}
private function init(){
$this->vars = array();
}
public function parseMail(){
$data = $this->template;
foreach($this->vars as $key => $value){
$data = str_replace($key, $value, $data);
}
return $data;
}
public function setTemplate(){
$template = $this->template;
if(!file_exists($template)){
$template = ROOTPATH . "inc/template.default.htm";
}
$fp = fopen($template, "r");
$data = fread($fp, filesize($template));
fclose($fp);
// return (!$data == false ? $this->parseMail($data) : false);
$this->template = $data;
return $data;
}
}
Aviseringen:
$Notifies = array(
array(
"Name" => "Micke",
"Email" => "micke@domain.com",
"InvoiceId" => 13454345
),
array(
"Name" => "Arne",
"Email" => "micke@domain.com",
"InvoiceId" => 1377845
),
array(
"Name" => "Kalle",
"Email" => "micke@domain.com",
"InvoiceId" => 13335411
),
);
$emailBody = <<<EOT
{CONTENT}
EOT;
$mail = new KOMail();
$mail->CharSet = "utf-8";
foreach($Notifies as $key => $Notify){
try {
$mail->template = ROOTPATH . SKINPATH . "templates/email.default.htm";
if(!$mail->setTemplate() == false){
$mail->vars = array(
"{CLIENT_LONG_NAME}" => $CLIENT_LONG_NAME,
"{CLIENT_WEB_ADDR}" => ABSURL,
"{SKINPATH}" => SKINPATH,
"{CONTENT}" => str_replace(
array(
"{userFirst}",
"{invoiceId}",
),
array(
$Notify['Name'],
$Notify['InvoiceId'],
),
$emailBody),
"{CLIENT_MAIL_ADDR}" => $CLIENT_MAIL_ADDR,
"{DATETIME}" => set_datetime(time(), DEFAULT_GMT, "datetime"),
"{IPADDR}" => $_SERVER['REMOTE_ADDR']
);
$msgBody = $mail->parseMail();
$mail->MsgHTML($msgBody);
// Add address mm. som inte är intressant just nu...
// ...
// Skickar mm...
$mail->ClearAddresses();
$mail->ClearCCs();
$mail->ClearBCCs();
}
} catch (phpmailerException $e) {
} catch (Exception $e) {
}
}
$mail = null;