📄 email.class.inc.php
字号:
// Output
echo $out->finish_xml();
exit;
}
// -----------------------------------------------------------------------------
/**
* Get e-mail address
*
* @access public
*/
function get_address($set = false)
{
$data = array();
t12l_module::call_module('frontend_use_functions', $data, $t12l['module_additional']);
if ($t12l['module_additional']['allow_use_functions'] == 'N') {
return false;
}
// Dispose of old e-mail
if (!t12l_gpc_vars('a') and t12l_session::get('address_timestamp') < (t12l_time::current_timestamp() - $this->lifetime)) {
if ($this->destroy_address()) {
if ($address = $this->new_address($set)) {
$address['time_left'] = $this->lifetime;
return $address;
} else {
return false;
}
}
}
// Get address from existing session
if (!t12l_gpc_vars('a') and $address = t12l_session::get()) {
$address['time_left'] = $this->lifetime - (t12l_time::current_timestamp() - $address['address_timestamp']);
return $address;
}
// Create new e-mail
if (t12l_gpc_vars('a')) {
$set = true;
}
if ($address = $this->new_address($set)) {
$address['time_left'] = $this->lifetime;
return $address;
} else {
return false;
}
}
// -----------------------------------------------------------------------------
/**
* Reset time
*
* @access public
*/
function reset_time()
{
// Create new address
$address_email = t12l_session::get('address_email');
$address_id = md5($address_email);
$address_timestamp = t12l_time::current_timestamp();
t12l_session::add(array('address_timestamp' => $address_timestamp));
// Update timestamp in e-mail table
$data = array('mail_timestamp' => $address_timestamp);
$where = " mail_address_id = ? ";
$where_data = array($address_id);
if ($res = t12l_database::update('mail', $data, $where, $where_data)) {
// Update timestamp in address table
$data = array('address_timestamp' => $address_timestamp);
$where = " address_id = ? AND address_session_id = ?";
$where_data = array($address_id, session_id());
if ($res = t12l_database::update('address', $data, $where, $where_data)) {
return true;
}
}
}
// -----------------------------------------------------------------------------
/**
* Create new address
*
* @access public
*/
function new_address($set = false)
{
global $t12l;
if ($set == true and isset($t12l['_post']['setemailaddress'])) {
$address_email = $t12l['_post']['setemailaddress'] . '@' . $t12l['email_address_host_name'];
} elseif ($set == true and t12l_gpc_vars('a')) {
$address_email = t12l_gpc_vars('a');
} else {
// Create new address
$address_email = $this->create_address(8);
}
$address_id = md5($address_email);
$address_timestamp = t12l_time::current_timestamp();
// Create new entry
$data = array( 'address_id' => $address_id,
'address_email' => $address_email,
'address_timestamp' => $address_timestamp,
'address_ip' => @$_SERVER['REMOTE_ADDR'],
'address_session_id' => session_id(),
);
// Write address to database
if ($res = t12l_database::insert('address', $data)) {
// Write address to session
$session = array( 'address_id' => $address_id,
'address_email' => $address_email,
'address_timestamp' => $address_timestamp,
);
t12l_session::add($session);
// Write address statistics
t12l_setting::increase('created_addresses');
return $data;
}
}
// -----------------------------------------------------------------------------
/**
* Create e-mail
*
*/
function create_address($length, $run = 1)
{
global $t12l;
require_once 'Text/Password.php';
$email_address = Text_Password::create($length) . '@' . $t12l['email_address_host_name'];
$address_id = md5($email_address);
$sql = "SELECT address_id FROM " . T12L_ADDRESS_TABLE . "
WHERE address_id = ? ";
if (!$res = t12l_database::query($sql, array($address_id))) {
return $email_address;
}
if ($res->numRows() > 0) {
if ($run >= $this->runs) {
$run = 0;
$length++;
if ($length >= $this->maxlength) {
t12l_system_debug::add_message('Create Address', 'Too Much Runs', 'error');
return false;
}
}
$email_address = $this->create_address($length, ++$run);
}
return $email_address;
}
//------------------------------------------------------------------------------
/**
* Dispose of e-mail
*
*/
function destroy_address()
{
$session = array( 'address_id' => '',
'address_email' => '',
'address_timestamp' => '',
);
t12l_session::add($session);
return true;
}
//------------------------------------------------------------------------------
/**
* Trigger download of e-mails
*
*/
function trigger_mail_download()
{
global $t12l;
@ini_set('max_execution_time', $this->runtime);
if (!function_exists('imap_open')
or $t12l['alternative_mail_download'] == true) {
require_once 'mailbox.class.inc.php';
} else {
require_once 'mailboximap.class.inc.php';
}
for ($i = 1; $i <= $this->download_connection_num; $i++)
{
$downloaded_emails = $this->mail_download();
if ($downloaded_emails == false
or $downloaded_emails <= 0) {
t12l_system_debug::add_message('Trigger Mail Download', 'Number of connections: ' . $i, 'debug');
return false;
}
}
t12l_system_debug::add_message('Trigger Mail Download', 'Some mails remaining in mailbox', 'debug');
}
//------------------------------------------------------------------------------
/**
* Download e-mails and write content to database
*
*/
function mail_download()
{
global $t12l;
$mailbox_add_path = '';
$mailbox_add_path_ssl = '';
if ($t12l['non_validate_command'] == 'Y') {
$mailbox_add_path .= '/novalidate-cert';
$mailbox_add_path_ssl .= '/novalidate-cert';
}
if (!function_exists('imap_open')
or $t12l['alternative_mail_download'] == true) {
$mail = new t12l_mailbox($this->delete_emails);
} else {
$mail = new t12l_mailboximap();
}
// Connect to mailbox
// Imap setting
$mailbox_path = 'pop3' . $mailbox_add_path;
// Both
$mailbox_port = $t12l['mailbox_port'];
// pop3 class
$mailbox_tls = 0;
if ($t12l['mailbox_connect_ssl'] == 'Y') {
// Imap setting
$mailbox_path = 'pop3/ssl' . $mailbox_add_path_ssl;
// Both
$mailbox_port = $t12l['mailbox_port_ssl'];
// pop3 class
$mailbox_tls = 1;
}
$mailbox = array( 'hostname' => $t12l['mailbox_hostname'],
'path' => $mailbox_path,
'port' => $mailbox_port,
'user' => $t12l['mailbox_username'],
'password' => $t12l['mailbox_password'],
'tls' => $mailbox_tls,
);
if (!$mail->open($mailbox)) {
return false;
}
// Number of messages in mailbox
$number = 0;
$mail->number($number);
if ($number <= 0) {
$mail->close();
return false;
}
t12l_system_debug::add_message('Mailbox Status', $number . ' mail(s) in mailbox.', 'debug');
$email_number = $this->download_email_num;
if ($number < $this->download_email_num) {
$email_number = $number;
}
// Check To: headers
for ($i = 1; $i <= $email_number; $i++)
{
$message = $mail->fetch_message($i);
$mail->mime_decode($i);
if (!$to = $mail->get_header($i, 'to')) {
// Delete e-mail
$mail->delete_message($i);
continue;
}
$to = explode(',', $to);
$num = sizeof($to);
for ($t = 0; $t < $num; $t++)
{
$mail_address = $to[$t];
if (strpos($mail_address, '<') !== false) {
$mail_address = substr($mail_address, strpos($mail_address, '<') + 1);
}
if (strpos($mail_address, '>') !== false) {
$mail_address = substr($mail_address, 0, strpos($mail_address, '>'));
}
$mail_address = trim($mail_address);
$mail_host = substr($mail_address, strpos($mail_address, '@') + 1);
if ($mail_host != $t12l['email_address_host_name']) {
// Delete e-mail
$mail->delete_message($i);
continue;
}
// Count number of received e-mails
t12l_setting::increase('received_emails');
// Check address in database
$address = $mail_address;
$address_id = md5($address);
$address_timestamp = t12l_time::current_timestamp() - $this->lifetime;
$sql = "SELECT address_id
FROM " . T12L_ADDRESS_TABLE . "
WHERE address_id = ?
AND address_timestamp > ?";
if (!$res = t12l_database::query($sql, array($address_id, $address_timestamp))) {
return false;
}
if ($res->numRows() > 0) {
t12l_system_debug::add_message('Mail Status', 'Mail is valid: ' . $address, 'debug');
$subject = $mail->get_header($i, 'subject');
$body = $mail->get_body($i);
$from = $mail->get_header($i, 'from');
$from = $mail->get_header($i, 'from');
$charset = $mail->get_character_set($i);
if ($this->insert_mail($address, $from, $subject, $body, $charset)) {
// Delete e-mail
$mail->delete_message($i);
}
} else {
// Delete e-mail
$mail->delete_message($i);
t12l_system_debug::add_message('Mail Status', 'Mail is NOT valid: ' . $address, 'debug');
// Count number of expired e-mails
t12l_setting::increase('expired_emails');
}
}
}
if ($this->delete_emails == true) {
$mail->perform_delete();
}
$mail->close();
// Return number of mails in mailbox
return $number;
}
//------------------------------------------------------------------------------
/**
* Write mail data to database
*
*/
function insert_mail($address, $from, $subject, $body, $charset)
{
// Write into comment table
if (!$mail_id = t12l_database::next_id('mail')) {
return false;
}
$mail_data = array( 'mail_id' => $mail_id,
'mail_address_id' => md5($address),
'mail_from' => $from,
'mail_subject' => $subject,
'mail_excerpt' => substr(strip_tags($body), 0, $this->excerpt_length),
'mail_body' => $body,
'mail_character_set'=> $charset,
'mail_timestamp' => t12l_time::current_timestamp(),
);
if ($res = t12l_database::insert('mail', $mail_data)) {
return true;
}
}
//------------------------------------------------------------------------------
/**
* Get mail details from database
*
* @access public
*/
function get_mail($mail)
{
global $t12l;
if (!is_numeric($mail)) {
return false;
}
if ($t12l['public_mails'] == 'N' and !t12l_session::get('address_id')) {
return false;
}
$sql = '';
// Private e-mails - only the user that created the e-mail address
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -