First commit
This commit is contained in:
150
uc_client/model/mail.php
Normal file
150
uc_client/model/mail.php
Normal file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
[UCenter] (C)2001-2099 Comsenz Inc.
|
||||
This is NOT a freeware, use is subject to license terms
|
||||
|
||||
$Id: mail.php 1139 2012-05-08 09:02:11Z liulanbo $
|
||||
*/
|
||||
|
||||
!defined('IN_UC') && exit('Access Denied');
|
||||
|
||||
define('UC_MAIL_REPEAT', 5);
|
||||
|
||||
class mailmodel {
|
||||
|
||||
var $db;
|
||||
var $base;
|
||||
var $apps;
|
||||
|
||||
function __construct(&$base) {
|
||||
$this->mailmodel($base);
|
||||
}
|
||||
|
||||
function mailmodel(&$base) {
|
||||
$this->base = $base;
|
||||
$this->db = $base->db;
|
||||
$this->apps = &$this->base->cache['apps'];
|
||||
}
|
||||
|
||||
function get_total_num() {
|
||||
$data = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."mailqueue");
|
||||
return $data;
|
||||
}
|
||||
|
||||
function get_list($page, $ppp, $totalnum) {
|
||||
$start = $this->base->page_get_start($page, $ppp, $totalnum);
|
||||
$data = $this->db->fetch_all("SELECT m.*, u.username, u.email FROM ".UC_DBTABLEPRE."mailqueue m LEFT JOIN ".UC_DBTABLEPRE."members u ON m.touid=u.uid ORDER BY dateline DESC LIMIT $start, $ppp");
|
||||
foreach((array)$data as $k => $v) {
|
||||
$data[$k]['subject'] = dhtmlspecialchars($v['subject']);
|
||||
$data[$k]['tomail'] = empty($v['tomail']) ? $v['email'] : $v['tomail'];
|
||||
$data[$k]['dateline'] = $v['dateline'] ? $this->base->date($data[$k]['dateline']) : '';
|
||||
$data[$k]['appname'] = $this->base->cache['apps'][$v['appid']]['name'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
function delete_mail($ids) {
|
||||
$ids = $this->base->implode($ids);
|
||||
$this->db->query("DELETE FROM ".UC_DBTABLEPRE."mailqueue WHERE mailid IN ($ids)");
|
||||
return $this->db->affected_rows();
|
||||
}
|
||||
|
||||
function add($mail) {
|
||||
if($mail['level']) {
|
||||
$sql = "INSERT INTO ".UC_DBTABLEPRE."mailqueue (touid, tomail, subject, message, frommail, charset, htmlon, level, dateline, failures, appid) VALUES ";
|
||||
$values_arr = array();
|
||||
foreach($mail['uids'] as $uid) {
|
||||
if(empty($uid)) continue;
|
||||
$uid = intval($uid);
|
||||
$values_arr[] = "('$uid', '', '{$mail['subject']}', '{$mail['message']}', '{$mail['frommail']}', '{$mail['charset']}', '{$mail['htmlon']}', '{$mail['level']}', '{$mail['dateline']}', '0', '{$mail['appid']}')";
|
||||
}
|
||||
foreach($mail['emails'] as $email) {
|
||||
if(empty($email)) continue;
|
||||
$values_arr[] = "('', '$email', '{$mail['subject']}', '{$mail['message']}', '{$mail['frommail']}', '{$mail['charset']}', '{$mail['htmlon']}', '{$mail['level']}', '{$mail['dateline']}', '0', '{$mail['appid']}')";
|
||||
}
|
||||
$sql .= implode(',', $values_arr);
|
||||
$this->db->query($sql);
|
||||
$insert_id = $this->db->insert_id();
|
||||
$insert_id && $this->db->query("REPLACE INTO ".UC_DBTABLEPRE."vars SET name='mailexists', value='1'");
|
||||
return $insert_id;
|
||||
} else {
|
||||
$mail['email_to'] = array();
|
||||
$uids = 0;
|
||||
foreach($mail['uids'] as $uid) {
|
||||
if(empty($uid)) continue;
|
||||
$uids .= ','.intval($uid);
|
||||
}
|
||||
$users = $this->db->fetch_all("SELECT uid, username, email FROM ".UC_DBTABLEPRE."members WHERE uid IN ($uids)");
|
||||
foreach($users as $v) {
|
||||
$mail['email_to'][] = $v['username'].'<'.$v['email'].'>';
|
||||
}
|
||||
foreach($mail['emails'] as $email) {
|
||||
if(empty($email)) continue;
|
||||
$mail['email_to'][] = $email;
|
||||
}
|
||||
$mail['message'] = str_replace('\"', '"', $mail['message']);
|
||||
$mail['email_to'] = implode(',', $mail['email_to']);
|
||||
return $this->send_one_mail($mail);
|
||||
}
|
||||
}
|
||||
|
||||
function send() {
|
||||
register_shutdown_function(array($this, '_send'));
|
||||
}
|
||||
|
||||
function _send() {
|
||||
|
||||
$mail = $this->_get_mail();
|
||||
if(empty($mail)) {
|
||||
$this->db->query("REPLACE INTO ".UC_DBTABLEPRE."vars SET name='mailexists', value='0'");
|
||||
return NULL;
|
||||
} else {
|
||||
$mail['email_to'] = $mail['tomail'] ? $mail['tomail'] : $mail['username'].'<'.$mail['email'].'>';
|
||||
if($this->send_one_mail($mail)) {
|
||||
$this->_delete_one_mail($mail['mailid']);
|
||||
return true;
|
||||
} else {
|
||||
$this->_update_failures($mail['mailid']);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function send_by_id($mailid) {
|
||||
if ($this->send_one_mail($this->_get_mail_by_id($mailid))) {
|
||||
$this->_delete_one_mail($mailid);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function send_one_mail($mail) {
|
||||
if(empty($mail)) return;
|
||||
$mail['email_to'] = $mail['email_to'] ? $mail['email_to'] : $mail['username'].'<'.$mail['email'].'>';
|
||||
$mail_setting = $this->base->settings;
|
||||
return include UC_ROOT.'lib/sendmail.inc.php';
|
||||
}
|
||||
|
||||
function _get_mail() {
|
||||
$data = $this->db->fetch_first("SELECT m.*, u.username, u.email FROM ".UC_DBTABLEPRE."mailqueue m LEFT JOIN ".UC_DBTABLEPRE."members u ON m.touid=u.uid WHERE failures<'".UC_MAIL_REPEAT."' ORDER BY level DESC, mailid ASC LIMIT 1");
|
||||
return $data;
|
||||
}
|
||||
|
||||
function _get_mail_by_id($mailid) {
|
||||
$data = $this->db->fetch_first("SELECT m.*, u.username, u.email FROM ".UC_DBTABLEPRE."mailqueue m LEFT JOIN ".UC_DBTABLEPRE."members u ON m.touid=u.uid WHERE mailid='$mailid'");
|
||||
return $data;
|
||||
}
|
||||
|
||||
function _delete_one_mail($mailid) {
|
||||
$mailid = intval($mailid);
|
||||
return $this->db->query("DELETE FROM ".UC_DBTABLEPRE."mailqueue WHERE mailid='$mailid'");
|
||||
}
|
||||
|
||||
function _update_failures($mailid) {
|
||||
$mailid = intval($mailid);
|
||||
return $this->db->query("UPDATE ".UC_DBTABLEPRE."mailqueue SET failures=failures+1 WHERE mailid='$mailid'");
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Reference in New Issue
Block a user