molnix / bounced-mail-manager
检查退信邮件并对它们采取行动。
v2.1.0
2023-12-11 12:51 UTC
Requires
- php: ^7.1|^8.0
- guzzlehttp/guzzle: ^7.0
- nesbot/carbon: ^2.71
- webklex/php-imap: ^5.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.27
- phpmailer/phpmailer: ^6.9
README
一个包可以读取IMAP并解析邮件来检查它们是否是退信邮件。当与laravel一起使用时,可以通知原始发送者。
安装
composer require molnix/bounced-mail-manager
将 getCustomHeaders
方法创建的自定义标题添加到发出的邮件中。
Molnix\BouncedMailManager\Message\Header::getCustomHeaders( string $sender, // Sender email to send notificaitons string $sentTo, // send to email string $subject ='' optional subject ): array
Laravel
包可以使用可选的env变量进行自定义
配置
包将自动注册服务提供者。您可以进行发布以进行进一步自定义。
如果需要进一步自定义,可以选择发布文件。
php artisan vendor:publish --provider="Molnix\BouncedMailManager\BounceManagerServiceProvider" --tag="config" php artisan vendor:publish --provider="Molnix\BouncedMailManager\BounceManagerServiceProvider" --tag="views" php artisan vendor:publish --provider="Molnix\BouncedMailManager\BounceManagerServiceProvider" --tag="translations"
用法
在Mailable中使用 Molnix\BouncedMailManager\Traits\BounceMailHeaders
特性来添加标题到发出的标题中。
选项1:有设置
// PostMail use BounceMailHeaders; public function __construct(Comment $comment) { $this->comment = $comment; $this->setupBounceManager(); } public function build(){ $this->subject('Comment added') ->markdown('emails.comment') ->addBounceManagerHeaders(); }
选项2:无设置
// PostMail use BounceMailHeaders; public function __construct(Comment $comment, $sender) { $this->comment = $comment; $this->sender = $sender; } public function build(){ $this->subject('Comment added') ->markdown('emails.comment') ->addBounceManagerHeaders($this->sender); }
将此命令添加到调度器中。
php artisan bouncemanager:run
PHP
- #### Create instance ```php use Molnix\BouncedMailManager\BounceManager; $manager = new BounceManager( 'imap.example.com', '993', 'wind@example.com', 'emailpassword', string $mailbox = 'INBOX', array $options = [] // extra optional options );
或
use Molnix\BouncedMailManager\BounceManager; use Molnix\BouncedMailManager\Clients\ImapClient; $manager->setClient(new ImapClient( 'imap.example.com', '993', 'wind@example.com', 'emailpassword', string $mailbox = 'INBOX', array $options = [] // extra optional options ));
或Office 365方式
use Molnix\BouncedMailManager\BounceManager; use Molnix\BouncedMailManager\Clients\O365Client; $manager = new BounceManager(); $manager->setClient(new O365Client('wind@example.com', $tenant_id, $client_id, $client_secret));
$manager->setMailbox('OtherMailbBoxName');
// Use -1 for all mails. $manager->setDaysFrom(10); // Since last 10 days
$manager->enableDeleteMode(); // Since last 10 days
$manager->toArray(); // Returns simple array of bounces. $manager->get(); // Returns array of bounces objects.
设置Office 365邮箱。
设置需要在两个部分中完成,
- Azure网络门户
- Powershell
Azure网络门户
Powershell
按顺序逐个在Powershell中运行以下命令。请记住,用 $AppId
的 应用程序(客户端)ID
替换值,用 $TenantId
替换 目录(租户)ID
。这些可以在Azure网络门户中的应用页面中找到。您的电子邮件ID
是您授予访问权限的邮箱。
Install-Module -Name AzureAD Install-Module -Name ExchangeOnlineManagement $AppId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" $TenantId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Import-module AzureAD Connect-AzureAd -Tenant $TenantId ($Principal = Get-AzureADServicePrincipal -filter "AppId eq '$AppId'") $PrincipalId = $Principal.ObjectId $DisplayName = "Bounce manager IMAP Access" Import-module ExchangeOnlineManagement Connect-ExchangeOnline -Organization $TenantId New-ServicePrincipal -AppId $AppId -ServiceId $PrincipalId -DisplayName $DisplayName Add-MailboxPermission -User $PrincipalId -AccessRights FullAccess -Identity "Your email ID"
用法
use Molnix\BouncedMailManager\BounceManager; use Molnix\BouncedMailManager\Clients\O365; $manager = new BounceManager(); $manager->setClient(new O365('wind@example.com', $tenant_id, $client_id, $client_secret)); $manager->get();