Herkese merhaba! Bu yazı da laravel içerisinde gelen emailleriniz nasıl handle edebileceğiniz inceleyeceğiz. Bunu için laravel'de BeyondCode tarafından açık kaynak olarak geliştirilmiş laravel-mailbox paketini kullanacağız.
Not: laravel-mailbox paketini kullanmadan önce bilmelisiniz ki paketin desteklediği servisler mailgun, postmark ve sendgrid servisleridir.
laravel-mailbox paketini laravel projenize eklemek için aşağıdaki komutu kullanabilirsiniz.
composer required beyondcode/laravel-mailbox
laravel-mailbox paketinin kullanımı ve konfigürsayon işlemleri için publish işlemi yapılması gerekiyor.
php artisan vendor:publish --provider="BeyondCode\Mailbox\MailboxServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="BeyondCode\Mailbox\MailboxServiceProvider" --tag="config"
Ardından paket için gerekli tablonun oluşturulması için migration dosyasını çalıştırmanız gerekmektedir.
php artisan migrate
Paketin kurulumu bittikten sonra temel kullanımı inceleyelim.
Paket kullanımı için AppServiceProvider içerisine hangi email adresini hangi sınıf ile handle edeceğinizi belirtmeniz gerekmektedir.
Örnek:
use BeyondCode\Mailbox\InboundEmail;
use BeyondCode\Mailbox\Facades\Mailbox;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// when send email someone to sender@domain.com, InboundEmailHandler class will working
// InboundEmailHandler is a Invokable Class
Mailbox::to('sender@domain.com', InboundEmailHandler::class);
// You can use like this.
Mailbox::to('sender@domain.com' function (InboundEmail $email) {
// InboundEmail some available methods
$id = $email->id();
$date = $email->date();
$html = $email->html();
$text = $email->text();
$subject = $email->subject();
$from = $email->from();
// Handle incoming email
});
}
}
laravel-mailbox paketini gerçek bir kullanımda inceleyelim.
Örneğin kullanıcı özelinde gelen emailler ile görev oluşturmak istiyor olalım.
Bunun için kullanıcıların her biri için ayrı email adresi olması gerekmektedir. Kullanıcılar için bunun isim - soyisim - rastgele bir değer (ahmet-korkmaz-adas76fa87dfa) olarak düşünelim. Bunun için users tablonuza yeni bir sütun oluşturmanız gerekmektedir. Bu durumun hazır olduğunu düşünerek mailbox ile ilgili kodlarımızı yazmaya başlayalım.
// AppServiceProvider.php
use BeyondCode\Mailbox\Facades\Mailbox;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// You can use userEmail as a variable in CreateTaskHandler invoke method.
Mailbox::from('{userEmail}@domain.com', CreateTaskHandler::class);
}
}
// app/InboundEmails/CreateTaskHandler.php
namespace App\InboundEmails;
use BeyondCode\Mailbox\InboundEmail;
class CreateTaskHandler {
public function __invoke(InboundEmail $email, $userEmail)
{
$user = User::where('inbound_email', $userEmail)->first();
if ($user) {
$task = $user->tasks()->create([
'title' => $email->subject(),
'description' => $email->text(),
]);
// $email->cc() return array and you can attach cc users to task users
$task->users()->attach($email->cc());
}
}
}
Sonuç olarak, laravel-mailbox paketini kullanarak gelen emailleri handle etmek çok kolay. Buna ek olarak task oluşturduktan sonra kullanıcıya success maili reply edebilirsiniz.
Top comments (0)