diff options
author | Patrick Davison <snapwilliam@gmail.com> | 2013-01-11 22:08:21 -0800 |
---|---|---|
committer | Patrick Davison <snapwilliam@gmail.com> | 2013-01-11 22:08:21 -0800 |
commit | 3252e8cedcc5c3a2de5d67a8c3ef121543afe504 (patch) | |
tree | d672264b0cbf0ec5f93150144e3e15627f7aa7cc /includes/emails.php | |
parent | 0c5e8f740fcf610158e610899db4264d5259f5e0 (diff) | |
download | pathery-3252e8cedcc5c3a2de5d67a8c3ef121543afe504.tar.xz |
QueueEmail function
Diffstat (limited to 'includes/emails.php')
-rw-r--r-- | includes/emails.php | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/includes/emails.php b/includes/emails.php new file mode 100644 index 0000000..84f657c --- /dev/null +++ b/includes/emails.php @@ -0,0 +1,148 @@ +<?
+/*
+ * Email methods; QueueEmail and SendQueuedEmail
+*/
+
+//Returns false if nothing is sent.
+function SendQueuedEmail() {
+ //Delay by x seconds per email:
+ $delay = 10;
+ require('sqli.php');
+
+ $lock = acquireEmailLock();
+ try
+ {
+ //Have we recently sent an email?
+ //This is phrased so that- if the setting doesn't exist; it wont send.
+ $res = $mysqli->query("SELECT `value` FROM `settings`
+ WHERE `name` = 'Email_Last_Sent' AND
+ `value` < (UNIX_TIMESTAMP(NOW()) - $delay)");
+ if ($res->fetch_array() == NULL) {
+ releaseEmailLock($lock);
+ return false;
+ }
+
+ //echo "<br> Checking Queue";
+ //Check the Queue
+ $res = $mysqli->query("SELECT `emailID`
+ FROM `emailQueue`
+ ORDER BY `priority` DESC
+ LIMIT 1");
+ $response = $res->fetch_array();
+ if ($response == NULL) {
+ releaseEmailLock($lock);
+ return false;
+ }
+
+ $emailID = $response['emailID'];
+ //echo "<br> Email found $emailID";
+
+ $res = $mysqli->query("SELECT
+ `ID`, `fromUserID`, `to`, `subject`, `body`
+ FROM `emails` WHERE `ID` = '$emailID'
+ LIMIT 1");
+ $response = $res->fetch_array();
+ if ($response == NULL) {
+ releaseEmailLock($lock);
+ return false;
+ }
+
+ //echo "<br> Email Data pulled; Deleting::";
+
+ $to = $response['to'];
+ $subject = $response['subject'];
+ $body = $response['body'];
+
+
+ //I declare this letter sent!
+ $res = $mysqli->query("DELETE FROM `emailQueue` WHERE `ID` = $emailID");
+ $res = $mysqli->query("UPDATE `settings` SET `value` = UNIX_TIMESTAMP(NOW()) WHERE `name` = 'Email_Last_Sent'");
+ $res = $mysqli->query("UPDATE `emails` SET `dateSent` = NOW() WHERE `ID` = $emailID");
+
+ //echo "<br> Deletes Complete";
+ } catch (Exception $exc) { /* Ignore... :| */ }
+ //Release Lock
+ releaseEmailLock($lock);
+
+ //TODO !!
+ echo "<br>I DIDN'T SEND THIS: ($body, $subject, $to)<br>";
+ //SendEmail($body, $subject, $to);
+
+ return true;
+}
+
+function QueueEmail($fromUserID, $to, $subject, $body, $priority = 100, $fromServer = false) {
+ require('sqli.php');
+
+ //TODO !! allow a way for users to refer-friends via email. Here.
+ if ($fromServer == false) {
+ return false;
+ //Email tracker is not added !!
+ $res = $mysqli->query("SELECT `fromUserID` FROM emailTracker WHERE `fromUserID` = '$fromUserID'");
+ // AND dateSubmited
+ var_dump($res->fetch_all());
+ }
+
+ $stmt = $mysqli->prepare("INSERT INTO `emails`
+ (`fromUserID`, `to`, `subject`, `body`)
+ VALUES (?, ?, ?, ?)");
+ $stmt->bind_param('isss', $fromUserID, $to, $subject, $body);
+ $stmt->execute();
+
+ $emailID = $stmt->insert_id;
+
+ $stmt = $mysqli->prepare("INSERT INTO `emailQueue`
+ (`emailID`, `priority`)
+ VALUES (?, ?)");
+ $stmt->bind_param('ii', $emailID, $priority);
+ $stmt->execute();
+
+ //TODO insert into tracker table
+}
+
+function SendEmail($body, $subject = "Pathery", $to = 'snapwilliam@gmail.com', $fromemail = "snap@pathery.com") {
+ $mycompany = "Pathery";
+ $replyemail = $fromemail;
+
+ # -=-=-=- MIME BOUNDARY
+ $mime_boundary = "----$mycompany----".md5(time());
+ # -=-=-=- MAIL HEADERS
+ $headers = "From: $mycompany <$fromemail>\n";
+ $headers .= "Reply-To: $mycompany <$replyemail>\n";
+ $headers .= "MIME-Version: 1.0\n";
+ $headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";
+
+ # -=-=-=- TEXT EMAIL PART
+ $message = "--$mime_boundary\n";
+ $message .= "Content-Type: text/plain; charset=UTF-8\n";
+ $message .= "Content-Transfer-Encoding: 8bit\n\n";
+
+ $message .= "$body\n";
+
+ # -=-=-=- HTML EMAIL PART
+ //None
+ # -=-=-=- FINAL BOUNDARY
+ $message .= "--$mime_boundary--\n\n";
+ # -=-=-=- SEND MAIL
+ $mail_sent = @mail( $to, $subject, $message, $headers );
+ Return $mail_sent;
+}
+
+
+/**
+ * a file is used to prevent race conditions
+ */
+function acquireEmailLock() {
+ $fileHandle = fopen(FILE_EMAIL_LOCK, 'a+');
+ flock($fileHandle, LOCK_EX);
+ return $fileHandle;
+}
+/**
+ * Releases the lock acquired from acquireEmailLock
+ */
+function releaseEmailLock($fileHandle) {
+ if($fileHandle)
+ flock($fileHandle, LOCK_UN);
+}
+
+?>
\ No newline at end of file |