• 13-10-2008, 14:28:28
    #1
    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.
  • 13-10-2008, 14:41:46
    #2
    Yetersiz headers bilgisi ile alakalı bir sorun bu hocam. Burayı bir incele istersen. Hotmail gönderilen mailin nerden geldiğini kontrol ediyor. Verdiğim linkte örnek headers fonksiyonu var.
  • 13-10-2008, 14:53:17
    #3
    Saol hocam bi inceleyeyim.Microsofttan gelen mailde 2 iş günü içinde spf kaydınızı onaylayacağız demişlerdi.Sayende onuda hallettik hocam.Sorunumuzu çözmüşler.ilgine teşekkür ederim.
  • 13-10-2008, 15:03:58
    #4
    hocam burda baya header örneği var bunlardan hangisini kullanacağız acaba?
    Yada bizdekinin hangi kısmını editleyeceğiz?İngilizce tamamen açıklamalar fazla anlayamadık.

    Bizim header aşağıdaki gibi.

    MESAJ EDİT....
  • 13-10-2008, 15:12:22
    #5
    includes/class_mail.php içindeki $headers fonksiyonundan bahsetmiştim hocam. header.php değil yani. class_mail.php'yi kopyalarsan bakayım.
  • 13-10-2008, 15:17:26
    #6
    Pardon 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:04
    #7
    Eklentiye 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))
    kodunu
    if (!$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.
  • 13-10-2008, 15:43:42
    #8
    tamam hocam deniyorum.
  • 13-10-2008, 15:51:55
    #9
    $headers .= 'Sender: ' . $vbulletin->options['webmasteremail'] . $delimiter;
    bunu ekledim demişsin hocam.Nereye ekledin?yukarıdaki değiştirdiğimiz kodların devamınamı ekledin?