Задача из не простых конечно уж.
Если готовые коды но неизвестно рабочие или нет.
Юзаем библиотеку Laravel SwiftMailer
И для телеги Laravel Telegram Bot API.
Начинаем наш скрипт делать.
// app/Models/Notification.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Notification extends Model
{
const TYPE_EMAIL = 1;
const TYPE_TELEGRAM = 2;
const STATUS_WAIT = 0;
const STATUS_SENT = 1;
const STATUS_ERROR = 2;
protected $fillable = ['to', 'type', 'template', 'class_provider', 'subject', 'content', 'status'];
public function sendNotification()
{
// ...
}
}
public function sendNotification()
{
switch ($this->type) {
case self::TYPE_EMAIL:
$this->sendEmailNotification();
break;
case self::TYPE_TELEGRAM:
$this->sendTelegramNotification();
break;
default:
throw new \Exception('Unknown notification type');
}
}
public function sendEmailNotification()
{
// Получаем провайдера email из поля class_provider
$provider = app($this->class_provider);
// Получаем получателя и контент сообщения из модели уведомления
$to = $this->to;
$content = json_decode($this->content);
// Создаем экземпляр класса MailMessage
$message = new \Illuminate\Mail\Message();
// Устанавливаем адрес отправителя и получателя
$message->setFrom(config('mail.from.address'), config('mail.from.name'));
$message->addTo($to);
// Устанавливаем тему и контент сообщения
$message->setSubject($this->subject);
$message->setBody($content->message, 'text/html');
// Отправляем сообщение
try {
$provider->send($message);
$this->status = self::STATUS_SENT;
} catch (\Exception $e) {
$this->status = self::STATUS_ERROR;
}
$this->save();
}
public function sendTelegramNotification()
{
// Получаем получателя и контент сообщения из модели уведомления
$to = $this->to;
$content = json_decode($this->content);
// Отправляем сообщение
try {
\Telegram::sendMessage([
'chat_id' => $to,
'text' => $content->message,
]);
$this->status = self::STATUS_SENT;
} catch (\Exception $e) {
$this->status = self::STATUS_ERROR;
}
$this->save();
Ну теперь почта.
config/mail.php
// config/mail.php
return [
'default' => env('MAIL_MAILER', 'smtp'),
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
],
// ...
];
И юзаем метод для отправки уведомление в любое место нашего приложения.
$notification = Notification::find(1);
$notification->sendNotification();