JUM
JUM

Reputation: 61

Sending a Confirmation Email in PHP

I am quite new to PHP and am experimenting with an online ordering website in php. I have come across a problem when trying to send a confirmation email using a 'cc'.

Every time an order is processed, the order always sends to the 'CC' address specified as the '$from' and the sender (the from) is what is specified in the '$to' section. In the email confirmation received, it only displays the from section and the 'to' and 'cc' are empty as demonstrated below:

From: **$_SESSION['od_email']**
To: *This space is empty*
CC: [email protected]

Can anyone help to point out where I am going wrong? I have attached the code below.

//THIS IS CODE FOR THE EMAIL WHICH IS AUTOMATICALLY SENT TO THE CUSTOMER AND THE BUSINESS WHEN AN ORDER IS SUCCESSFULLY COMPLETED
//define the receiver of the email
$to = $_SESSION['od_email'];
//define the subject of the email
$subject = 'Order Confirmation | Ref No for Order: '.  $_SESSION['orderId']; 
//define the message to be sent. Each line should be separated with \n
$message = 'test';
//Who the message is from
$from = "[email protected]";
$cc = "[email protected]";
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From:" . $from;
//bcc header going to the to go to the business as confirmation
$headers = "cc:" . $cc;
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );

What I need for it to show is:

From: **[email protected]**
To: **$_SESSION['od_email'];**
CC: **[email protected]**

Thanks in advance for any help given

Upvotes: 2

Views: 3412

Answers (3)

Chris James Champeau
Chris James Champeau

Reputation: 994

I would go all out with your headers and make sure you set everything you need to,

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: ' .$to. "\r\n";
$headers .= 'From: ' .$from. "\r\n";
$headers .= 'Cc: '.$cc. "\r\n";

also, I believe mail() needs a valid email address, I do not know how you have the email set before $_SESSION['od_email'] but if you are running a test and literally expecting $_SESSION['od_email'] to come with it that wont work, it will see it as a not valid email and return false, thus returning nothing. To further diagnose that problem tho we would need to know how $_SESSION['od_email'] is setup

EDIT

Okay I am pretty sure the issue is caused how you are setting up $_SESSION['od_email]' based on your comment below.

Note: I am assuming your database is $db, but if not you need to change $db to the prober name

Let's try this and see how it works

// Get Data from the Database
$query = "SELECT `od_email` FROM `tbl_order`";
$result = $db->query($query);
while ($data = $db->fetch_array($result)) {

// Set Up the SESSION email
$_SESSION['od_email'] = $data['od_email'];

// Prepare the Email
$to = $_SESSION['od_email'];
$subject = 'Order Confirmation | Ref No for Order: '.  $_SESSION['orderId']; 
$message = 'test';
$from = "[email protected]";
$cc = "[email protected]";

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: ' .$to. "\r\n";
$headers .= 'From: ' .$from. "\r\n";
$headers .= 'Cc: '.$cc. "\r\n";

// Send the email
mail($to,$subject,$message,$headers);

}

Upvotes: 2

Funk Forty Niner
Funk Forty Niner

Reputation: 74216

Couldn't he just add an @mail ? such as...

$mail_sent = @mail( $od_email, $subject, $message, $headers ); 

or

mail( $od_email, $subject, $message, $headers );

Replacing any variables.

Always worked for me.

Upvotes: 1

Jeremy Rodi
Jeremy Rodi

Reputation: 2505

When you're going to set the CC, you're overwriting what was in $headers. Try:

$headers = "From:" . $from . "\r\n";
$headers.= "Cc:" . $cc;

And if that doesn't help, there's always PHP's documentation on mail.

Upvotes: 2

Related Questions