Hoi allemaal.
Ik ben de laatste maanden intensief met PHP bezig en kom bijna overal zelf wel uit, maar nu zit ik met een klein dilemma.
Ik wil een standaard mail versturen naar verschillende adressen en iedere geadresseerde moet een andere bijlage ontvangen.
Ik dacht: dat knal ik ff in een WHILE loop, maar die deed helemaal niets.
.ini is in orde, want mail versturen lukt prima, alleen niet vanuit de loop.

Stukje script:

$sql = 'SELECT * FROM `tabel` ORDER BY `naam`.`id` ASC';
$result=mysql_query($sql);
while ($row=mysql_fetch_array($result)) {
$naam=$row["naam"];
$id=$row["id"];
$email=$row["email"];
$website=$row["website"];
$attach=$row["imglink"];
$update=$row["update"];
$sitemail="[email protected]";
$subject="Onderwerp!";
$bericht= "Dit wordt het bericht. Verzonden op " . date("d-m-Y") . " om " . date("H:i:s") . " uur.<br> Als dit niet klopt, stuur dan dit bericht terug naar ".$sitemail.".<br>;
$mail= mail($_POST['email'],$subject,$bericht,$attach,"From: ".$sitemail."");
}

$naam=$row["naam"];
$id=$row["id"];
$email=$row["email"];
$website=$row["website"];
$attach=$row["imglink"];
$update=$row["update"];

kan je weggooien.
Variabeken kopiëren is gewoon onnodig.

Controlleer ook eens of mail() true terug geeft.
Nog beter is het gebruik van een mail-class zoals phpMailer of Swiftmailer.
moet $_POST['email'] niet $row['email'] zijn?

edit; en $attach slaat nergens op.. dit moeten de headers zijn
Zo dan?
Levert niets op, zelfs met ERROR reporting aan...


if(isset($_POST['submit'])){

$sql = 'SELECT * FROM `tabel` ORDER BY `naam`.`id` ASC';
$result=mysql_query($sql);
while ($row=mysql_fetch_array($result)) {
$sitemail="[email protected]";
$subject="Onderwerp!";
$bericht= "Dit wordt het bericht. Verzonden op " . date("d-m-Y") . " om " . date("H:i:s") . " uur.<br> Als dit niet klopt, stuur dan dit bericht terug naar ".$sitemail.".<br>";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: jorgvberlo <[email protected]>' . "\r\n";

$mail= mail($row["email"],$subject,$bericht,$headers,"From: ".$sitemail."");
}
if($mail == TRUE) {
echo "mail verstuurd";
echo '<META HTTP-EQUIV="Refresh" Content="0; URL=redir.htm">';
exit;
} else {
print_r($_POST);
}
}

Toevoeging op 20/01/2012 19:56:52:

Jaron T op 20/01/2012 19:01:16

moet $_POST['email'] niet $row['email'] zijn?

edit; en $attach slaat nergens op.. dit moeten de headers zijn


Sorry, dit zijn probeersels van me sinds ik ten einde raad ben. Ik weet dat ik geen schoonheidsprijs in ontvangst ga nemen.
Post je code eens op een fatsoenlijke manier tussen de daarvoor code-ubb-tags!!

En nee:
1. je bent bezig met het wil opnieuw uit te vinden
2. je geeft het wiel te veel spaken

Wees niet eigenwijs en implementeer een mail class, zoals dat al door - Aar - is aangegeven.
De mail() functie kent geen attach parameter, verzin je die er zelf bij?
Check de regels of gebruik inderdaad een mail class.
Daar is wel een mauw aan te passen, maar ook daarover heb ik enkel nog theoretische kennis (base64 encoding). Ik ga me even verdiepen in de class theorie en kom dan bij jullie terug (met een net script), want ik weet nog steeds niet hoe ik vanuit mijn lus een email verstuur en daar ging het me om.
Je mailt naar $_POST['email'] ipv naar $row['email'], die in je lus dus het adres wordt.
Jorg van Berlo op 20/01/2012 21:17:01

Daar is wel een mauw aan te passen, maar ook daarover heb ik enkel nog theoretische kennis (base64 encoding). Ik ga me even verdiepen in de class theorie en kom dan bij jullie terug (met een net script), want ik weet nog steeds niet hoe ik vanuit mijn lus een email verstuur en daar ging het me om.
o.a. phpmailer is een complete set die direct bruikbaar is.

Heb nog nooit een class geschreven. Had ik wel moeten doen, maar ik schreef nooit meer dan twintig regels.

<?PHP
$sql = 'SELECT * FROM tabel';
$result=mysql_query($sql);
while ($row=mysql_fetch_array($result)) {

$my_file = $row["imglink"];
$my_path = $_SERVER['DOCUMENT_ROOT']."/directory/";
$my_name = "naam";
$my_mail = "[email protected]";
$my_replyto = "[email protected]";
$my_subject = "This is a mail with attachment.";
$my_message = "Bericht";
mail_attachment($my_file, $my_path, $row["email"], $my_mail, $my_name, $my_replyto, $my_subject, $my_message);
}
?>

Class

<?php
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
    $file = $path.$filename;
    $file_size = filesize($file);
    $handle = fopen($file, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; 
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    if (mail($mailto, $subject, "", $header)) {
        echo "mail send ... OK";
    } else {
        echo "mail send ... ERROR!";
    }
}
?>
Dit is alleen een functie, geen class!!!

Maar wat wil je met je laatste post??

Reageren