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
September 7th, 2009 at 8:09 pm
I don’t usually post but I enjoyed your blog a lot,Thanks alot for the great read
February 3rd, 2010 at 12:55 pm
Hi
Thanks for the posting this email functionality for cakephp, working cool, can we able to give validation for this in model, can you guide me on this
thanks
Baiju
June 9th, 2010 at 5:14 am
Hola, Could you please review our work for all starcraft players – replays database project and say if you like it or not? We tried so hard to build a place where people can download the most exciting game replays every day!
July 12th, 2010 at 1:24 am
Ce vremuri…. cate s-au schimbat de atunci