📄 ajaxmail.inc.php
字号:
<?php
class JSONObject {}
class AjaxMailAttachmentHeader {
var $id;
var $filename;
function AjaxMailAttachmentHeader($id, $filename, $size) {
$this->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;
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -