ezstoritve / m365-mail
Laravel M365 Mail Package 使用 MSGraph API
v1.1.6
2024-09-02 17:16 UTC
Requires
- php: ^8.1
- laravel/framework: ^10.0
- spatie/laravel-package-tools: ^1.14.0
- symfony/mailer: ^6.0|^7.0
README
Laravel M365 Mail Package
此包提供对 Microsoft M365 邮件功能的无缝访问,允许您轻松地将电子邮件处理集成到您的 Laravel 应用程序中。它支持使用 Microsoft Graph API 发送和读取电子邮件,使得直接从您的代码中处理 M365 邮箱变得容易。使用此包,您可以利用发送、获取电子邮件和下载附件等功能,同时通过 Microsoft Azure 应用凭证安全地管理身份验证。
安装
您可以通过 composer 安装此包
// add repository to composer.json in your project - not needed anymore as package is on https://packagist.org.cn/packages/ezstoritve/m365-mail "repositories": [ { "type": "vcs", "url": "https://github.com/ezstoritve/m365-mail.git" } ], // install package composer require ezstoritve/m365-mail
配置
注册并配置 Microsoft Azure 应用
配置您的 Laravel 应用程序
要集成 m365-mail 驱动程序,请先在您的 config/mail.php 配置文件中的 mailers 数组中添加一个新条目
'mailers' => [ 'm365-mail' => [ 'transport' => 'm365-mail', 'tenant_id' => env('MICROSOFT_GRAPH_TENANT_ID'), 'client_id' => env('MICROSOFT_GRAPH_CLIENT_ID'), 'client_secret' => env('MICROSOFT_GRAPH_CLIENT_SECRET'), 'from_address' => env('MAIL_FROM_ADDRESS'), 'from_name' => env('MAIL_FROM_NAME') ], ... ]
此条目配置了 m365-mail 传输并设置了所需的凭证和发件人信息。
接下来,在您的 .env 文件中配置以下变量以使用 Microsoft Azure 应用的凭证
MAIL_MAILER=m365-mail MICROSOFT_GRAPH_TENANT_ID="your_tenant_id" MICROSOFT_GRAPH_CLIENT_ID="your_client_id" MICROSOFT_GRAPH_CLIENT_SECRET="your_client_secret_value" MAIL_FROM_ADDRESS="from.mail@domain.com" MAIL_FROM_NAME="from_name"
这些变量将用于通过 Microsoft Graph API 进行身份验证和发送电子邮件,确保您的 Laravel 应用程序正确连接到您的 Azure 设置。
使用方法
Mail::send 方法以及回调中的 $m 对象接受所有标准 Laravel 参数,包括
- To, Cc, Bcc:指定收件人。
- Subject:设置电子邮件主题。
- From:定义发件人的电子邮件。
- ReplyTo:设置回复地址。
- 附件:将文件附加到电子邮件。
- 正文(文本或 HTML):编写电子邮件内容。
这些参数允许在应用程序中对电子邮件消息进行全面自定义。
示例代码
Mail::send('blade.file', [], function ($m) { $m->to('email.to@domain.com', 'Recipient Name') ->subject('Mail subject') ->getHeaders()->addTextHeader('X-Save', 'true'); // save an email to the sent items folder - optional });
Mail::read 函数接受以下参数
- FolderPath(Inbox\Folder1...):指定要从中读取的 Microsoft 365 邮箱中的哪个文件夹。
- Mailbox(用户电子邮件):要读取的用户邮箱的电子邮件地址。
- GetFiles(true, false):确定是否检索附件内容Bytes,允许手动下载。
- Download(true, false):自动将附件下载到指定的文件夹。
- FilePath(例如,public_path('temp')):允许您为下载的文件设置自定义路径。
此代码可以根据您的特定要求进行自定义。
示例代码
$folderPath = 'Inbox\Folder1'; $mailbox = 'user.mail@domain.com'; $result = Mail::read([ MailReadParams::FolderPath => $folderPath, MailReadParams::Mailbox => $mailbox, MailReadParams::GetFiles => false ], function ($emails) { $output = ''; foreach ($emails as $email) { $output .= '<h3>' . htmlspecialchars($email['subject']) . '</h3>'; $output .= '<p>From: ' . htmlspecialchars($email['fromName']) . ' (' . htmlspecialchars($email['from']) . ')</p>'; $output .= '<p>To: ' . htmlspecialchars(implode(', ', array_column($email['to'], 'address'))) . '</p>'; $output .= '<p>CC: ' . htmlspecialchars(implode(', ', array_column($email['cc'], 'address'))) . '</p>'; $output .= '<p>BCC: ' . htmlspecialchars(implode(', ', array_column($email['bcc'], 'address'))) . '</p>'; $output .= '<p>Date: ' . htmlspecialchars($email['receivedDateTime']) . '</p>'; $output .= '<p>' . htmlspecialchars($email['bodyPreview']) . '</p>'; if (!empty($email['attachments'])) { $output .= '<p>Attachments:</p><ul>'; foreach ($email['attachments'] as $attachment) { $output .= '<li>' . htmlspecialchars($attachment['name']) . '</li>'; //$output .= '<li>' . htmlspecialchars($attachment['contentBytes']) . '</li>'; } $output .= '</ul>'; } $output .= '<hr>'; } return $output; }); print_r($result);
Mail::read 方法返回一个包含以下字段的数组
- id:电子邮件的唯一标识符。
- subject:电子邮件的主题行。
- from:发件人的电子邮件地址。
- fromName:发件人的显示名称。
- bodyPreview:电子邮件正文的预览。
- receivedDateTime:电子邮件接收的时间戳。
- hasAttachments:布尔值,指示电子邮件是否有附件。
- to:收件人数组,包括他们的地址和姓名。
- cc:CC 收件人数组,包括他们的地址和姓名。
- bcc:BCC 收件人数组,包括他们的地址和姓名。
- attachments:附件数组,每个附件包括文件名和 contentBytes(如果 GetFiles 为 true,允许手动下载)。
$emailDetails = [ 'id' => $email['id'], 'subject' => $email['subject'], 'from' => $email['from']['emailAddress']['address'], 'fromName' => $email['from']['emailAddress']['name'], 'bodyPreview' => $email['bodyPreview'], 'receivedDateTime' => $email['receivedDateTime'], 'hasAttachments' => $email['hasAttachments'], 'to' => array_map(fn($recipient) => [ 'address' => $recipient['emailAddress']['address'], 'name' => $recipient['emailAddress']['name'], ], $email['toRecipients'] ?? []), 'cc' => array_map(fn($recipient) => [ 'address' => $recipient['emailAddress']['address'], 'name' => $recipient['emailAddress']['name'], ], $email['ccRecipients'] ?? []), 'bcc' => array_map(fn($recipient) => [ 'address' => $recipient['emailAddress']['address'], 'name' => $recipient['emailAddress']['name'], ], $email['bccRecipients'] ?? []), 'attachments' => [ 0 => [ 'name' => 'file name', 'contentBytes' => '' // if GetFiles is set to true - you can manualy download files in Mail:read function ], ... ] ];
更新日志
有关最近更改的更多信息,请参阅 更新日志
鸣谢
许可证
麻省理工学院许可证(MIT)。更多信息请参阅许可证文件。