molnix/bounced-mail-manager

检查退信邮件并对它们采取行动。

v2.1.0 2023-12-11 12:51 UTC

This package is auto-updated.

Last update: 2024-09-11 14:33:14 UTC


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邮箱。

设置需要在两个部分中完成,

  1. Azure网络门户
  2. Powershell

Azure网络门户

  1. 在Azure中注册应用

Screenshot from 2023-12-04 17-12-11

  1. 设置权限,单击 API权限 -> 我的组织使用的API 标签 -> 搜索 Office 365 Exchange Online -> 应用程序权限 -> IMAP.AccessAsApp

Screenshot from 2023-12-04 17-20-23

  1. 通过单击按钮 授予管理员同意

Screenshot from 2023-12-04 17-21-44

  1. 创建应用程序密钥。创建后,将其值复制出来,因为它只显示一次。

Screenshot from 2023-12-04 17-25-49

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();

MolnixWebbhuset 在芬兰用❤️制作