id = $id; $this->filename = $filename; $this->size = "".(round($size/1024*100)/100)." KB"; } } class AjaxMailAttachment { var $contentType; var $filename; var $size; var $data; function AjaxMailAttachment($contentType, $filename, $size, $data) { $this->contentType = $contentType; $this->filename = $filename; $this->size = $size; $this->data = $data; } } class AjaxMailMessage { var $to; var $from; var $cc; var $bcc; var $subject; var $message; var $date; var $attachments; var $unread; var $hasAttachments; var $id; function AjaxMailMessage() { $this->attachments = array(); } } class AjaxMailbox { function connect() { $conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die("Could not connect : " . mysql_error()); mysql_select_db(DB_NAME); return $conn; } function disconnect($conn) { mysql_close($conn); } function getFolderPage($folder, $page) { //first make sure you have the most recent mail info $this->checkMail(); //connect to the database $conn = $this->connect(); //first get the total number of e-mails in the folder $query = "select count(MessageId) as count from AjaxMailMessages"; $query .= " where FolderId=$folder"; $result = mysql_query($query, $conn); $row = mysql_fetch_assoc($result); //assign basic mail info $info = new JSONObject(); $info->messageCount = (int) $row["count"]; $info->page = $page; $info->pageCount = (int) ceil($info->messageCount/MESSAGES_PER_PAGE); $info->folder = $folder; //calculate first and last message to retrieve $firstMessageNum = ($page-1) * MESSAGES_PER_PAGE; //add info to the mail info $info->firstMessage = $firstMessageNum+1; //DB is 0-based, people like to see it 1-based :) $info->messages = array(); $info->unreadCount = $this->getUnreadCount($conn); //get the message information $query = "select * from AjaxMailMessages where FolderId=$folder"; $query .= " order by date desc limit $firstMessageNum, "; $query .= MESSAGES_PER_PAGE; $result = mysql_query($query, $conn); if (!$result) { $info->error = mysql_error($conn); } else { //get the data and assign into new message info while ($row = mysql_fetch_assoc($result)) { $message = new JSONObject(); $message->id = $row['MessageId']; $message->from = $row['From']; $message->subject = $row['Subject']; $message->date = date("M j Y", intval($row["Date"])); $message->hasAttachments = ($row['HasAttachments']==1); $message->unread = ($row['Unread']==1); $info->messages[] = $message; } } //close the database connection $this->disconnect($conn); //return the information return $info; } function getUnreadCount($conn) { $query = "select count(MessageId) as UnreadCount from AjaxMailMessages where FolderId=1 and Unread=1"; $result = mysql_query($query, $conn); $row = mysql_fetch_assoc($result); return intval($row["UnreadCount"]); } function getMessage($messageId) { $conn = $this->connect(); //get the information $query = "select MessageId, `To`, `From`, CC, BCC, Subject, Date, "; $query .= "Message, HasAttachments, Unread from AjaxMailMessages where"; $query .= " MessageId=$messageId"; $result = mysql_query($query, $conn); $row = mysql_fetch_assoc($result); //assign information to message object $message = new AjaxMailMessage(); $message->id = $row["MessageId"]; $message->to = $row["To"]; $message->cc = $row["CC"]; $message->bcc = $row["BCC"]; $message->unread = ($row["Unread"]==1); $message->from = $row["From"]; $message->subject = $row["Subject"]; $message->date = date("M j, Y h:i A", intval($row["Date"])); $message->hasAttachments = ($row["HasAttachments"]==1); $message->unreadCount = $this->getUnreadCount($conn); $message->message = $row["Message"]; //if there are attachments, get them if ($message->hasAttachments) { $query = "select AttachmentId, Filename, Size from AjaxMailAttachments where MessageId=$messageId"; $result = mysql_query($query, $conn); while ($row = mysql_fetch_assoc($result)) { $message->attachments[] = new AjaxMailAttachmentHeader($row["AttachmentId"], $row["Filename"], (int) $row["Size"]); } } $this->disconnect($conn); return $message; } function getAttachment($attachmentId) { $conn = $this->connect(); $query = "select * from AjaxMailAttachments where "; $query .= " AttachmentId=$attachmentId"; $result = mysql_query($query, $conn); $row = mysql_fetch_assoc($result); $this->disconnect($conn); return new AjaxMailAttachment($row["ContentType"], $row["Filename"], $row["Size"], $row["Data"]); } function clearAll() { $conn = $this->connect(); $query = "truncate table AjaxMailMessages"; mysql_query($query,$conn); $query = "truncate table AjaxMailAttachments"; mysql_query($query,$conn); $this->disconnect($conn); } function deleteMessage($messageId) { $conn = $this->connect(); $query = "update AjaxMailMessages set FolderId=2 where "; $query .= " MessageId=$messageId"; mysql_query($query,$conn); $this->disconnect($conn); } function emptyTrash() { $conn = $this->connect(); //delete any attachments $query = "delete from AjaxMailAttachments where MessageId in (select MessageId from AjaxMailMessages where FolderId=2)"; mysql_query($query, $conn); //delete the e-mails $query = "delete from AjaxMailMessages where FolderId=2"; mysql_query($query,$conn); $this->disconnect($conn); } function markMessageAsRead($messageId) { $conn = $this->connect(); $query = "update AjaxMailMessages set Unread=0 where MessageId=$messageId"; mysql_query($query,$conn); $this->disconnect($conn); } function markMessageAsUnread($messageId) { $conn = $this->connect(); $query = "update AjaxMailMessages set Unread=1 where MessageId=$messageId"; mysql_query($query,$conn); $this->disconnect($conn); } function restoreMessage($messageId) { $conn = $this->connect(); $query = "update AjaxMailMessages set FolderId=1 where MessageId=$messageId"; mysql_query($query,$conn); $this->disconnect($conn); } function checkMail() { $pop = new Pop3(POP3_SERVER, POP3_USER, POP3_PASSWORD); if ($pop->login()) { if ($pop->mailCount > 0) { $conn = $this->connect(); $pop->getEmails(); foreach ($pop->messages as $message) { $query = "insert into AjaxMailMessages(`To`,CC,BCC,`From`,"; $query .= "Subject,`Date`,Message,HasAttachments,FolderId,Unread)"; $query .= " values('%s','%s','%s','%s','%s',%s,'%s'," .$message->hasAttachments.",1,1)"; $query = sprintf($query, (addslashes($message->to)), (addslashes($message->cc)), (addslashes($message->bcc)), (addslashes($message->from)), (addslashes($message->subject)), $message->unixTimeStamp, (addslashes($message->getTextMessage())) ); $result = mysql_query($query, $conn); if ($message->hasAttachments) { $messageId = mysql_insert_id($conn); foreach ($message->attachments as $attachment) { $query = "insert into AjaxMailAttachments(MessageId,"; $query .= "Filename, ContentType, Size, Data)"; $query .= "values($messageId, '%s', '%s', '%s', '%s')"; $query = sprintf($query, addslashes($attachment->fileName), $attachment->contentType, strlen($attachment->data), addslashes($attachment->data)); mysql_query($query, $conn); } } } $this->disconnect($conn); } $pop->logoff(); } } function sendMail($to, $subject, $message, $cc="") { $mailer = new PHPMailer(); //Add To's $tos = preg_split ("/;|,/", $to); foreach ($tos as $to) { preg_match("/(.*?)?/i", $to, $matches); $mailer->AddAddress($matches[2],str_replace('"','',$matches[1])); } //Add the CCs if ($cc != "") { $ccs = preg_split ("/;|,/", $cc); foreach ($ccs as $cc) { preg_match("/(.*?)?/i", $cc, $matches); $mailer->AddCC($matches[2],str_replace('"','',$matches[1])); } } //set other information $mailer->From = EMAIL_FROM_ADDRESS; $mailer->FromName = EMAIL_FROM_NAME; $mailer->Subject = $subject; $mailer->Body = $message; $mailer->SMTPAuth = SMTP_DO_AUTHORIZATION; $mailer->Username = SMTP_USER; $mailer->Password = SMTP_PASSWORD; $mailer->Host = SMTP_SERVER; $mailer->Mailer = "smtp"; $mailer->Send(); $mailer->SmtpClose(); $response = new JSONObject(); if ($mailer->IsError()) { $response->error = true; $response->message = $mailer->ErrorInfo; } else { $response->error = false; $response->message = "Your message has been sent."; } return $response; } } ?>