در این مقاله یک اسکریپت 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()
میتوانید فایلهایی را نیز ارسال کنید.