khaleejinfotech/multi-tenant-mailer
Composer 安装命令:
composer require khaleejinfotech/multi-tenant-mailer
包简介
The `MultiTenantMailer` is a powerful and flexible email-sending class designed for multi-tenant applications. It simplifies the process ofconfiguring and sending emails while supporting multiple tenants with different settings.
README 文档
README
The MultiTenantMailer is a powerful and flexible email-sending library designed for multi-tenant applications. It simplifies the process
of configuring and sending emails while supporting multiple tenants with different settings.
Features
- Support for multiple tenants with unique SMTP configurations.
- Easy-to-use API for setting up email properties (host, port, username, etc.).
- Ability to queue emails for background processing.
- Support for HTML and plain text emails.
Installation
-
Install via Composer: If you haven't done so, install the package using Composer:
composer require khaleejinfotech/multi-tenant-mailer
-
Register the service provider: Open your
config/app.phpfile and add the service provider to theprovidersarray.'providers' => [ // ... Khaleejinfotech\MultiTenantMailer\MultiTenantMailerServiceProvider::class, ],
-
Publish Configuration: After installation, publish the configuration file and any required resources:
php artisan vendor:publish --provider="Khaleejinfotech\MultiTenantMailer\MultiTenantMailerServiceProvider"
Configuration
You can configure the queue_class in the published configuration file (config/multi-tenant-mailer.php) like this:
return [ 'queue_class' => \Khaleejinfotech\MultiTenantMailer\Jobs\MultiTenantMailerQueued::class, ];
Usage
MultiTenantMailer
Initialize the Mailer
use Khaleejinfotech\MultiTenantMailer\MultiTenantMailer; $mailer = new MultiTenantMailer(); $mailer->init($host, $port, $username, $password, $encryption);
Set Email Properties
$mailer->setFrom($fromAddresses, $fromName) ->setTo($toAddresses, $toName) ->setSubject($subject) ->setBody($body) ->setContentType('text/html') ->setAttachments($attachments) ->shouldQueue(); // Optional: Set to true if you want to queue the email
Send the Email
$mailer->send();
MultiTenantMailerSettings
Create and Configure Settings
use Khaleejinfotech\MultiTenantMailer\Contracts\MultiTenantMailerSettings; $mailerSettings = new MultiTenantMailerSettings(); $mailerSettings->setHost($host) ->setPort($port) ->setUsername($username) ->setPassword($password) ->setEncryption($encryption) ->setFromAddress($fromAddress, $fromName);
by this you can directly pass the settings object to the mailer instance.
Here is the example
use Khaleejinfotech\MultiTenantMailer\MultiTenantMailer; $mailer = new MultiTenantMailer(); $mailer->withSettings($mailerSettings);
Using Facades
If you prefer to use facades for cleaner syntax, you can utilize the facades you've created.
Using MultiTenantMailer Facade
use Khaleejinfotech\MultiTenantMailer\Facades\MultiTenantMailer; MultiTenantMailer::init($host, $port, $username, $password, $encryption) ->setFrom($fromAddresses, $fromName) ->setTo($toAddresses, $toName) ->setSubject($subject) ->setBody($body) ->setContentType('text/html') ->setAttachments($attachments) ->shouldQueue() ->send();
Using MultiTenantMailerSettings Facade
use Khaleejinfotech\MultiTenantMailer\Facades\MultiTenantMailerSettings; MultiTenantMailerSettings::setHost($host) ->setPort($port) ->setUsername($username) ->setPassword($password) ->setEncryption($encryption) ->setFromAddress($fromAddress, $fromName);
Notification Driver Support
public function via(object $notifiable): array { return ['tenant_mailer']; } public function toTenantMailer($notifiable): MultiTenantMailer { return (new MultiTenantMailer) ->setHost(config('mail.mailers.smtp.host')) ->setPort(config('mail.mailers.smtp.port')) ->setUsername(config('mail.mailers.smtp.username')) ->setPassword(config('mail.mailers.smtp.password')) ->setEncryption(config('mail.mailers.smtp.encryption')) ->setFrom(config('mail.from.address')) ->setTo($notifiable) ->setSubject('Subject') ->setBody($this->toMail($notifiable)->render()); }
the setBody() can have either Notification/Mailable or the self mailable method to render the message;
1. Notification/Mailable Object
->setBody(new MailTestMessge());
2. Self $this->toMail($notifiable)->render() method
->setBody($this->toMail($notifiable)->render());
Queues
The MultiTenantMailer class provides the ability to define specific queues for processing emails, giving you control over how and when
emails are queued.
Setting the Queue
You can set a queue name or identifier using the setOnQueue method. This allows you to specify a queue that suits your system’s
job-handling
requirements.
->onQueue('emails');
Events
The library includes the following events:
MailFailed: Triggered when sending an email fails.
MailSuccess: Triggered when an email is sent successfully.
Available Methods
Class MultiTenantMailer
| Method | Summary |
|---|---|
init(string $host, int $port, string $username, string $password, string $encryption) |
Initializes mailer settings. |
withSettings(MultiTenantMailerSettings $mailerSettings) |
Sets mailer settings from a MultiTenantMailerSettings instance. |
setHost(string $host) |
Sets the mail server host. |
getHost(): string |
Retrieves the mail server host. |
setPort(int $port) |
Sets the mail server port. |
getPort(): int |
Retrieves the mail server port. |
setUsername(string $username) |
Sets the username for the mail server. |
getUsername(): string |
Retrieves the username for the mail server. |
setPassword(string $password) |
Sets the password for the mail server. |
getPassword(): string |
Retrieves the password for the mail server. |
setEncryption(string $encryption) |
Sets the encryption type (e.g., 'tls', 'ssl'). |
getEncryption(): string |
Retrieves the encryption type. |
setTo(array|string $addresses, string $name = null) |
Sets the recipient's email address(es) and optional name. |
getToAddresses(): array|string |
Retrieves the recipient's email address(es). |
getToName(): ?string |
Retrieves the name of the recipient. |
setCc(array $addresses) |
Sets the cc recipient's email address(es) . |
getCcAddresses(): array |
Retrieves the cc recipient's email address(es). |
setBcc(array $addresses) |
Sets the bcc recipient's email address(es) . |
getBccAddresses(): array |
Retrieves the bcc recipient's email address(es). |
setFrom(array|string $addresses, string $name = null) |
Sets the sender's email address(es) and optional name. |
getFromAddresses(): array|string |
Retrieves the sender's email address(es). |
getFromName(): ?string |
Retrieves the name of the sender. |
setSubject(string $subject) |
Sets the email subject. |
setContentType(string $contentType = 'text/html') |
Sets the content type (e.g., 'text/html'). |
shouldQueue() |
Marks the email to be queued for sending. |
isShouldQueue(): bool |
Checks if the email should be queued. |
onQueue(BackedEnum|string|null $onQueue = 'default') |
Sets the job queue name. |
getQueue(): BackedEnum|string|null $onQueue |
Retrieves the job queue name. |
getStreamOptions(): null|array |
Get the stream options. |
setStreamOptions(): null|array |
Set the stream options. |
setBody(Notification|string $notification) |
Sets the email body, either from a notification or a plain string. |
getBody(): string |
Retrieves the email body. |
setBodyPart(string $bodyPart) |
Sets the plain text body part of the email. |
getBodyPart(): string |
Retrieves the plain text body part of the email. |
setAttachments(array $attachments) |
Sets attachments for the email. |
getAttachments(): array |
Retrieves the attachments for the email. |
setHeaders(array $headers) |
Sets headers for the email. |
getHeaders(): array |
Retrieves the headers for the email. |
useFallbackConfig() |
Sets default email settings if there is no email config set. |
stopTransport(bool $b) |
Define whether to keep transport running or stopped.. |
shouldStopTransport(): bool |
To stop the transport. |
setExtras(array|string $key, mixed $value) |
Defines extra data to be used by the mailer. |
getExtras(): array |
Returns the array of extra data. |
send(): int |
Sends the email and returns the number of emails sent. |
Class MultiTenantMailerSettings
| Method | Summary |
|---|---|
setHost(string $host) |
Sets the mail server host for the settings. |
getHost(): string |
Retrieves the mail server host from the settings. |
setPort(int $port) |
Sets the mail server port for the settings. |
getPort(): int |
Retrieves the mail server port from the settings. |
setUsername(string $username) |
Sets the username for the mail server in the settings. |
getUsername(): string |
Retrieves the username for the mail server from the settings. |
setPassword(string $password) |
Sets the password for the mail server in the settings. |
getPassword(): string |
Retrieves the password for the mail server from the settings. |
setEncryption(string $encryption) |
Sets the encryption type (e.g., 'tls', 'ssl') in the settings. |
getEncryption(): string |
Retrieves the encryption type from the settings. |
setFromName(string $name = null) |
Sets the sender's name in the settings. |
getFromName(): ?string |
Retrieves the sender's name from the settings. |
setFromAddress(string $addresses, string $name = null) |
Sets the sender's email address and optional name in the settings. |
getFromAddress(): ?string |
Retrieves the sender's email address from the settings. |
Exception Handling
The MultiTenantMailer class throws MultiTenantMailerException when the required properties (host, port, username, etc.) are not set. Be sure to handle these exceptions to avoid runtime errors.
Contributing
Contributions are welcome! Please submit a pull request or open an issue for any improvements or bugs you encounter.
khaleejinfotech/multi-tenant-mailer 适用场景与选型建议
khaleejinfotech/multi-tenant-mailer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 32 次下载、GitHub Stars 达 1, 最近一次更新时间为 2024 年 10 月 22 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「mail」 「mailer」 「email」 「multi tenant」 「khaleej infotech」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 khaleejinfotech/multi-tenant-mailer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 khaleejinfotech/multi-tenant-mailer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 khaleejinfotech/multi-tenant-mailer 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Courier offers a convenient and painless solution for creating emails tailored for your Kirby website.
Creates new sare mail transport for laravel applications
Mail libraries used by Zimbra Api
Extensible library for building notifications and sending them via different delivery channels.
Email+ extends Kirby's email capabilities by adding support for multiple email services using the same Kirby email API.
Mandrill Api Integration for Yii2
统计信息
- 总下载量: 32
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 20
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-10-22
