310 likes | 480 Views
Multifarious Project. A personal email-system. Team Members Abdullah Alghamdi Metaib Alenzai Mohammed Alshehri Hamd Alshamsi. The Project Idea. Email system allows user to login securely into a web-based email system. SYSTEM LAYOUT. User logs into the web based email system.
E N D
Multifarious Project A personal email-system • Team Members • Abdullah Alghamdi • Metaib Alenzai • Mohammed Alshehri • Hamd Alshamsi
The Project Idea • Email system allows user to login securely into a web-based email system.
SYSTEM LAYOUT User logs into the web based email system Login page displayed to user as part of client side PHP scripts Authentication and data communication occurs between client and server Server performs processing and authentication procedures and returns appropriate response Server side checks for user profiles and details in the database
Programming Languages Used • PHP • HTML
PHP and Why? • PHP stands for PHP: Hypertext Preprocessor. • PHP runs on different platforms (Windows, Linux, Unix, etc.) • PHP supports many databases (MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Generic ODBC, etc.) • PHP is an open source software (OSS). • PHP is compatible with almost all servers used today (Apache, IIS, etc.) • PHP is easy to learn and runs efficiently on the server side.
HTML • HTML stands for Hyper Text Markup Language • An HTML file is a text file containing small markup tags • The markup tags tell the Web browser how to display the page • An HTML file must have an htm or html file extension • An HTML file can be created using a simple text editor
Logon.php • This is the main file. It contains the PHP code that will be executed once a username and password will be entered. It authenticates the username and password that are entered by the user by communicating with the server. • The code also sets the cookie for 1800 seconds and expires after that, so that the user has to logon again after that time period. • The code checks for an invalid usernames and passwords and prevents that kind of input from the user. • This file relays all the obtained information to INDEX.PHP and communicates with it.
Logon PHP Code if( isset($_POST['user']) && isset($_POST['pass']) ) { $mbox = @imap_open('{mailhost.fit.edu}INBOX', $_POST['user'], $_POST['pass']); if($mbox) { setcookie("auth",serialize(Array($_POST['user'],$_POST['pass'])),time()+1800,"/",".fit.edu"); } else { setcookie('auth','',-1,"/",".fit.edu"); }
Logon HTML Code <head> <title>Email Login</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <form method="POST"> <table width="100%" height="100%"><tr><td align="center" valign="center"> <fieldset style="width:300px"> <legend><small>Login to Email</small></legend> <table align=center> <tr> <td align=center width=50%>Username:</td> <td align=center width=50%>Password:</td> </tr>
Auth PHP • AUTH.PHP contains the logic to authorize a user. • The main function in this PHP code is the Die function. If a user enters a wrong username/password or blank username/password, this function will prevent the user from logging in. • This file communicates this information to LOGON.PHP and acts as a bridge between the client and the mail server
Auth Code 1- function die_with_honor($s) { die("Error: \"$s\""); } 2- $bad_user = true; require(dirname(__FILE__)."/logon.php");
Index • INDEX.PHP verifies the authentication requested by LOGON.PHP by talking to the email-server. • After verifying login, INDEX.PHP displays 20 email messages per page and also displays the number of pages that are in the email INBOX. As an example, if the user has 43 email messages in his INBOX, then INDEX.PHP will display the first 20 email messages and 3 pages. • INDEX.PHP communicates with AUTH.PHP file for user authentication purposes. • INDEX.PHP also contains the HTML code to display the contents of the inbox to the user who logs into the email system. • INDEX.PHP also communicates with COMPOSE.PHP, DELETE.PHP and READ.PHP that perform different email functions that are discussed later.
Index PHP Code 1- $startMsg = 1; if(isset($_GET['start'])) $startMsg = $_GET['start']; $countMsg = 20; if(isset($_GET['count'])) $countMsg = $_GET['count']; 2- $messages = Array(); for($i=$startMsg; $i<$lastMsg; $i++) $messages[imap_uid($conn, $i)] = imap_headerinfo($conn, $i); imap_close($conn); ?>
Index HTML Code <table width="900" border="0" cellpadding="1" cellspacing="0" style="border: 1px solid black"> <tr bgcolor="blue" style="color: white;"> <td width="20%"><b>From:</b></td> <td width="36%"><b>Subject:</b></td> <td width="18%"><b>Received:</b></td> <td width="11%"><b>Delete:</b></td> <td width="10%"><b>Reply:</b></td> </tr> <? foreach($messages as $uid => $msg) { $bgcolor = ($msg->Unseen == 'U' || $msg->Recent == 'N' ? 'lightgrey' : 'white'); ?> <tr>
Read • READ.PHP communicates with the database using SQL queries to retrieve data for a particular user. • It passes in the SQL query using the IMAP protocol to talk to the Florida Tech Mail Server. • The use of the IMAP protocol in READ.PHP allows this email system to display simple text emails, emails with pictures and even emails with pictures containing text. • The code also formats the contents of an email that will be displayed to the user. • Once the entire procedure of reading an email and displaying the email to the user has been completed, it closed the IMAP connection that was established to talk to the Florida Tech mail server.
Read PHP Code if (!isset($struct->parts)) { $content = imap_body($conn, $uid, FT_UID); $content = "<pre>$content</pre>"; } else { for($i=1; $i<=count($struct->parts); $i++) { $content .= imap_fetchbody($conn, $uid, "$i", FT_UID); }
Read Code HTML <html> <head><title><?=$header->Subject?></title></head> <body> <table width="100%" style="border: 1px solid black"><tr><td align="center"> [ <a href="index.php?start=<?=$start?>&count=<?=$count?>">Inbox</a> ] [ <a href="compose.php?reply=<?=$uid?>">Reply</a> ] [ <a href="delete.php?message=<?=$uid?>&start=<?=$start?>&count=<?=$count?>">Delete</a> ] [ <a href="logout.php">Logout</a> ]</td></tr></table> <?=$content?> </body> </html>
Compose • The COMPOSE.PHP file displays the HTML content required when the user has to compose an email. • It also contains the code to reply to an email, to delete an email and also to logout of a system. • When a user hits the reply hyperlink at the top of the page, the entire text of the original mail is displayed in the compose window and then the user can proceed to send the reply to the concerned email address.
Compose PHP Code 1- if(isset($_POST['to'])) { imap_mail($_POST['to'], $_POST['subject'], $_POST['body'], '', '', '', $user.'@fit.edu'); header("Location: index.php"); } $to = ''; $subject = ''; $body = ''; 2- if( isset($_GET['reply']) ) { $uid = $_GET['reply']; $conn = imap_open ("{mailhost.fit.edu}INBOX", $user, $pass); $header = imap_headerinfo($conn,imap_msgno($conn, $uid)); $struct = imap_fetchstructure($conn, $uid, FT_UID);
Compose HTML Code 1- <legend><small>Compose New Mail </small></legend> <table border="0" align="center"> <tr> <td width="9%">To:</td> <td width="91%"> <input type="text" name="to" size="100" value="<?=$to?>"> 2- <br>[ <a href="index.php">Inbox</a> ] [ <a href="logout.php">Logout</a> ]
Delete • DELETE.PHP allows the user to delete any message that is selected by the user. • The actual delete function in PHP does not delete the message from the inbox. • So we use the expunge() function to actually delete the message. • Once the deletion is completed, the reordered list of emails is displayed to the user.
Delete Code $conn = imap_open ("{mailhost.fit.edu}INBOX", $user, $pass); imap_delete($conn, $uid, FT_UID); imap_expunge($conn); imap_close($conn);
Logout setcookie('auth',null,-1,"/",".fit.edu"); header("Location: index.php");