CakePHP, Simple Contact Form, email sending
CakePHP March 6th, 2007In this post a I will show an example of a simple contact form which sends an email to a specified address, done using CakePHP.
The form has 3 fields: name, email address and message.
Firs of all let's see the "view" for the form displaying. It looks like this (app/views/controller_name/contact.thtml):
PHP:
-
<p>The message has been sent.
-
<br />Thank you!
-
</p> // Message displayed if success
-
<?php }else{?>
-
<form method="post" enctype="multipart/form-data" action=”<?php echo $this->webroot;?>controllername/contact/”>
-
</form>
-
-
<p>Please complete all fields!</p>
-
<?}?>
-
-
<p>
-
</p>
-
-
<p>
-
</p>
-
-
<p>
-
</p>
-
-
<p>
-
</p>
-
<p>
-
All fields have to be completed!
-
</p>
-
</form>
-
-
<?php }?>
Now we need a small component to verify the email address to be a valid one and also to contain the code necessary for the email sending. The component (app/controllers/components/email.php) is looking like this:
PHP:
-
<?php
-
-
class EmailComponent extends Object
-
{
-
-
function email($email, $name, $message)
-
{
-
$f_mail = "name@domain.com";
-
$f_name = "WebMaster domain.com";
-
$f_message ="\nName : $name"; // start building the message
-
$f_message .="\n\nE-mail : $email";
-
$f_message .="\n\nMessage \n : $message";
-
-
$headers = "From: www.domain.com <administrator@domain.com>\n";
-
$headers .= "X-Sender: <admin @domain.com>\n";
-
$headers .= "X-Mailer: PHP\n";
-
$headers .="Reply-To:$f_mail\n\n";
-
-
$subject = "Message from your website domain.com";
-
-
-
}
-
-
-
function validMail($email) // this function checks to see if the email supplied by the visitor is a valid one
-
{
-
$pattern="^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$";
-
// the regex for an email addres
-
-
$ll=1;
-
else
-
$ll=0;
-
return $ll;
-
}
-
}
-
-
?>
And now becomes the logic part, the controller (app/controllers/controller_name.php):
PHP:
-
<?php
-
-
class NameController extends AppController {
-
-
var $uses = null;
-
-
function contact(){
-
-
$this->pageTitle = 'Contact';
-
-
{
-
-
$email = $this->data['Page']['email'];
-
$name = $this->data['Page']['name'];
-
$message = $this->data['Page']['message'];
-
-
$error = 0;
-
-
// start filter vars
-
{
-
$error=1;
-
}
-
-
{
-
$error=1;
-
}
-
-
// verify email address
-
{
-
$error=1;
-
}
-
-
if ($error==0)
-
{
-
-
$this->Email->email($email, $name, $message); //here is the email sent
-
$this->set('succes', 'The message was sent <br />Thank you!');
-
// setting "succes" variable for displaying if email was sent.
-
-
}else
-
{
-
$this->set('error', 'Please complete all fields');
-
// this is in case of error
-
}
-
-
}else{
-
-
}
-
-
}
-
-
}?>
November 2nd, 2007 at 5:29 pm
Ohh yes cool this is why I’m looking for
.. thank you dude !
November 2nd, 2007 at 9:48 pm
Your welcome!
November 14th, 2007 at 8:26 pm
Hi Lungu Bogdan,
I’m trying to get this contact form to work with CakePHP version 1.2
Is there anything I need to change?
December 20th, 2007 at 2:46 pm
I would like to see a continuation of the topic
January 11th, 2008 at 2:33 pm
thank you dude.
January 21st, 2008 at 3:12 pm
Hello!
Nice site
Bye
January 23rd, 2008 at 9:38 am
This is perfect for me! I’m going to start using the Email Component.
January 24th, 2008 at 6:01 pm
Where to use this email component?i’m trying to do mail to functionality in cake php1.2.I’m new to cakephp.Will u pls where to place this code thro’ mail?awaiting for your prompt reply.
January 25th, 2008 at 2:53 am
miffy, unfortunately I think the code above is not compatible with cakephp 1.2 beta version, if you want it to work use an older version of cake. Soon, as my time permits , I will write a post about a contact form and email sending for Cakephp 1.2