Email verzenden
Ik heb in een database een tabel met: "id", "employee" en "email"
zo staat er een naam + bijhorende email in de tabel.
Ik heb een php scriptje die door die tabel heen loopt en alle namen in een list zet als options. Nu zit ik met het volgende: Als je een persoon selecteert uit die lijst en dan op submit drukt, moet er een mailtje verzonden worden naar de geselecteerde persoon (dus naar de e-mail die gekoppeld is aan diegene).
Weet iemand hoe dat moet en/of het überhaupt kan? Ik werk via XAMPP dus alles is lokaal.
Kan je meerdere mensen selecteren in de options-field, of maar een enkele?
Zoals Arien vraagt, is het inderdaad handig om te weten of je meerdere of enkele gebruikers wilt mailen per keer. Kan je anders ook even wat relevante code laten zien met wat je al geprobeerd hebt en waarom het niet werkte. Daar heb je zelf ook veel aan.
dit is het scriptje voor de personen die je kan mailen, gehaald uit de database
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<select id="email" name="email">
<?php
require 'database.php';//Needed for database connection
$query= "SELECT employee FROM email_register ORDER BY employee ASC";
$result= mysqli_query($db_con, $query);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$employee=$row["employee"];
echo "<option>
$employee
</option>";
}
?>
</select>
<?php
require 'database.php';//Needed for database connection
$query= "SELECT employee FROM email_register ORDER BY employee ASC";
$result= mysqli_query($db_con, $query);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$employee=$row["employee"];
echo "<option>
$employee
</option>";
}
?>
</select>
Dan kan je met de standaard PHP-mailfunctie, PHPmailer of Swiftmailer deze gebruiken om de mail uiteindelijk te versturen.
Is dat een beetje duidelijk, en kom je daar uit?
Er komt een bezoeker, die selecteert met wie hij een afspraak heeft. Als hij dan op verzenden drukt, krijgt de geselecteerde persoon een mailtje met iets van "uw bezoek is aanwezig"
Ben al een beetje aan het prutsen met wat mail scriptjes van het internet, maar bij deze krijg ik een error van: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
Op een standaard Windows omgeving gaat inderdaad de mail functie niet werken zoals gewenst. Dan zul je je SMTP gegevens moeten instellen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
require 'database.php';//Needed for database connection
$query = "SELECT employee FROM email_register ORDER BY employee ASC";
if($result = mysqli_query($db_con, $query)) {
if(mysqli_num_rows($result) > 0 ){
?>
<select id="email" name="email">
<?php while($row = mysqli_fetch_assoc($result)) : ?>
<option value="<?= htmlspecialchars($row['id'])?>"><?= htmlspecialchars($row['employee'])?></option>
<?php endwhile ?>
</select>
<?php
}
}
?>
require 'database.php';//Needed for database connection
$query = "SELECT employee FROM email_register ORDER BY employee ASC";
if($result = mysqli_query($db_con, $query)) {
if(mysqli_num_rows($result) > 0 ){
?>
<select id="email" name="email">
<?php while($row = mysqli_fetch_assoc($result)) : ?>
<option value="<?= htmlspecialchars($row['id'])?>"><?= htmlspecialchars($row['employee'])?></option>
<?php endwhile ?>
</select>
<?php
}
}
?>
Toevoeging op 26/09/2016 11:49:07:
je kunt evt een mail server installeren, of kijken waar mee jouw mailclient op je pc (outlook etc) mailt en die settings overnemen.
Gewijzigd op 26/09/2016 11:47:54 door Ivo P
wat heb je in de toevoeging precies gedaan?
Toevoeging op 26/09/2016 13:48:35:
ik heb trouwens de opzet van het script wat aangepast.
Stel nu dat in jouw opzet een fout optreedt met de query: je zit midden in de opbouw van de <select> en daar kun je geen foutmeldingen meer kwijt.
Liefst doe je zo'n query ook al vooraf, omdat je dan al kunt weten of er überhaupt iets in de <select> gaat komen, of dat de lijst toch leeg gaat zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
require 'phpmailer/PHPMailerAutoload.php';
define('Include',TRUE);
$mail = new PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp-pulse.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'wachtwoordfake'; // SMTP password
$mail->SMTPSecure = ''; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 111; // TCP port to connect to
$mail->setFrom('[email protected] ', 'naam afzender');
$mail->addAddress('[email protected]', 'Naam ontvanger'); // Add a recipient
//$mail->addAddress('[email protected]'); // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
//$mail->addCC('[email protected]');
//$mail->addBCC('[email protected]');
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'onderwerp';
$mail->Body = 'Beste, <br/><br/> bla bla bla bla blablabla.';
//$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
?>
require 'phpmailer/PHPMailerAutoload.php';
define('Include',TRUE);
$mail = new PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp-pulse.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'wachtwoordfake'; // SMTP password
$mail->SMTPSecure = ''; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 111; // TCP port to connect to
$mail->setFrom('[email protected] ', 'naam afzender');
$mail->addAddress('[email protected]', 'Naam ontvanger'); // Add a recipient
//$mail->addAddress('[email protected]'); // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
//$mail->addCC('[email protected]');
//$mail->addBCC('[email protected]');
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'onderwerp';
$mail->Body = 'Beste, <br/><br/> bla bla bla bla blablabla.';
//$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
?>
alleen nu moet ik dus van de geselecteerde persoon de email krijgen en die does toevoegen aan bovenstaande script, geen flauw idee hoe dat zou moeten.
hieronder nog een keer het scriptje dat de persoon selecteert. in de database staan: ID, naam en e-mail, dus aan elke naam zit een email vast waar dus de mail naar toe moet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<select id="email" name="email">
<?php
//laat de lijst zien van namen van medewerkers, hier zit ook een e-mail aan gekoppeld.
define('Include',TRUE);
require 'database.php';//Needed for database connection
$query= "SELECT employee FROM email_register ORDER BY employee ASC";
$result= mysqli_query($db_con, $query);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$employee=$row["employee"];
echo "<option>
$employee
</option>";
}
?>
</select>
<?php
//laat de lijst zien van namen van medewerkers, hier zit ook een e-mail aan gekoppeld.
define('Include',TRUE);
require 'database.php';//Needed for database connection
$query= "SELECT employee FROM email_register ORDER BY employee ASC";
$result= mysqli_query($db_con, $query);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$employee=$row["employee"];
echo "<option>
$employee
</option>";
}
?>
</select>
Dan plaats je in 38-regelige script vanaf regel 4:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if($employeeid = filter_input(INPUT_POST, 'email')) {
$sql = "SELECT email, employee FROM email_register WHERE id = '" . mysqli_real_escape_string($db_con, $employeeid) ."'";
$result = mysqli_query($db_con, $sql);
if($row = mysqli_fetch_assoc($result)) {
$to = $row['email'];
$tonaam = $row['employee'];
}
else {
// ojee niet gevonden
}
}
?>
if($employeeid = filter_input(INPUT_POST, 'email')) {
$sql = "SELECT email, employee FROM email_register WHERE id = '" . mysqli_real_escape_string($db_con, $employeeid) ."'";
$result = mysqli_query($db_con, $sql);
if($row = mysqli_fetch_assoc($result)) {
$to = $row['email'];
$tonaam = $row['employee'];
}
else {
// ojee niet gevonden
}
}
?>
en regel 18 wordt dan
Maar je moet wel zorgen dat je selectbox gevuld wordt met zinnige options.
Toevoeging op 27/09/2016 11:27:15:
en ik heb een berg controles eruitgelaten:
check of er wel een post-request was
check of de query lukt
doe iets als er geen gebruiker met dat id bleek te zijn
check of email wel een emailadres lijkt te zijn.
Zo nee: dan geen poging doen om alsnog de email te versturen
Toevoeging op 27/09/2016 11:54:44:
Vind het zelf nog wel moeilijk, heb 3 periodes PHP gehad en nu dus stage in een bedrijf. Maar naar mijn gevoel nog te weinig les gehad voor dit haha, maar komt wel goed hoop ik
Toevoeging op 28/09/2016 10:35:00:
Zou dit ook met javascript kunnen? ik heb het nu in een form gezet met als action mail.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form action="mail.php">
<select id="email" name="email">
<?php
define('Include',TRUE);
require 'database.php';//Needed for database connection
$query= "SELECT employee FROM email_register ORDER BY employee ASC";
$result= mysqli_query($db_con, $query);
echo "<option value='' disabled selected>Selecteer uw contactpersoon</option>";
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$employee=$row["employee"];
echo " <option>$employee</option>";
}
?>
</select>
<br/></br>
<button type="submit" name="verzenden">Aanmelden</button>
</form>
<select id="email" name="email">
<?php
define('Include',TRUE);
require 'database.php';//Needed for database connection
$query= "SELECT employee FROM email_register ORDER BY employee ASC";
$result= mysqli_query($db_con, $query);
echo "<option value='' disabled selected>Selecteer uw contactpersoon</option>";
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$employee=$row["employee"];
echo " <option>$employee</option>";
}
?>
</select>
<br/></br>
<button type="submit" name="verzenden">Aanmelden</button>
</form>
Alleen ik kom er niet uit hoe ik dus van de geselecteerde persoon, zijn email en naam krijg en deze in mail.php invoerd op de plek van:
Als je in option als value het id meegeeft kan je in mail.php alle gegevens van dat id uit de db halen.
Alleen SELECT employee FROM aanpassen nog naar SELECT id, email, emplyee FROM
Toevoeging op 28/09/2016 11:00:05:
graag niet de mailadressen compleet in de <select> plaatsen graag. Dan is het namelijk een kleine moeite om daar willekeurige mailadressen in te stoppen.
Notice: Undefined variable: to in D:\xampp\htdocs\z.email-testen\mail.php on line 36
Notice: Undefined variable: tonaam in D:\xampp\htdocs\z.email-testen\mail.php on line 36
Message could not be sent.Mailer Error: You must provide at least one recipient email address.
zal ik anders beide codes even sturen?
Toevoeging op 28/09/2016 11:37:58:
trouwens bij
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
require 'database.php';//Needed for database connection
$query = "SELECT employee FROM email_register ORDER BY employee ASC";
if($result = mysqli_query($db_con, $query)) {
if(mysqli_num_rows($result) > 0 ){
?>
<select id="email" name="email">
<?php while($row = mysqli_fetch_assoc($result)) : ?>
<option value="<?= htmlspecialchars($row['id'])?>"><?= htmlspecialchars($row['employee'])?></option>
<?php endwhile ?>
</select>
<?php
}
}
?>
require 'database.php';//Needed for database connection
$query = "SELECT employee FROM email_register ORDER BY employee ASC";
if($result = mysqli_query($db_con, $query)) {
if(mysqli_num_rows($result) > 0 ){
?>
<select id="email" name="email">
<?php while($row = mysqli_fetch_assoc($result)) : ?>
<option value="<?= htmlspecialchars($row['id'])?>"><?= htmlspecialchars($row['employee'])?></option>
<?php endwhile ?>
</select>
<?php
}
}
?>
komt de lijst buiten de selectbox te staan :/ , dus een select zonder iets er in en daaronder een lijst met alle namen.
Immers, als jij geen id hebt, kun je geen naam /email uit de database vissen en is dus inderdaad $to niet gevuld.
Zie mijn opmerking over het controleren van de stappen of alles wel lukt en niet botweg doorlopen tot php echt niets meer kan.
wbt. de code "trouwens bij" hierboven:
daar moet je dus nog die query uitbreiden met in elk geval "id"
Mocht dan nog de opbouw fout gaan, zou ik in de bron van de pagina kijken (in je browser) om te zien wat er mis gaat. (ik hoop nu op een melding undefined index id melding)
Hmm misschien toch iets te veel voor mij, had het wel zo ver gekregen dat hij iemand een mail stuurde, maar dat was altijd de onderste van de lijst :/