So i have had this issue which I’ve been trying to solve.. I have a list of customers emails retrieved from the database and once i click Process, it supposes to send an email to "the customer's email".. The screenshot below describes what i mean..
So once you press the "Process" button on the first row, it should send an email to the retrieved email in the first row
// The code below retrieves all the customer info from the database including customers email addresses.
<?php
while ($row = $result->fetch_assoc()){
print "<tr>";
print "<td>" . $row['TransactionID'] . "</td>";
print "<td>" .$row['ItemName']."<br>" ."</td>";
print "<td>" .$row['ItemQTY']."<br>" ."</td>";
print "<td>" . $row['ItemAmount'] . "</td>";
print "<td>" . $row['BuyerEmail'] . "</td>";
print "<td ><a href='#sendemail'>Process</a></td>"; //Once this link is clicked, it should take me to the next code send an email the retrieved email.
print "</tr>";
}
$mysqli->close();
?>
//---------------------//
// The code below should trigger once i click "Process" and send an email to the customer.
if (isset($_GET['sendemail'])){
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
SMTP servers
$mail->SMTPAuth = true;
authentication
$mail->Username = '****@gmail.com';
$mail->Password = '********';
$mail->SMTPSecure = 'tls';
`ssl` also accepted
$mail->Port = 587;
$mail->setFrom('****@gmail.com', 'RANDOMNAME');
$mail->addReplyTo('****@gmail.com', 'RANDOMNAME');
$mail->addAddress('BuyerEmail');
$mail->isHTML(true);
$bodyContent = '<h1>Our Valued Customer,</h1>';
$bodyContent .= '<p>Your Order is ready for pick up!</p>';
$mail->Subject = 'RANDOMNAME';
$mail->Body = $bodyContent;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
}
runsendemail();
}
?>
The code works just fine when $mail->addAddress('email@example'); has a predefined value.. but not sure how to make it 'variable' meaning it keeps changing according to the list of emails retrieved from the database..
Your process link should link to the page containing your mail logic and pass along the email to use <a href="/sendmail.php?sendemail=<?php echo urlencode($row['BuyerEmail']); ?>">Process</a>
Your sendmail.php file then can receive the email with $_GET['sendemail']
and continue with your mailing logic $mail->addAddress(urldecode($_GET['sendemail']));
.
Note: Hopefully you have some kind of authentication in place and this isn't a publicly accessible page otherwise anybody can trigger this file and send your database information to an email of their choosing, or hit this file a ton of times and crash your system.
Change this to the following :
print "<td ><a href='#sendemail'>Process</a></td>"; //Once this link is clicked, it should take me to the next code send an email the retrieved email.
This is some thing you should change it to :
echo "
<td>
<form method='get' action='CHANGE IT TO YOUR PHP SCRIPT NAME'?
<input type='hidden' name='sendemail' value='$row['BuyerEmail']'>
<input type='submit' value='Process'>
</form>
</td>
";
Here I have used a html simple form. I'm passing a hidden value that is your buyer email using get method. Change the action to your php script name if it is a different file. Now you can use $_GET['sendemail'] in your email sending code as buyer's email address.