شیرترانیکس فارسی

ارسال ایمیل از طریق SMTP

ایمیل‌های ارسالی در شیرترانیکس به صورت پیشفرض از تابع mail استفاده می‌کنند که عموماً به دلیل ارسال ایمیل‌های بسیار از جانب شبکه در سایت‌های بهینه‌سازی نشده و گاهاً به دلیل بسته بودن تابع مذکور روی سرور، مشکلاتی برای مدیران سایت‌ها متصور هست که همواره از جانب بخش پشتیبانی میزبانی وب استفاده از SMTP توصیه میشه …

SMTP پروتکلی استاندارد برای تبادل نامه‌های الکترونیکی (eMail) در اینترنت است.

برای جایگزین کردن SMTP به جای تابع mail قبلاً افزونه‌ای رایگان و همچنین افزونه‌ای تجاری معرفی کردیم، اما امروز قصد داریم نسخه‌ی جدید از افزونه‌ی رایگان رو به اشتراک بزاریم تا هم مشکلات موجود در نسخه قدیمی رو برطرف کرده باشیم، هم این نوید رو بدیم که این نسخه به صورت کامل منطبق با پلتفورم نوشته شده و در اختیار شما قرار گرفته …

راهنمای نصب :

1) بسته پیوست شده رو دانلود کرده و از حالت فشرده خارج کنید
2) فایل‌های class_PHPMailer.php و class_smtp.php رو به system/classes منتقل کنید
3) به فایل conf_system.php در فولدر system رجوع کرده و کد زیر رو اضافه کنید :

$C->SMTP = TRUE; // TRUE or FALSE
    $C->SMTP_HOST = 'mail.sharetronix.ir';
    $C->SMTP_USER = 'info@sharetronix.ir';
    $C->SMTP_PASS = 'PASSWORD';
    $C->SMTP_PORT = 25;

4) به func_main.php در system/helpers رجوع کرده و کد زیر رو پیدا کنید :

   function do_send_mail($email, $subject, $message, $from=FALSE)
    {
        global $C;
        if( ! $from ) {
            $from   = $C->SITE_TITLE.' <'.$C->SYSTEM_EMAIL.'>';
        }
        $crlf   = "\n";
        preg_match('/^(.*)(\<(.*)\>)?$/iuU', $from, $m);
        $from_mail  = trim($m[3]);
        $from_name  = trim($m[1]);
        $tmp    = empty($from_name) ? $from_mail : ( '=?UTF-8?B?'.base64_encode($from_name).'?= <'.$from_mail.'>' );
        $headers    = '';
        $headers    .= 'From: '.$tmp.$crlf;
        $headers    .= 'Reply-To: '.$tmp.$crlf;
        $headers    .= 'Return-Path: '.$tmp.$crlf;
        $headers    .= 'Message-ID: <'.time().rand(1000,9999).'@'.$C->DOMAIN.'>'.$crlf;
        $headers    .= 'X-Mailer: PHP/'.PHP_VERSION.$crlf;
        $headers    .= 'MIME-Version: 1.0'.$crlf;
        $headers    .= 'Content-Type: text/plain; charset=UTF-8'.$crlf;
        $headers    .= 'Content-Transfer-Encoding: 8bit'.$crlf;
        $subject    = '=?UTF-8?B?'.base64_encode($subject).'?=';
        return mail( $email, $subject, $message, $headers );
    }
    
    function do_send_mail_html($email, $subject, $message_txt, $message_html, $from=FALSE)
    {
        global $C;
        if( ! $from ) {
            $from   = $C->SITE_TITLE.' <'.$C->SYSTEM_EMAIL.'>';
        }
        /*  (DELETE_THIS_LINE) This is a fix for everybody with mail issues (2 types)             (DELETE_THIS_LINE) 1. Your script send mails with blank body             (DELETE_THIS_LINE) 2. Your script send mails with missing text in the mail body                         (DELETE_THIS_LINE) To activate the fix delete all the lines which contains (DELETE_THIS_LINE).                 do_send_mail($email, $subject, $message_txt, $from);         exit;                     (DELETE_THIS_LINE)*/
        
        $crlf   = "\n";
        $boundary   = '=_Part_'.md5(time().rand(0,9999999999));
        preg_match('/^(.*)(\<(.*)\>)?$/iuU', $from, $m);
        $from_mail  = trim($m[3]);
        $from_name  = trim($m[1]);
        $tmp    = empty($from_name) ? $from_mail : ( '=?UTF-8?B?'.base64_encode($from_name).'?= <'.$from_mail.'>' );
        $headers    = '';
        $headers    .= 'From: '.$tmp.$crlf;
        $headers    .= 'Reply-To: '.$tmp.$crlf;
        $headers    .= 'Return-Path: '.$tmp.$crlf;
        $headers    .= 'Message-ID: <'.time().rand(1000,9999).'@'.$C->DOMAIN.'>'.$crlf;
        $headers    .= 'X-Mailer: PHP/'.PHP_VERSION.$crlf;
        $headers    .= 'MIME-Version: 1.0'.$crlf;
        $headers    .= 'Content-Type: multipart/alternative; boundary="'.$boundary.'"'.$crlf;
        $headers    .= '--'.$boundary.$crlf;
        $headers    .= 'Content-Type: text/plain; charset=UTF-8'.$crlf;
        $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
        $headers    .= 'Content-Disposition: inline'.$crlf;
        $headers    .= $crlf;
        $headers    .= chunk_split(base64_encode($message_txt));
        $headers    .= '--'.$boundary.$crlf;
        $headers    .= 'Content-Type: text/html; charset=UTF-8'.$crlf;
        $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
        $headers    .= 'Content-Disposition: inline'.$crlf;
        $headers    .= $crlf;
        $headers    .= chunk_split(base64_encode($message_html), 76, $crlf);
        $subject    = '=?UTF-8?B?'.base64_encode($subject).'?=';
        $result = @mail( $email, $subject, '', $headers );
        if( ! $result ) {
            // if mail is not accepted for delivery by the MTA, try something else:
            $headers    = '';
            $headers    .= 'From: '.$tmp.$crlf;
            $headers    .= 'Reply-To: '.$tmp.$crlf;
            $headers    .= 'Return-Path: '.$tmp.$crlf;
            $headers    .= 'Message-ID: <'.time().rand(1000,9999).'@'.$C->DOMAIN.'>'.$crlf;
            $headers    .= 'X-Mailer: PHP/'.PHP_VERSION.$crlf;
            $headers    .= 'MIME-Version: 1.0'.$crlf;
            $headers    .= 'Content-Type: multipart/alternative; boundary="'.$boundary.'"'.$crlf;
            $headers    .= '--'.$boundary.$crlf;
            $headers    .= 'Content-Type: text/plain; charset=UTF-8'.$crlf;
            $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
            $headers    .= 'Content-Disposition: inline'.$crlf;
            $headers    .= chunk_split(base64_encode($message_txt));
            $headers    .= '--'.$boundary.$crlf;
            $headers    .= 'Content-Type: text/html; charset=UTF-8'.$crlf;
            $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
            $headers    .= 'Content-Disposition: inline'.$crlf;
            $headers    .= chunk_split(base64_encode($message_html), 76, $crlf);
            $result = @mail( $email, $subject, '', $headers );
        }
        return $result;
    }

5) کد ذکر شده رو حذف کرده، کد زیر رو جایگزین کنید :

function do_send_mail($email, $subject, $message, $from=FALSE)
    {
        global $C;
        if ( $C->SMTP ) {
            send_email_via_smtp($email, $subject, '', $message, $from);
            return TRUE;
        }
        if( ! $from ) {
            $from   = $C->SITE_TITLE.' <'.$C->SYSTEM_EMAIL.'>';
        }
        $crlf   = "\n";
        preg_match('/^(.*)(\<(.*)\>)?$/iuU', $from, $m);
        $from_mail  = trim($m[3]);
        $from_name  = trim($m[1]);
        $tmp    = empty($from_name) ? $from_mail : ( '=?UTF-8?B?'.base64_encode($from_name).'?= <'.$from_mail.'>' );
        $headers    = '';
        $headers    .= 'From: '.$tmp.$crlf;
        $headers    .= 'Reply-To: '.$tmp.$crlf;
        $headers    .= 'Return-Path: '.$tmp.$crlf;
        $headers    .= 'Message-ID: <'.time().rand(1000,9999).'@'.$C->DOMAIN.'>'.$crlf;
        $headers    .= 'X-Mailer: PHP/'.PHP_VERSION.$crlf;
        $headers    .= 'MIME-Version: 1.0'.$crlf;
        $headers    .= 'Content-Type: text/plain; charset=UTF-8'.$crlf;
        $headers    .= 'Content-Transfer-Encoding: 8bit'.$crlf;
        $subject    = '=?UTF-8?B?'.base64_encode($subject).'?=';
        return mail( $email, $subject, $message, $headers );
    }
    
    function do_send_mail_html($email, $subject, $message_txt, $message_html, $from=FALSE)
    {
        global $C;
        if ( $C->SMTP ) {
            send_email_via_smtp($email, $subject, $message_txt, $message_html, $from);
            return TRUE;
        }
        if( ! $from ) {
            $from   = $C->SITE_TITLE.' <'.$C->SYSTEM_EMAIL.'>';
        }
        $crlf   = "\n";
        $boundary   = '=_Part_'.md5(time().rand(0,9999999999));
        preg_match('/^(.*)(\<(.*)\>)?$/iuU', $from, $m);
        $from_mail  = trim($m[3]);
        $from_name  = trim($m[1]);
        $tmp    = empty($from_name) ? $from_mail : ( '=?UTF-8?B?'.base64_encode($from_name).'?= <'.$from_mail.'>' );
        $headers    = '';
        $headers    .= 'From: '.$tmp.$crlf;
        $headers    .= 'Reply-To: '.$tmp.$crlf;
        $headers    .= 'Return-Path: '.$tmp.$crlf;
        $headers    .= 'Message-ID: <'.time().rand(1000,9999).'@'.$C->DOMAIN.'>'.$crlf;
        $headers    .= 'X-Mailer: PHP/'.PHP_VERSION.$crlf;
        $headers    .= 'MIME-Version: 1.0'.$crlf;
        $headers    .= 'Content-Type: multipart/alternative; boundary="'.$boundary.'"'.$crlf;
        $headers    .= '--'.$boundary.$crlf;
        $headers    .= 'Content-Type: text/plain; charset=UTF-8'.$crlf;
        $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
        $headers    .= 'Content-Disposition: inline'.$crlf;
        $headers    .= $crlf;
        $headers    .= chunk_split(base64_encode($message_txt));
        $headers    .= '--'.$boundary.$crlf;
        $headers    .= 'Content-Type: text/html; charset=UTF-8'.$crlf;
        $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
        $headers    .= 'Content-Disposition: inline'.$crlf;
        $headers    .= $crlf;
        $headers    .= chunk_split(base64_encode($message_html), 76, $crlf);
        $subject    = '=?UTF-8?B?'.base64_encode($subject).'?=';
        $result = @mail( $email, $subject, '', $headers );
        if( ! $result ) {
            $headers    = '';
            $headers    .= 'From: '.$tmp.$crlf;
            $headers    .= 'Reply-To: '.$tmp.$crlf;
            $headers    .= 'Return-Path: '.$tmp.$crlf;
            $headers    .= 'Message-ID: <'.time().rand(1000,9999).'@'.$C->DOMAIN.'>'.$crlf;
            $headers    .= 'X-Mailer: PHP/'.PHP_VERSION.$crlf;
            $headers    .= 'MIME-Version: 1.0'.$crlf;
            $headers    .= 'Content-Type: multipart/alternative; boundary="'.$boundary.'"'.$crlf;
            $headers    .= '--'.$boundary.$crlf;
            $headers    .= 'Content-Type: text/plain; charset=UTF-8'.$crlf;
            $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
            $headers    .= 'Content-Disposition: inline'.$crlf;
            $headers    .= chunk_split(base64_encode($message_txt));
            $headers    .= '--'.$boundary.$crlf;
            $headers    .= 'Content-Type: text/html; charset=UTF-8'.$crlf;
            $headers    .= 'Content-Transfer-Encoding: base64'.$crlf;
            $headers    .= 'Content-Disposition: inline'.$crlf;
            $headers    .= chunk_split(base64_encode($message_html), 76, $crlf);
            $result = @mail( $email, $subject, '', $headers );
        }
        return $result;
    }
    
    function send_email_via_smtp($email, $subject, $message_txt='', $message_html, $from='') {
        global $C;
        if ( ! $C->SMTP ) {
            return FALSE;
        }
        $mail = new PHPMailer();
        if ( !$mail->ValidateAddress($email) ) {
            return FALSE;
        }
        $mail->isSMTP();
        $mail->Mailer = "smtp";
        $mail->SMTPAuth = TRUE;
        $mail->SMTPDebug = FALSE;
        $type = (empty($message_txt) ? FALSE : TRUE);
        $mail->IsHTML($type);
        $mail->Host = $C->SMTP_HOST;
        $mail->Port = $C->SMTP_PORT;
        $mail->Username = $C->SMTP_USER;
        $mail->Password = $C->SMTP_PASS;
        $mail->AddReplyTo($C->SYSTEM_EMAIL,  $C->SITE_TITLE);
        $mail->From =  (empty($from) ? $C->SYSTEM_EMAIL : $from);
        $mail->FromName = $C->SITE_TITLE;
        $mail->AddAddress($email);  
        $mail->Subject = $subject;
        $mail->msgHTML($message_html);
        $mail->AltBody = $message_txt;
        if(!$mail->Send()){
            return $mail->ErrorInfo;
        } else {
            return TRUE;
        }
    }

در پایان، اطلاعات مربوط به SMTP هاست یا SMTP گوگل رو در متغیرها (مرحله 3) درج کنید، اما توجه داشته باشید که استفاده از SMTP گوگل یا هاست هم با محدودیت‌هایی همراهه و همواره احتمال بلاک شدن IP شما و قرارگیری در بلک‌لیست وجود داره ؛ بنابراین توصیه می‌کنیم حتماً از سرویس‌های SMTP تخصصی استفاده کنید …


برای اطلاع از آخرین اخبار و تخفیف‌ها کانال تلگرام شیرترانیکس رو دنبال کنید.