PHP code example of glueful / email-notification
1. Go to this page and download the library: Download glueful/email-notification library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
glueful / email-notification example snippets
// config/extensions.php
return [
'enabled' => [
'Glueful\\Extensions\\EmailNotification\\EmailNotificationServiceProvider',
// other providers...
],
];
return [
'mail' => [
'default' => env('MAIL_MAILER', 'smtp'),
'mailers' => [
// Generic SMTP
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
],
// Brevo (Sendinblue) - API or SMTP
'brevo' => [
'transport' => env('BREVO_TRANSPORT', 'brevo+api'),
'key' => env('BREVO_API_KEY'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'dsn' => env('BREVO_DSN'), // Override for custom DSN
],
// SendGrid
'sendgrid' => [
'transport' => 'sendgrid+api',
'key' => env('SENDGRID_API_KEY'),
],
// Mailgun
'mailgun' => [
'transport' => 'mailgun+api',
'domain' => env('MAILGUN_DOMAIN'),
'key' => env('MAILGUN_SECRET'),
'region' => env('MAILGUN_REGION', 'us'),
],
// Amazon SES
'ses' => [
'transport' => 'ses+api',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
// Postmark
'postmark' => [
'transport' => 'postmark+api',
'token' => env('POSTMARK_TOKEN'),
],
],
'from' => [
'address' => env('MAIL_FROM', '[email protected] '),
'name' => env('MAIL_FROM_NAME', 'Glueful Application'),
],
// Failover configuration
'failover' => [
'mailers' => explode(',', env('MAIL_FAILOVER_MAILERS', '')),
],
],
];
'custom_provider' => [
'transport' => 'custom',
'dsn' => 'mandrill+api://your-api-key@default',
],
'office365' => [
'transport' => 'office365+smtp',
'username' => '[email protected] ',
'password' => 'password',
// Auto-builds: office365+smtp://user:password@default
],
use Glueful\Notifications\NotificationService;
$notificationService = container()->get(NotificationService::class);
// Simple email notification
$notificationService->send(
'account_activity',
$user,
'Account Login Alert',
[
'message' => 'Your account was accessed from a new device.',
'location' => 'San Francisco, CA',
'device' => 'iPhone 13',
'timestamp' => '2024-06-21 14:30:00',
],
['channels' => ['email']]
);
// Email verification with OTP using verification template
$result = $notificationService->send(
'email_verification',
$notifiable,
'Verify your email address',
[
'otp' => '123456',
'expiry_minutes' => 15,
'template_name' => 'verification'
],
['channels' => ['email']]
);
// Password reset with OTP using password-reset template
$result = $notificationService->send(
'password_reset',
$notifiable,
'Password Reset Code',
[
'name' => $user->getFirstName(),
'otp' => '654321',
'expiry_minutes' => 15,
'template_name' => 'password-reset'
],
['channels' => ['email']]
);
// Welcome email using welcome template
$result = $notificationService->send(
'user_welcome',
$user,
'Welcome to Our Platform',
[
'user_name' => $user->getName(),
'welcome_message' => 'Thank you for joining us!',
'get_started_url' => 'https://example.com/onboarding',
'template_name' => 'welcome'
],
['channels' => ['email']]
);
// Alert notification using alert template
$result = $notificationService->send(
'security_alert',
$user,
'Security Alert',
[
'alert_type' => 'login_from_new_device',
'message' => 'Your account was accessed from a new device.',
'location' => 'San Francisco, CA',
'device' => 'iPhone 13',
'timestamp' => '2024-06-21 14:30:00',
'template_name' => 'alert'
],
['channels' => ['email']]
);
// These are automatically available without specifying them:
$globalVariables = [
'app_name' => 'Glueful Application',
'app_url' => 'https://example.com',
'support_email' => '[email protected] ',
'logo_url' => 'https://brand.glueful.com/logo.png',
'current_year' => '2024',
'company_name' => 'Your Company'
];
// Email with attachments, custom headers, and advanced features
$notificationService->send(
'invoice_generated',
$customer,
'Your Invoice #' . $invoice->number,
[
'invoice_number' => $invoice->number,
'amount' => $invoice->total,
'due_date' => $invoice->due_date,
'embedImages' => [
'logo' => '/path/to/logo.png',
],
],
[
'channels' => ['email'],
'email_options' => [
'attachments' => [
[
'path' => $invoice->pdf_path,
'name' => 'Invoice-' . $invoice->number . '.pdf',
'contentType' => 'application/pdf'
]
],
'cc' => ['[email protected] '],
'bcc' => ['[email protected] '],
'priority' => 'high',
'headers' => [
'X-Invoice-ID' => $invoice->id,
'X-Customer-ID' => $customer->id,
],
'returnPath' => '[email protected] ',
]
]
);
// Failover configuration
'failover' => [
'mailers' => ['brevo', 'sendgrid', 'smtp'],
],
use Glueful\Extensions\EmailNotification\TransportFactory;
// Check available providers
$providers = TransportFactory::getAvailableProviders();
// Returns status of all Symfony provider bridges
// Verify transport configuration
$emailChannel->isAvailable(); // Returns true if transport is configured
use Glueful\Extensions\Contracts\Email\EmailTemplateDefinition;
use Glueful\Extensions\Contracts\Email\EmailTemplatePlaceholder;
use Glueful\Extensions\Contracts\Email\EmailTemplateRegistry;
if ($container->has(EmailTemplateRegistry::class)) {
$container->get(EmailTemplateRegistry::class)->register(new EmailTemplateDefinition(
key: 'lemma.comment-reply',
label: 'Comment reply',
description: 'Sent when a comment receives a reply.',
defaultSubject: 'New reply from {{author}}',
defaultBody: '<p>{{author}} replied: {{excerpt}}</p>',
placeholders: [
new EmailTemplatePlaceholder('author', 'Reply author display name.', 'Ada'),
new EmailTemplatePlaceholder('excerpt', 'Short comment excerpt.', 'Looks good.'),
],
owner: 'glueful/lemma',
));
}
use Glueful\Extensions\EmailNotification\EmailNotificationProvider;
$provider = app($context, EmailNotificationProvider::class);
// Check provider configuration status
$isConfigured = $provider->isEmailProviderConfigured();
// OLD (PHPMailer)
'mail' => [
'host' => 'smtp.brevo.com',
'port' => 587,
'username' => '[email protected] ',
'password' => 'password',
]
// NEW (Symfony Mailer)
'mail' => [
'default' => 'brevo',
'mailers' => [
'brevo' => [
'transport' => 'brevo+smtp',
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
],
],
]
$provider = app()->get(\Glueful\Extensions\EmailNotification\EmailNotificationProvider::class);
$provider->isEmailProviderConfigured(); // bool — credentials/transport/from validated
$provider->getExtensionInfo(); // credential-free config summary + feature flags
bash
php glueful extensions:enable email-notification
# To disable (removes the provider from `enabled`):
php glueful extensions:disable email-notification
bash
php glueful extensions:list
php glueful extensions:info email-notification
bash
php glueful extensions:info email-notification