DEV Community

Ahmet Korkmaz for İstanbul PHP

Posted on

Laravel Incoming Emails

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode
php artisan vendor:publish --provider="BeyondCode\Mailbox\MailboxServiceProvider" --tag="config"
Enter fullscreen mode Exit fullscreen mode

Ardından paket için gerekli tablonun oluşturulması için migration dosyasını çalıştırmanız gerekmektedir.

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

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
        });
    }
}
Enter fullscreen mode Exit fullscreen mode

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);
    }
}
Enter fullscreen mode Exit fullscreen mode
// 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());
            }
        }
}

Enter fullscreen mode Exit fullscreen mode

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.

Oldest comments (0)