...

آموزش کامل ارسال ایمیل با AGI در Asterisk و Issabel (با استفاده از PHPAGI و SMTP)

فهرست مطالب

زمان مطالعه: 2 دقیقه

در این مقاله یک اسکریپت AGI استاندارد و قابل توسعه به زبان PHP معرفی می‌کنیم که به راحتی از طریق دایال‌پلن Asterisk ایمیل ارسال می‌کند. این اسکریپت از کتابخانه‌ی معروف phpagi.php استفاده می‌کند و قابلیت اتصال به هر سرور SMTP را دارد (از جمله Gmail).


آنچه در این مقاله خواهید آموخت

  • نحوه ساخت یک AGI برای ارسال ایمیل

  • پیکربندی AGI برای کار با Gmail و سایر SMTPها

  • نمونه کاربردی در فایل extensions_custom.conf ایزابل

  • نصب و تست در ایزابل

  • نکات امنیتی و مشکلات رایج

  • قابلیت سفارشی‌سازی کامل برای پروژه‌های مختلف


ساختار و نحوه عملکرد AGI

نام فایل: send_email.php
مکان پیشنهادی برای قرارگیری: /var/lib/asterisk/agi-bin/send_email.php
سطح دسترسی: chmod +x send_email.php

در ابتدای فایل، تنظیمات SMTP به صورت متغیر آمده‌اند تا به راحتی قابل ویرایش باشند:

// SMTP Settings
$smtp_host = 'smtp.gmail.com';
$smtp_port = 587;
$smtp_user = 'your-email@gmail.com';
$smtp_pass = 'your-password-or-app-password';
$from_email = 'your-email@gmail.com';
$from_name  = 'Asterisk AGI';

کد کامل send_email.php

(کد دارای کامنت‌های آموزشی و به زبان ساده است.)

#!/usr/bin/php -q
<?php
require('/var/lib/asterisk/agi-bin/phpagi.php');
require('/usr/share/php/PHPMailer/PHPMailerAutoload.php'); // مسیر نصب PHPMailer

$agi = new AGI();

// دریافت اطلاعات از Dialplan
$to_email = $agi->get_variable("EMAIL_TO")["data"];
$subject  = $agi->get_variable("EMAIL_SUBJECT")["data"];
$body     = $agi->get_variable("EMAIL_BODY")["data"];

// تنظیمات SMTP
$smtp_host = 'smtp.gmail.com';
$smtp_port = 587;
$smtp_user = 'your-email@gmail.com';
$smtp_pass = 'your-app-password';
$from_email = 'your-email@gmail.com';
$from_name  = 'Asterisk Server';

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = $smtp_host;
$mail->SMTPAuth = true;
$mail->Username = $smtp_user;
$mail->Password = $smtp_pass;
$mail->SMTPSecure = 'tls';
$mail->Port = $smtp_port;

$mail->setFrom($from_email, $from_name);
$mail->addAddress($to_email);
$mail->Subject = $subject;
$mail->Body    = $body;

if (!$mail->send()) {
    $agi->verbose("Mailer Error: " . $mail->ErrorInfo);
} else {
    $agi->verbose("Message sent successfully to $to_email");
}
?>

نحوه استفاده در دایال‌پلن

در فایل extensions_custom.conf این بخش را اضافه کنید:

<code class="whitespace-pre! language-asterisk">

[from-internal-custom]
exten => *555,1,Answer()
exten => *555, n,Set(EMAIL_TO=recipient@example.com)
exten => *555,n,Set(EMAIL_SUBJECT=تماس جدید از ایزابل)
exten => *555,n,Set(EMAIL_BODY=تماسی از داخلی ${CALLERID(num)} برقرار شد.)
exten => *555,n,AGI(send_email.php)
exten => *555,n,Hangup()

با گرفتن شماره *555، ایمیل به آدرس مورد نظر ارسال خواهد شد.


📥 نصب پیش‌نیازها در ایزابل

yum install php-phpmailer php-cli -y

اگر PHPMailer نصب نبود، می‌توانید با Composer آن را نصب کنید:

<span class="hljs-built_in">cd</span> /var/lib/asterisk/agi-bin/
composer require phpmailer/phpmailer

یا از نسخه آماده‌ی /usr/share/php/PHPMailer/ استفاده کنید.


نکات امنیتی مهم برای Gmail

برای استفاده از Gmail:

  • در اکانت گوگل، App Password بسازید (در بخش امنیت -> 2FA باید فعال باشد).

  • رمز عبور Gmail اصلی را هرگز استفاده نکنید.


کاربردهای واقعی این AGI

  • اطلاع‌رسانی تماس‌های از دست رفته

  • ارسال هشدارهای اضطراری

  • اطلاع‌رسانی تماس‌های مشکوک یا اسپم

  • ارسال گزارش دوره‌ای تماس‌ها


 FAQ

آیا می‌توان از سرویس‌های دیگر مثل Mailgun یا SMTP شرکت‌های ایرانی استفاده کرد؟

بله، فقط کافی است اطلاعات SMTP را در بالای اسکریپت تغییر دهید.

آیا می‌توان فایل نیز ضمیمه کرد؟

بله، با استفاده از تابع $mail->addAttachment() می‌توانید فایل‌هایی را نیز ارسال کنید.


مقالات مرتبط

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از

0 نظرات
قدیمی‌ترین
تازه‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها