یکی از دوستانم واسه سیستم پشتیبانی یا تیکتینگ از hesk استفاده کرد. این نرم افزار خیلی ساده متاسفانه یه مشکل داره اونم اینکه برای ارسال ایمیل از خود تابع mail استفاده می کنه. برای همین من swiftmailer رو به این اسکریپت اضافه کردم و خوشبختانه کار هم می کنه. ایمیلی رو برای مدیران hesk فرستادم و امیدوارم توجه کنند و از یک کلاس mailer استفاده کنند.
در ابتدا من با استفاده از دستور زیر یه جستجویی کردم ببینم چند بار و توی چه فایل هایی از تابع میل استفاده کرده.
dan@dan-VPCF13WFX:~/public_html/hesk-test$ find -exec grep -Hn ‘@mail’ {} \;
./reply_ticket.php:179: @mail($email,$hesklang['new_reply_ticket'],$msg,$headers);
./submit_ticket.php:300:@mail($tmpvar['email'],$hesklang['ticket_received'],$msg,$headers);
./submit_ticket.php:334: @mail($email,$hesklang['new_ticket_submitted'],$msg,$headers);
./index.php:980:@mail($email,$hesklang['tid_email_subject'],$msg,$headers);
./admin/mail.php:355: @mail($pm_recipient['email'],$hesklang['m_pmnes'],$msg,$headers);
./admin/move_category.php:126: @mail($email,$hesklang['ntmc'],$msg,$headers);
./admin/admin_reply_ticket.php:188:@mail($ticket['email'],$hesklang['new_reply_staff'],$msg,$headers);
./admin/admin_submit_ticket.php:295: @mail($tmpvar['email'],$hesklang['ticket_received'],$msg,$headers);
./admin/admin_submit_ticket.php:318: @mail($email,$hesklang['ticket_assigned_to_you'],$msg,$headers);
./admin/admin_submit_ticket.php:355: @mail($email,$hesklang['new_ticket_submitted'],$msg,$headers);
./admin/assign_owner.php:145: @mail($email,$hesklang['ticket_assigned_to_you'],$msg,$headers);
اگر به فایل های hesk نگاه کنید متوجه می شید که این سیستم ۲ فایل اصلی داره
hesk_settings.inc.php
common.inc.php
فایل اول کانفیگ های سیستم رو نگهداری می کنه و هر بار باز نویسی می شه . فایل دوم هم نگهدارنده فانکشن های اصلی سیستم هستند. پس من به فایل common.inc.php این کد ها رو اضافه می کنم.
function InitMailer(&$mailer = NULL){
global $hesk_settings;
if (!class_exists(‘Swift_Mailer’)) require_once $hesk_settings['server_path'].$hesk_settings['mailer_path'];
$transport = Swift_SmtpTransport::newInstance($hesk_settings['mailer_smtp_host'], $hesk_settings['mailer_smtp_port'], $hesk_settings['mailer_use_protocol']);
if ($hesk_settings['mailer_smtp_user'] != NULL && $hesk_settings['mailer_smtp_password'] != NULL){
$transport->setUsername($hesk_settings['mailer_smtp_user']);
$transport->setPassword($hesk_settings['mailer_smtp_password']);
}
$mailer = Swift_Mailer::newInstance($transport);
return $mailer;
} // END InitMailer()
function sendByMailer($to,$subject,$message,$additional_headers = false,$additional_parameters = false){
global $hesk_settings;
if ($hesk_settings['enable_mailer']){
if (!class_exists(‘Swift_Mailer’)) require_once $hesk_settings['mailer_path'];
$mailer = InitMailer();
$to = explode(‘,’, $to);
$message = Swift_Message::newInstance($subject)
->setFrom($hesk_settings['noreply_mail'])
->setTo($to)
->setBody($message)
;
$result = $mailer->send($message);
}else{
@mail($to,$subject,$message,$additional_headers,$additional_parameters );
}
}// END sendByMailer()
تابع اول InitMailer کارش اینه که SmtpTransport رو می سازه برای اتصال به SMTP و return می ده . تابع sendByMailer تابع مشابه mail هست که قراره با توابع mail در سیستم replace بشه. همونطور که می بینید این تابع اگر توی کانفیگ mailer فعال نباشه با استفاده از خود تابع mail ارسال ایمیل رو انجام می ده و در در غیر این صورت با اجرا کردن تابع InitMailer از swiftmailer استفاده می کنه.
خب قدم بعدی replace کردن تابع mail با sendByMailer هست. بالاتر گفتم که چطوری می شه فهمید توی چه فایل هایی از این فانکشن استفاده شده اما این دستور مربوط به ترمینال لینوکس هست حالا اگر از ویندوز استفاده می کنید می تونید با هرنرم افزاری که دم دستتون هست این کار رو انجام بدید.
خب حالا نوبت به اضافه کردن یه سری فیلد به قسمت setting سیستم هست.برای این کار یه سر به فایل admin_settings.php می زنیم. این کد ها رو از خط ۷۲۸ اضافه می کنیم
<!– Mailer settings –>
<span>» <?php echo $hesklang['mailer']; ?></span>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”7″ height=”7″><img src=”../img/roundcornerslt.jpg” width=”7″ height=”7″ alt=”" /></td>
<td></td>
<td><img src=”../img/roundcornersrt.jpg” width=”7″ height=”7″ alt=”" /></td>
</tr>
<tr>
<td> </td>
<td>
<table border=”0″>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['enable_mailer']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#32','400','500')"><b>?</b></a>]</td>
<td><?php
$on = ($hesk_settings['enable_mailer'] == true ) ? ‘checked=”checked”‘ : ”;
$off = ($hesk_settings['enable_mailer'] == false) ? ‘checked=”checked”‘ : ”;
echo ‘
<label><input type=”radio” name=”s_enable_mailer” value=”0″ ‘.$off.’ /> ‘.$hesklang['no'].’</label> |
<label><input type=”radio” name=”s_enable_mailer” value=”1″ ‘.$on.’ /> ‘.$hesklang['yes'].’</label>’;
?></td>
</tr>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_use_smtp']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#34','400','500')"><b>?</b></a>]</td>
<td><?php
$on = ($hesk_settings['mailer_use_smtp'] == true ) ? ‘checked=”checked”‘ : ”;
$off = ($hesk_settings['mailer_use_smtp'] == false) ? ‘checked=”checked”‘ : ”;
echo ‘
<label><input type=”radio” name=”s_mailer_use_smtp” value=”0″ ‘.$off.’ /> ‘.$hesklang['no'].’</label> |
<label><input type=”radio” name=”s_mailer_use_smtp” value=”1″ ‘.$on.’ /> ‘.$hesklang['yes'].’</label>’;
?></td>
</tr>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_path']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#33','400','500')"><b>?</b></a>]</td>
<td><input type=”text” name=”s_mailer_path” size=”30″ maxlength=”255″ value=”<?php echo $hesk_settings['mailer_path']; ?>” /></td>
</tr>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_smtp_host']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#35','400','500')"><b>?</b></a>]</td>
<td><input type=”text” name=”s_mailer_smtp_host” size=”30″ maxlength=”255″ value=”<?php echo $hesk_settings['mailer_smtp_host']; ?>” /></td>
</tr>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_smtp_port']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#36','400','500')"><b>?</b></a>]</td>
<td><input type=”text” name=”s_mailer_smtp_port” size=”30″ maxlength=”255″ value=”<?php echo $hesk_settings['mailer_smtp_port']; ?>” /></td>
</tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_use_protocol']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#36','400','500')"><b>?</b></a>]</td>
<td><?php
$on = ($hesk_settings['mailer_use_protocol'] == ‘ssl’) ? ‘checked=”checked”‘ : ”;
$off = ($hesk_settings['mailer_use_protocol'] == ” ) ? ‘checked=”checked”‘ : ”;
echo ‘
<label><input type=”radio” name=”s_mailer_use_protocol” value=”0″ ‘.$off.’ /> ‘.$hesklang['no'].’</label> |
<label><input type=”radio” name=”s_mailer_use_protocol” value=”1″ ‘.$on.’ /> ‘.$hesklang['yes'].’</label>’;
?></td>
</tr>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_smtp_user']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#36','400','500')"><b>?</b></a>]</td>
<td><input type=”text” name=”s_mailer_smtp_user” size=”30″ maxlength=”255″ value=”<?php echo $hesk_settings['mailer_smtp_user']; ?>” /></td>
</tr>
<tr>
<td style=”text-align:right” width=”200″><?php echo $hesklang['mailer_smtp_password']; ?>: [<a href="Javascript:void(0)" onclick="Javascript:hesk_window('../help_files/settings.html#36','400','500')"><b>?</b></a>]</td>
<td><input type=”password” name=”s_mailer_smtp_password” size=”30″ maxlength=”255″ value=”<?php echo $hesk_settings['mailer_smtp_password']; ?>” /></td>
</tr>
</table>
</td>
<td> </td>
</tr>
<tr>
<td><img src=”../img/roundcornerslb.jpg” width=”7″ height=”7″ alt=”" /></td>
<td></td>
<td width=”7″ height=”7″><img src=”../img/roundcornersrb.jpg” width=”7″ height=”7″ alt=”" /></td>
</tr>
</table>
<br />
همونطور که متوجه شدید این فایل فقط سازنده فرم قسمت setting هست. پس فایل admin_settings_save.php در پوشه admin رو باز می کنیم. بعد از خط ۱۵۲ این کد ها رو اضافه می کنیم
/* Mailer settings */
$set['enable_mailer'] = hesk_mailer_is_on($_POST['s_enable_mailer']);
$set['mailer_path']= hesk_input($_POST['s_mailer_path']);
$set['mailer_use_smtp']=hesk_mailer_is_on($_POST['s_mailer_use_smtp']);
$set['mailer_smtp_host']=hesk_input($_POST['s_mailer_smtp_host']);
$set['mailer_smtp_port']=hesk_isNumber($_POST['s_mailer_smtp_port']);
$set['mailer_use_protocol']= hesk_mailer_is_ssl($_POST['s_mailer_use_protocol']);
$set['mailer_smtp_user']= hesk_validateEmail($_POST['s_mailer_smtp_user']);
$set['mailer_smtp_password']= hesk_input($_POST['s_mailer_smtp_password']);
همونطور که می بینید برای validate کردن اطلاعات من ۲ تابع استفاده کردم که قبلا نبوده. hesk_mailer_is_ssl و hesk_mailer_is_on . البته می شد بدون این ۲ فانکشن هم کار رو انجام داد اما خب من خواستم یکم کد تمیز باشه :دی
خب این ۲ تابع رو هم به فایل common.inc.php که محل قرار گیری توابع هست اضافه می کنیم.
function hesk_mailer_is_on($in){
if ($in == 1) return ‘true’;
else return ‘false’;
} // END hesk_mailer_is_on()
function hesk_mailer_is_ssl($in){
if ($in == 1) return ‘ssl’;
else return ”;
} // END hesk_mailer_is_ssl()
حالا به فایل admin_settings_save.php بر می گردیم. این فایل بعد از validate کردن اطلاعات اون ها رو درون متغیر settings_file_content$ می ریزه و توی فایل hesk_settings.inc.php چاپ می کنه. خب حالا نوبت اینه که ما هم اطلاعات خودمون رو به این فایل کانفیگ اضافه کنیم. بعد از خط ۲۷۳ این کد ها رو اضافه می کنیم
/* Mailer Setup */
$hesk_settings[\'enable_mailer\']=’ . $set['enable_mailer'] . ‘;
$hesk_settings[\'mailer_path\']= \” . $set['mailer_path'] . ‘\’;
$hesk_settings[\'mailer_use_smtp\']=’ . $set['mailer_use_smtp'] . ‘;
$hesk_settings[\'mailer_smtp_host\']=\” . $set['mailer_smtp_host'] . ‘\’;
$hesk_settings[\'mailer_smtp_port\']=\” . $set['mailer_smtp_port'] . ‘\’;
$hesk_settings[\'mailer_use_protocol\']= \” . $set['mailer_use_protocol'] . ‘\’;
$hesk_settings[\'mailer_smtp_user\']= \” . $set['mailer_smtp_user'] . ‘\’;
$hesk_settings[\'mailer_smtp_password\']= \” . $set['mailer_smtp_password'] . ‘\’;
خب بعد از اینکه این کار هارو انجام دادید به قسمت settings در محیط مدیریت برید. یه بلاک اضافه شده که اون mailer هست. حالا کافیه اطالعات لازم رو بدید .. فعال یا غیر فعال کنید. فقط توجه داشته باشید که مسیر Mailer Path باید از پوشه inc داده بشه. به عنوان مثال در تصویر پایین همونطور که می بینیدMailer Path مساوی هست با Swift-4.1.1/lib/swift_required.php. یعنی swiftmailer در پوشه inc وجود داره.

خب یه مرحله دیگه باقی می مونه اونم اینکه کمرتو رو صاف کنید اینقدر کج و کوله نشنید پشت کامپیتور :دی
موفق باشید.