BARUTeam, Domain & Bundle
Diskon 30%!
Detail
laravelresendemailphptransactional-emailhelipod

Laravel + Resend: Kirim Email Transactional di Helipod

Tim Helipod

5 menit baca

Tutorial lengkap integrasi Laravel dengan Resend di Helipod. Setup email API, kirim email otomatis, dan monitor delivery.

Laravel punya fitur mail yang powerful, tapi setup SMTP sendiri itu ribet. Dengan Resend, kamu bisa kirim email transactional dari Laravel tanpa setup SMTP.

Artikel ini panduan lengkapnya.

Kenapa Laravel + Resend?

Fitur SMTP Traditional Resend API
Setup Config SMTP server ✅ API-based
Deliverability Tergantung server ✅ Infrastructure tinggi
Monitoring Ga ada ✅ Dashboard analytics
Rate limiting Manual ✅ Built-in
Free tier Ga ada ✅ 100 email/hari

Langkah 1: Setup Resend

Buat Akun Resend

  1. Buka resend.com
  2. Daftar akun gratis
  3. Buka API Keys dan buat API key baru
  4. Catat API key-nya

Connect Resend ke Helipod

  1. Buka project Helipod
  2. Masuk ke Settings → Integrations
  3. Cari Resend dan klik Connect
  4. Paste API key

Langkah 2: Install Resend PHP SDK

composer require resend/resend-php

Langkah 3: Konfigurasi Laravel

Environment Variables

# .env
RESEND_API_KEY=re_xxxxxxxxxxxxxxxx
[email protected]

Service Provider (Laravel 11+)

// config/services.php
'resend' => [
    'key' => env('RESEND_API_KEY'),
    'from' => env('RESEND_FROM'),
],

Langkah 4: Buat Mail Class

// app/Mail/WelcomeMail.php
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

class WelcomeMail extends Mailable
{
    use Queueable, SerializesModels;

    public function __construct(
        public string $name,
        public string $email
    ) {}

    public function envelope(): Envelope
    {
        return new Envelope(
            subject: 'Selamat datang di ' . config('app.name'),
        );
    }

    public function content(): Content
    {
        return new Content(
            view: 'emails.welcome',
            with: [
                'name' => $this->name,
                'email' => $this->email,
            ],
        );
    }
}

Langkah 5: Buat Email Template

{{-- resources/views/emails/welcome.blade.php --}}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        body { font-family: Arial, sans-serif; color: #333; line-height: 1.6; }
        .container { max-width: 600px; margin: 0 auto; padding: 20px; }
        .header { background: #10b981; color: white; padding: 20px; text-align: center; }
        .content { padding: 20px; background: #f9fafb; }
        .button { display: inline-block; background: #10b981; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>Selamat datang!</h1>
        </div>
        <div class="content">
            <p>Halo {{ $name }},</p>
            <p>Akun kamu di {{ config('app.name') }} sudah aktif.</p>
            <p>Berikut detail akun kamu:</p>
            <ul>
                <li><strong>Email:</strong> {{ $email }}</li>
                <li><strong>Status:</strong> Aktif</li>
            </ul>
            <p>
                <a href="{{ url('/dashboard') }}" class="button">
                    Buka Dashboard
                </a>
            </p>
            <p>Terima kasih sudah bergabung!</p>
        </div>
    </div>
</body>
</html>

Langkah 6: Kirim Email

Cara 1: Menggunakan Mail Facade

use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;

// Kirim email
Mail::to('[email protected]')->send(new WelcomeMail(
    name: 'Budi',
    email: '[email protected]'
));

Cara 2: Menggunakan Resend PHP SDK Langsung

use Resend\Client;

$client = new Client(env('RESEND_API_KEY'));

$client->emails->send([
    'from' => env('RESEND_FROM'),
    'to' => ['[email protected]'],
    'subject' => 'Selamat datang di Helipod',
    'html' => '<h1>Halo Budi!</h1><p>Akun kamu sudah aktif.</p>',
]);
// Kirim email via queue
Mail::to('[email protected]')->queue(new WelcomeMail(
    name: 'Budi',
    email: '[email protected]'
));

// Atau dengan delay
Mail::to('[email protected]')->later(
    now()->addMinutes(5),
    new WelcomeMail(
        name: 'Budi',
        email: '[email protected]'
    )
);

Langkah 7: Setup Queue di Helipod

Konfigurasi Queue Driver

# .env
QUEUE_CONNECTION=redis

Jalankan Queue Worker

# Di Helipod terminal
php artisan queue:work

# Atau dengan sleep delay
php artisan queue:work --sleep=3 --tries=3

Use Cases

1. Welcome Email

// app/Http/Controllers/AuthController.php
public function register(Request $request)
{
    // ... validasi dan create user
    
    // Kirim welcome email
    Mail::to($user->email)->send(new WelcomeMail(
        name: $user->name,
        email: $user->email
    ));
    
    return redirect('/dashboard');
}

2. Password Reset

// Gunakan built-in Laravel
use Illuminate\Auth\Events\PasswordReset;

public function resetPassword(Request $request)
{
    // ... reset password logic
    
    event(new PasswordReset($user));
    
    // Kirim email reset
    Mail::to($user->email)->send(new PasswordResetMail(
        token: $token,
        email: $user->email
    ));
}

3. Order Confirmation

// app/Mail/OrderConfirmation.php
class OrderConfirmation extends Mailable
{
    public function __construct(
        public Order $order,
        public User $user
    ) {}

    public function content(): Content
    {
        return new Content(
            view: 'emails.order-confirmation',
            with: [
                'order' => $this->order,
                'items' => $this->order->items,
                'total' => $this->order->total,
            ],
        );
    }
}

4. Invoice Email

// app/Mail/InvoiceMail.php
class InvoiceMail extends Mailable
{
    public function __construct(
        public Invoice $invoice,
        public User $user
    ) {}

    public function content(): Content
    {
        return new Content(
            view: 'emails.invoice',
            with: [
                'invoice' => $this->invoice,
                'user' => $this->user,
            ],
        );
    }
}

Best Practices

1. Gunakan Queue

// ❌ Slow - synchronous
Mail::to($email)->send(new WelcomeMail($user));

// ✅ Fast - via queue
Mail::to($email)->queue(new WelcomeMail($user));

2. Template Reusable

// Buat base email template
abstract class BaseEmail extends Mailable
{
    public function build()
    {
        return $this->view('emails.base')
                    ->subject($this->getSubject());
    }
    
    abstract protected function getSubject(): string;
}

3. Error Handling

try {
    Mail::to($email)->send(new WelcomeMail($user));
} catch (\Exception $e) {
    Log::error('Failed to send email: ' . $e->getMessage());
    // Handle error
}

4. Monitoring

// Log email sent
Mail::to($email)->send(new WelcomeMail($user));

// Log ke database
EmailLog::create([
    'to' => $email,
    'subject' => 'Welcome',
    'status' => 'sent',
    'sent_at' => now(),
]);

Troubleshooting

Email Tidak Terkirim

# Cek queue worker
php artisan queue:work

# Cek log
tail -f storage/logs/laravel.log

Email Masuk Spam

1. Setup domain di Resend (SPF, DKIM, DMARC)
2. Jangan gunakan generic content
3. Sertakan unsubscribe link

Rate Limit

// Resend free tier: 100 email/hari
// Gunakan queue dan batching
Mail::to($emails)->queue(new NewsletterMail($data));

Checklist

  • Buat akun Resend
  • Install Resend PHP SDK
  • Konfigurasi Laravel
  • Buat Mail class
  • Buat email template
  • Setup queue di Helipod
  • Test kirim email
  • Setup monitoring

Kesimpulan

Integrasi Laravel dengan Resend di Helipod memudahkan kamu untuk kirim email transactional:

  • ✅ Setup mudah tanpa SMTP
  • ✅ Deliverability tinggi
  • ✅ Monitoring analytics
  • ✅ Queue support
  • ✅ Free tier 100 email/hari

Butuh bantuan? Hubungi [email protected]

Baca juga:

Siap coba Helipod?

Deploy aplikasi kamu sekarang. Gratis, tanpa kartu kredit.

Mulai Gratis →