Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Zend Mail Laravel Package

zendframework/zend-mail

Zend\Mail provides robust email composition and transport for PHP applications, supporting MIME messages, attachments, multipart content, headers, encodings, and SMTP/sendmail/file transports. Includes message parsing and validation for reliable mail handling.

View on GitHub
Deep Wiki
Context7

Getting Started

This package is a legacy Zend Framework component (now deprecated, archived in 2018) and should only be used if maintaining an older Laravel app that still depends on it. First, confirm it's required via composer show zendframework/zend-mail. If present, your app likely uses Laminas or Symfony Mailer as a modern replacement. To begin sending mail, instantiate a transport (e.g., SMTP via Zend\Mail\Transport\Smtp) and message (Zend\Mail\Message), then send. For example:

use Zend\Mail\Message;
use Zend\Mail\Transport\Smtp as SmtpTransport;
use Zend\Mail\Transport\SmtpOptions;

$message = new Message();
$message->setFrom('sender@example.com')
         ->setTo('recipient@example.com')
         ->setSubject('Test')
         ->setBody('Hello!');

$transport = new SmtpTransport(new SmtpOptions([
    'host' => 'smtp.example.com',
    'port' => 587,
    'connection_class' => 'login',
    'connection_config' => [
        'username' => 'user',
        'password' => 'pass',
        'ssl' => 'tls',
    ],
]));

$transport->send($message);

Check config/mail.php or config/services.php in older Laravel apps—config is usually stored in environment variables and loaded manually.

Implementation Patterns

  • Direct instantiation over Laravel Mail facade: Since this predates Laravel’s current mail system, code often bypasses the Mail facade entirely, calling Zend\Mail classes directly in jobs, controllers, or services.
  • Custom transport adapters: Projects commonly extend Zend\Mail\Transport\TransportInterface to integrate with legacy providers (e.g., custom SMTP wrappers or internal RPC services).
  • Message templates: HTML/text alternatives are handled by setting setBody() with a Zend\Mail\Part or string; multipart messages use Zend\Mail\Message::setBody() with Zend\Mime\Message.
  • Integration with Zend ServiceManager: In older Zend Framework-based apps, Zend\Mail is often wired via service managers (e.g., Zend\Mail\Transport\TransportInterface aliased to a shared SMTP instance).
  • Legacy Laravel bridging: Apps migrated from ZF to Laravel may keep zend-mail only for backward compatibility, with a MailServiceProvider registering the transport as a singleton.

Gotchas and Tips

  • Security risk: No active maintenance → avoid in new projects; migrate to symfony/mailer or laravel/framework’s built-in mailer.
  • Namespace collisions: If using Laminas (the official ZF successor), you must remove zendframework/zend-* packages to avoid autoloader conflicts. Use laminas/laminas-mail instead.
  • TLS/SSL quirks: Older versions mishandle TLS handshakes on PHP 8.0+. If connections fail silently, set connection_config['ssl_context'] with stream_context_create(['ssl' => ['verify_peer' => false]]) (not recommended for production).
  • Missing async support: This component is synchronous; large email batches require custom queueing (e.g., via Laravel’s queue workers).
  • Debugging tip: Set setDebug(true) on transports to log raw SMTP conversations— invaluable for diagnosing authentication errors.
  • No config validation: Laravel’s mail.php validation rules don’t apply. Validate SMTP options manually before sending.
  • Deprecation path: Replace all use Zend\Mail\* statements with use Laminas\Mail\* (same API), then gradually refactor to Symfony Mailer for long-term viability.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport