Normal attığım toplu mailler inboxa düşüyor.Ancak üyelere giden aktivasyon mailleri junka düşüyor. Bu sorunun bir çözümü varmı?
Vbulletin 3.6.3 versiyon.
Aktivasyon mailinin junka düşmesi.
14
●1.223
- 13-10-2008, 15:17:26Pardon hocam ben anlamamışım.buyur.
<?php /*======================================================================*\ || #################################################################### || || # vBulletin 3.6.3 - Licence Number xxxxxxxxxx || # ---------------------------------------------------------------- # || || # All PHP code in this file is ©2000-2006 Jelsoft Enterprises Ltd. # || || # This file may not be redistributed in whole or significant part. # || || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || || # http://www.vbulletin.com | http://www.vbulletin.com/liceNse.html # || || #################################################################### || \*======================================================================*/ define('MAIL_INCLUDED', true); // Attempt to load XML extension if we don't have the XML functions // already loaded. It is needed for utf8_encode() if (!function_exists('xml_set_element_handler')) { $extension_dir = ini_get('extension_dir'); if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) { $extension_file = 'php_xml.dll'; } else { $extension_file = 'xml.so'; } if ($extension_dir AND file_exists($extension_dir . '/' . $extension_file)) { ini_set('display_errors', true); dl($extension_file); } } /** * Standard Mail Sending Object * * This class sends email from vBulletin using the PHP mail() function * * @package vBulletin * @version $Revision: 1.30 $ * @date $Date: 2006/07/26 11:14:36 $ * @copyright http://www.vbulletin.com/license.html * */ class vB_Mail { /** * Destination address * * @var string */ var $toemail = ''; /** * Subject * * @var string */ var $subject = ''; /** * Message * * @var string */ var $message = ''; /** * All headers to be sent with the message * * @var string */ var $headers = ''; /** * Sender email * * @var string */ var $fromemail = ''; /** * Line delimiter * * @var string */ var $delimiter = "\r\n"; /** * Registry object for any options we need * * @var vB_Registry */ var $registry = null; /** * Switch to enable/disable debugging. When enabled, warnings are not suppressed * * @var boolean */ var $debug = false; /** * Message to log if logging is enabled * * @var string */ var $log = ''; /** * Constructor * * @param vB_Registry vBulletin registry object */ function vB_Mail(&$registry) { if (is_object($registry)) { $this->registry =& $registry; } else { trigger_error('Registry object is not an object', E_USER_ERROR); } $sendmail_path = @ini_get('sendmail_path'); if (!$sendmail_path OR $this->registry->options['use_smtp'] OR defined('FORCE_MAIL_CRLF')) { // no sendmail, so we're using SMTP or a server that lines CRLF to send mail // the use_smtp part is for the MailQueue extension $this->delimiter = "\r\n"; } else { $this->delimiter = "\n"; } } /** * Starts the process of sending an email - preps it so it's fully ready to send. * Call send() to actually send it. * * @param string Destination email address * @param string Email message subject * @param string Email message body * @param string Optional name/email to use in 'From' header * @param string Additional headers * @param string Username of person sending the email * * @param boolean True on success, false on failure */ function start($toemail, $subject, $message, $from = '', $uheaders = '', $username = '') { $toemail = $this->fetch_first_line($toemail); if (empty($toemail)) { return false; } $delimiter =& $this->delimiter; $vbulletin =& $this->registry; $toemail = unhtmlspecialchars($toemail); $subject = $this->fetch_first_line($subject); $message = preg_replace("#(\r\n|\r|\n)#s", $delimiter, trim($message)); global $stylevar; if ((strtolower($stylevar['charset']) == 'iso-8859-1' OR $stylevar['charset'] == '') AND preg_match('/&[a-z0-9#]+;/i', $message)) { $message = utf8_encode($message); $subject = utf8_encode($subject); $username = utf8_encode($username); $encoding = 'UTF-8'; $unicode_decode = true; } else { // we know nothing about the message's encoding in relation to UTF-8, // so we can't modify the message at all; just set the encoding $encoding = $stylevar['charset']; $unicode_decode = false; } // theses lines may need to call convert_int_to_utf8 directly $message = unhtmlspecialchars($message, $unicode_decode); $subject = $this->encode_email_header(unhtmlspecialchars($subject, $unicode_decode), $encoding, false, false); $from = $this->fetch_first_line($from); if (empty($from)) { global $vbphrase; if (isset($vbphrase['x_mailer'])) { $mailfromname = construct_phrase($this->fetch_first_line($vbphrase['x_mailer']), $vbulletin->options['bbtitle']); } else { $mailfromname = $vbulletin->options['bbtitle']; } if ($unicode_decode == true) { $mailfromname = utf8_encode($mailfromname); } $mailfromname = $this->encode_email_header(unhtmlspecialchars($mailfromname, $unicode_decode), $encoding); $fromemail = $vbulletin->options['webmasteremail']; $headers .= "From: $mailfromname <" . $vbulletin->options['webmasteremail'] . '>' . $delimiter; $headers .= 'Return-Path: ' . $vbulletin->options['webmasteremail'] . $delimiter; $headers .= 'Auto-Submitted: auto-generated' . $delimiter; } else { if ($username) { $mailfromname = "$username @ " . $vbulletin->options['bbtitle']; } else { $mailfromname = $from; } if ($unicode_decode == true) { $mailfromname = utf8_encode($mailfromname); } $mailfromname = $this->encode_email_header(unhtmlspecialchars($mailfromname, $unicode_decode), $encoding); $fromemail = $from; $headers .= "From: $mailfromname <$from>" . $delimiter; $headers .= 'Return-Path: ' . $from . $delimiter; } if ($_SERVER['HTTP_HOST'] OR $_ENV['HTTP_HOST']) { $http_host = iif($_SERVER['HTTP_HOST'], $_SERVER['HTTP_HOST'], $_ENV['HTTP_HOST']); } else if ($_SERVER['SERVER_NAME'] OR $_ENV['SERVER_NAME']) { $http_host = iif($_SERVER['SERVER_NAME'], $_SERVER['SERVER_NAME'], $_ENV['SERVER_NAME']); } $http_host = trim($http_host); if (!$http_host) { $http_host = substr(md5($message), 6, 12) . '.vb_unknown.unknown'; } $msgid = '<' . gmdate('YmdHs') . '.' . substr(md5($message . microtime()), 0, 6) . vbrand(100000, 999999) . '@' . $http_host . '>'; $headers .= 'Message-ID: ' . $msgid . $delimiter; $headers .= preg_replace("#(\r\n|\r|\n)#s", $delimiter, $uheaders); unset($uheaders); $headers .= 'MIME-Version: 1.0' . $delimiter; $headers .= 'Content-Type: text/plain' . iif($encoding, "; charset=\"$encoding\"") . $delimiter; $headers .= 'Content-Transfer-Encoding: 8bit' . $delimiter; $headers .= 'X-Priority: 3' . $delimiter; $headers .= 'X-Mailer: vBulletin Mail via PHP' . $delimiter; ($hook = vBulletinHook::fetch_hook('mail_send')) ? eval($hook) : false; $this->toemail = $toemail; $this->subject = $subject; $this->message = $message; $this->headers = $headers; $this->fromemail = $fromemail; return true; } /** * Set all the necessary variables for sending a message. * * @param string Destination address * @param string Subject * @param string Message * @param string All headers to be sent with the message * @param string Sender email */ function quick_set($toemail, $subject, $message, $headers, $fromemail) { $this->toemail = $toemail; $this->subject = $subject; $this->message = $message; $this->headers = $headers; $this->fromemail = $fromemail; } /** * Actually send the message. * * @return boolean True on success, false on failure */ function send() { if (!$this->toemail) { return false; } @ini_set('sendmail_from', $this->fromemail); if ($this->registry->options['needfromemail']) { $result = @mail($this->toemail, $this->subject, $this->message, trim($this->headers), '-f ' . $this->fromemail); } else { $result = @mail($this->toemail, $this->subject, $this->message, trim($this->headers)); } $this->log_email($result); return $result; } /** * Returns the first line of a string -- good to prevent errors when sending emails (above) * * @param string String to be trimmed * * @return string */ function fetch_first_line($text) { $text = preg_replace("/(\r\n|\r|\n)/s", "\r\n", trim($text)); $pos = strpos($text, "\r\n"); if ($pos !== false) { return substr($text, 0, $pos); } return $text; } /** * Encodes a mail header to be RFC 2047 compliant. This allows for support * of non-ASCII character sets via the quoted-printable encoding. * * @param string The text to encode * @param string The character set of the text * @param bool Whether to force encoding into quoted-printable even if not necessary * @param bool Whether to quote the string; applies only if encoding is not done * * @return string The encoded header */ function encode_email_header($text, $charset = 'utf-8', $force_encode = false, $quoted_string = true) { $text = trim($text); if (!$charset) { // don't know how to encode, so we can't return $text; } if ($force_encode == true) { $qp_encode = true; } else { $qp_encode = false; for ($i = 0; $i < strlen($text); $i++) { if (ord($text{$i}) > 127) { // we have a non ascii character $qp_encode = true; break; } } } if ($qp_encode == true) { // see rfc 2047; not including _ as allowed here, as I'm encoding spaces with it $outtext = preg_replace('#([^a-zA-Z0-9!*+\-/= ])#e', "'=' . strtoupper(dechex(ord(str_replace('\\\"', '\"', '\\1'))))", $text); $outtext = str_replace(' ', '_', $outtext); $outtext = "=?$charset?q?$outtext?="; return $outtext; } else { if ($quoted_string) { $text = str_replace(array('"', '(', ')'), array('\"', '\(', '\)'), $text); return "\"$text\""; } else { return preg_replace('#(\r\n|\n|\r)+#', ' ', $text); } } } /** * Sets the debug member * * @param boolean */ function set_debug($debug) { $this->debug = $debug; } /** * Logs email to file * */ function log_email($status = true) { if (!empty($this->registry->options['errorlogemail'])) { $errfile =& $this->registry->options['errorlogemail']; if ($this->registry->options['errorlogmaxsize'] != 0 AND $filesize = @filesize("$errfile.log") AND $filesize >= $this->registry->options['errorlogmaxsize']) { @copy("$errfile.log", $errfile . TIMENOW . '.log'); @unlink("$errfile.log"); } $timenow = date('r', TIMENOW); $is_admin = ($this->registry->userinfo['permissions']['adminpermissions'] & $this->registry->bf_ugp_adminpermissions['cancontrolpanel']); $fp = @fopen("$errfile.log", 'a+b'); if ($fp) { if ($status === true) { $output = "SUCCESS\r\n"; } else { $output = "FAILED"; if ($status !== false) { $output .= ": $status"; } $output .= "\r\n"; } if ($this->delimiter == "\n") { $append = "$timenow\r\nTo: " . $this->toemail . "\r\nSubject: " . $this->subject . "\r\n" . $this->headers . "\r\n\r\n" . $this->message . "\r\n=====================================================\r\n\r\n"; @fwrite($fp, $output . $append); } else { $append = preg_replace("#(\r\n|\r|\n)#s", "\r\n", "$timenow\r\nTo: " . $this->toemail . "\r\nSubject: " . $this->subject . "\r\n" . $this->headers . "\r\n\r\n" . $this->message . "\r\n=====================================================\r\n\r\n"); @fwrite($fp, $output . $append); } fclose($fp); } } } } /** * SMTP Mail Sending Object * * This class sends email from vBulletin using an SMTP wrapper * * @package vBulletin * @version $Revision: 1.30 $ * @date $Date: 2006/07/26 11:14:36 $ * @copyright http://www.vbulletin.com/license.html * */ class vB_SmtpMail extends vB_Mail { /** * SMTP host * * @var string */ var $smtpHost; /** * SMTP port * * @var integer */ var $smtpPort; /** * SMTP username * * @var string */ var $smtpUser; /** * SMTP password * * @var string */ var $smtpPass; /** * Raw SMTP socket * * @var resource */ var $smtpSocket = null; /** * Return code from SMTP server * * @var integer */ var $smtpReturn = 0; /** * Constructor * * @param vB_Registry vBulletin registry object */ function vB_SmtpMail(&$registry) { if (is_object($registry)) { $this->registry =& $registry; } else { trigger_error('Registry object is not an object', E_USER_ERROR); } $this->smtpHost = (!empty($this->registry->options['smtp_tls']) ? 'tls://' : '') . $this->registry->options['smtp_host']; $this->smtpPort = (!empty($this->registry->options['smtp_port']) ? intval($this->registry->options['smtp_port']) : 25); $this->smtpUser =& $this->registry->options['smtp_user']; $this->smtpPass =& $this->registry->options['smtp_pass']; $this->delimiter = "\r\n"; } /** * Sends instruction to SMTP server * * @param string Message to be sent to server * @param mixed Message code expected to be returned or false if non expected * * @return boolean Returns false on error */ function sendMessage($msg, $expectedResult = false) { if ($msg !== false && !empty($msg)) { fputs($this->smtpSocket, $msg . "\r\n"); } if ($expectedResult !== false) { $result = ''; while ($line = @fgets($this->smtpSocket, 1024)) { $result .= $line; if (preg_match('#^(\d{3}) #', $line, $matches)) { break; } } $this->smtpReturn = intval($matches[1]); return ($this->smtpReturn == $expectedResult); } return true; } /** * Triggers PHP warning on error * * @param string Error message to be shown * * @return boolean Always returns false (error) */ function errorMessage($msg) { if ($this->debug) { trigger_error($msg, E_USER_WARNING); } $this->log_email($msg); return false; } /** * Attempts to send email based on parameters passed into start()/quick_set() * * @return boolean Returns false on error */ function send() { if (!$this->toemail) { return false; } $this->smtpSocket = fsockopen($this->smtpHost, $this->smtpPort, $errno, $errstr, 30); if ($this->smtpSocket) { if (!$this->sendMessage(false, 220)) { return $this->errorMessage('Unexpected response when connecting to SMTP server'); } if ($this->smtpUser AND $this->smtpPass) { if (!$this->sendMessage('EHLO ' . $this->smtpHost, 250)) { return $this->errorMessage('Unexpected response from SMTP server during handshake'); } if ($this->sendMessage('AUTH LOGIN', 334)) { if (!$this->sendMessage(base64_encode($this->smtpUser), 334) OR !$this->sendMessage(base64_encode($this->smtpPass), 235)) { return $this->errorMessage('Authorization to the SMTP server failed'); } } } else if (!$this->sendMessage('HELO ' . $this->smtpHost, 250)) { return $this->errorMessage('Unexpected response from SMTP server during handshake'); } if (!$this->sendMessage('MAIL FROM:<' . $this->fromemail . '>', 250)) { return $this->errorMessage('Unexpected response from SMTP server during FROM address transmission'); } // we could have multiple addresses since a few people might expect this to be the same as PHP $addresses = explode(',', $this->toemail); foreach ($addresses AS $address) { if (!$this->sendMessage('RCPT TO:<' . trim($address) . '>', 250)) { return $this->errorMessage('Unexpected response from SMTP server during TO address transmission'); } } if ($this->sendMessage('DATA', 354)) { $this->sendMessage('Date: ' . gmdate('r'), false); $this->sendMessage('To: ' . $this->toemail, false); $this->sendMessage(trim($this->headers), false); // trim to prevent double \r\n $this->sendMessage('Subject: ' . $this->subject, false); $this->sendMessage("\r\n", false); // this makes a double \r\n // catch any single dots on their own $this->message = preg_replace('#^\.' . $this->delimiter . '#m', '..' . $this->delimiter, $this->message); $this->sendMessage($this->message, false); } else { return $this->errorMessage('Unexpected response from SMTP server during data transmission'); } if (!$this->sendMessage('.', 250)) { return $this->errorMessage('Unexpected response from SMTP server when ending transmission'); } // Don't check that QUIT returns a valid result as some servers just kill the connection e.g. smtp.gmail.com $this->sendMessage('QUIT', 221); fclose($this->smtpSocket); $this->log_email(); return true; } else { return $this->errorMessage('Unable to connect to SMTP server'); } } } /** * Mail queueing class. This class should be accessed as a singleton via fetch_instance()! * This class does not actually send emails, but rather queues them to be sent later in a batch. * * @package vBulletin * @version $Revision: 1.30 $ * @date $Date: 2006/07/26 11:14:36 $ * @copyright http://www.vbulletin.com/license.html * */ class vB_QueueMail extends vB_Mail { /** * The SQL to insert into the mail queue * * @var string */ var $mailsql = ''; /** * The number of mails being inserted into the queue * * @var string */ var $mailcounter = ''; /** * Whether to do bulk inserts into the database. * Never set this option directly! * * @var boolean */ var $bulk = false; /** * Inserts the message into the queue instead of sending it. * * @return string True on success, false on failure */ function send() { if (!$this->toemail) { return false; } $vbulletin =& $this->registry; $data = " (" . TIMENOW . ", '" . $vbulletin->db->escape_string($this->toemail) . "', '" . $vbulletin->db->escape_string($this->fromemail) . "', '" . $vbulletin->db->escape_string($this->subject) . "', '" . $vbulletin->db->escape_string($this->message) . "', '" . $vbulletin->db->escape_string($this->headers) . "') "; if ($this->bulk) { if (!empty($this->mailsql)) { $this->mailsql .= ','; } $this->mailsql .= $data; $this->mailcounter++; // current insert exceeds half megabyte, insert it and start over if (strlen($this->mailsql) > 524288) { $this->set_bulk(false); $this->set_bulk(true); } } else { /*insert query*/ $vbulletin->db->query_write(" INSERT INTO " . TABLE_PREFIX . "mailqueue (dateline, toemail, fromemail, subject, message, header) VALUES " . $data ); $vbulletin->db->query_write(" UPDATE " . TABLE_PREFIX . "datastore SET data = data + 1 WHERE title = 'mailqueue' "); // if we're using a alternate datastore, we need to give it an integer value // this may not be atomic if (method_exists($vbulletin->datastore, 'build')) { $mailqueue_db = $vbulletin->db->query_first(" SELECT data FROM " . TABLE_PREFIX . "datastore WHERE title = 'mailqueue' "); $vbulletin->datastore->build('mailqueue', intval($mailqueue_db['data'])); } } return true; } /** * Sets the bulk option. If disabling the option, this also flushes * the cache into the database. * * @param boolean */ function set_bulk($bulk) { if ($bulk) { $this->bulk = true; $this->mailcounter = 0; $this->mailsql = ''; } else if ($this->mailcounter AND $this->mailsql) { // turning off bulk sending, so save all the mails $vbulletin =& $this->registry; /*insert query*/ $vbulletin->db->query_write(" INSERT INTO " . TABLE_PREFIX . "mailqueue (dateline, toemail, fromemail, subject, message, header) VALUES " . $this->mailsql ); $vbulletin->db->query_write(" UPDATE " . TABLE_PREFIX . "datastore SET data = data + " . intval($this->mailcounter) . " WHERE title = 'mailqueue' "); // if we're using a alternate datastore, we need to give it an integer value // this may not be atomic if (method_exists($vbulletin->datastore, 'build')) { $mailqueue_db = $vbulletin->db->query_first(" SELECT data FROM " . TABLE_PREFIX . "datastore WHERE title = 'mailqueue' "); $vbulletin->datastore->build('mailqueue', intval($mailqueue_db['data'])); } } $this->bulk = true; $this->mailsql = ''; $this->mailcounter = 0; } /** * Singleton emulator. Fetches the instance if it doesn't exist. * Be sure to accept a reference if using this function! * * @return vB_QueueMail Reference to the instance */ function &fetch_instance() { static $instance = null; if ($instance === null) { global $vbulletin; $instance =& new vB_QueueMail($vbulletin); } return $instance; } /** * The only part of this class which actually sends an email. * Sends mail from the queue. */ function exec_queue() { $vbulletin =& $this->registry; if ($vbulletin->options['usemailqueue'] == 2) { // Lock mailqueue table so that only one process can // send a batch of emails and then delete them $vbulletin->db->lock_tables(array('mailqueue' => 'WRITE')); } $emails = $vbulletin->db->query_read(" SELECT * FROM " . TABLE_PREFIX . "mailqueue ORDER BY mailqueueid LIMIT " . intval($vbulletin->options['emailsendnum']) ); $mailqueueids = ''; $newmail = 0; $emailarray = array(); while ($email = $vbulletin->db->fetch_array($emails)) { // count up number of mails about to send $mailqueueids .= ',' . $email['mailqueueid']; $newmail++; $emailarray[] = $email; } if (!empty($mailqueueids)) { // remove mails from queue - to stop duplicates being sent $vbulletin->db->query_write(" DELETE FROM " . TABLE_PREFIX . "mailqueue WHERE mailqueueid IN (0 $mailqueueids) "); if ($vbulletin->options['usemailqueue'] == 2) { $vbulletin->db->unlock_tables(); } if ($vbulletin->options['use_smtp']) { $prototype =& new vB_SmtpMail($vbulletin); } else { $prototype =& new vB_Mail($vbulletin); } foreach ($emailarray AS $index => $email) { // send those mails $mail = (phpversion() < '5' ? $prototype : clone($prototype)); // avoid ctor overhead $mail->quick_set($email['toemail'], $email['subject'], $email['message'], $email['header'], $email['fromemail']); $mail->send(); } $newmail = 'data - ' . intval($newmail); } else { if ($vbulletin->options['usemailqueue'] == 2) { $vbulletin->db->unlock_tables(); } $newmail = 0; } // update number of mails remaining $vbulletin->db->query_write(" UPDATE " . TABLE_PREFIX . "datastore SET data = " . $newmail . ", data = IF(data < 0, 0, data) WHERE title = 'mailqueue' "); // if we're using a alternate datastore, we need to give it an integer value // this may not be atomic if (method_exists($vbulletin->datastore, 'build')) { $mailqueue_db = $vbulletin->db->query_first(" SELECT data FROM " . TABLE_PREFIX . "datastore WHERE title = 'mailqueue' "); $vbulletin->datastore->build('mailqueue', intval($mailqueue_db['data'])); } } } /*======================================================================*\ || #################################################################### || # Downloaded: 07:39, Thu Nov 9th 2006 || # CVS: $RCSfile: class_mail.php,v $ - $Revision: 1.30 $ || #################################################################### \*======================================================================*/ ?> - 13-10-2008, 15:41:04Eklentiye eklediğim ile değiştirir misin class_mail.php yi ?
Burda şöyle birşey yaptım
if (!$this->sendMessage('MAIL FROM:<' . $this->fromemail . '>', 250))kodunuif (!$this->sendMessage('MAIL FROM:<' . $this->registry->options['webmasteremail'] . '>', 250))ile değiştirdim.
Ayrıca$headers .= 'Sender: ' . $vbulletin->options['webmasteremail'] . $delimiter;
ekledim.
Yedeğini almayı unutma.