originphp/email

OriginPHP Email

2.1.0 2021-04-13 11:53 UTC

This package is auto-updated.

Last update: 2024-09-13 19:53:20 UTC


README

license build coverage

Email 类让您能够通过 SMTP 容易地发送电子邮件。

安装

要从命令行安装,请输入

$ composer require originphp/email

邮件配置

在您的引导文件或应用程序配置中。如果您创建了一个默认帐户,则无需指定帐户或配置邮件实例。

Email::config('default',[
    'host' => 'smtp.example.com',
    'port' => 465,
    'username' => 'demo@example.com',
    'password' => 'secret',
    'timeout' => 5,
    'ssl' => true,
    'tls' => false
]);

配置键如下

  • host:这是 SMTP 服务器的主机名
  • port:端口号,默认为 25
  • username:访问此 SMTP 服务器所需的用户名
  • password:访问此 SMTP 服务器所需的密码
  • ssl:默认为 false,如果您想通过 SSL 连接,请设置为 true
  • tls:默认为 false,如果您想启用 TLS,请设置为 true
  • timeout:超时时间(秒)
  • domain:当我们向服务器发送 HELO 命令时,我们必须识别您的主机名,因此我们将使用 localhost 或 HTTP_SERVER 变量,如果客户端未设置。

您还可以在创建 Email 对象实例时传递一个配置数组。

$config = [
    'host' => 'smtp.example.com',
    'port' => 25,
    'username' => 'demo@example.com',
    'password' => 'secret',
    'timeout' => 5,
    'ssl' => true,
    'tls' => false
]
$email = new Email($config);

您还可以传递类似 fromtoccbccsenderreplyTo 的键,将这些数据传递给其函数,如果它只是一个电子邮件,则为字符串,如果要将名称包含在内,则为数组。请记住,如果您打算自动 cc 或 bcc 到某处,则必须调用 addBcc 或 addCc,以确保您不会覆盖此设置。

例如

[
    'from' => ['james@originphp.com' => 'James'],
    'replyTo' => 'no-reply@originphp.com'
    'bcc' => ['someone@origin.php' => 'Someone','another-person@example.com']
]

发送电子邮件

默认的电子邮件发送行为是发送纯文本版本。然而,最好同时发送 HTML 和文本,这可以降低您的电子邮件最终进入垃圾邮件文件夹的风险。

发送电子邮件时,将返回一个 Message 对象;如果发送时遇到错误,则电子邮件类将抛出一个异常,您可以在 try/catch 块中捕获它。

发送电子邮件(文本)

要发送电子邮件

use Origin\Email\Email;
$Email = new Email();
$Email->to('somebody@originphp.com')
    ->from('me@originphp.com')
    ->subject('This is a test')
    ->textMessage('This is the text content')
    ->send();

发送 HTML 和文本版本(推荐)

要发送同时包含 HTML 和文本版本的电子邮件

use Origin\Email\Email;
$Email = new Email();
$Email->to('somebody@originphp.com')
    ->from('me@originphp.com')
    ->subject('This is a test')
    ->textMessage('This is the text content')
    ->htmlMessage('<p>This is the html content</p>')
    ->format('both')
    ->send();

仅发送 HTML 电子邮件

要发送仅包含 HTML 的电子邮件,您需要告诉 Email 工具使用 HTML 格式。

use Origin\Email\Email;
$Email = new Email());
$Email->to('somebody@originphp.com')
    ->from('me@originphp.com')
    ->subject('This is a test')
    ->htmlMessage('<p>This is the html content</p>')
    ->format('html')
    ->send();

添加附件

要将附件添加到电子邮件消息中

use Origin\Email\Email;
$Email = new Email();
$Email->to('somebody@originphp.com')
    ->from('me@originphp.com')
    ->subject('This is a test')
    ->textMessage('This is the text content')
    ->addAttachment($filename1)
    ->addAttachment($filename2,'Logo.png')
    ->send();

使用多个帐户

如果您已使用 Email::config('gmail',$config) 配置,则可以像这样使用它

use Origin\Email\Email;
$Email = new Email('gmail');

或者

use Origin\Email\Email;
$Email = new Email();
$Email->to('somebody@originphp.com')
    ->from('me@originphp.com')
    ->subject('This is a test')
    ->textMessage('This is the text content')
    ->account('gmail')
    ->send();

Oauth2

要配置您的电子邮件帐户以使用 Oauth2 身份验证,而不是提供密码,您可以使用令牌。

 Email::config('gsuite', [
    'host' => 'smtp.gmail.com',
    'port' => 587,
    'username' => 'somebody@gmail.com',
    'token' => 'b1816172fd2ba98f3af520ef572e3a47', // see token generation below
    'ssl' => false,
    'tls' => true
]);

生成令牌

要生成 Oauth2 令牌,您可以使用 thephpleague/oauth2-client 包,或者如果您正在使用 Google(Gsuite/Gmail),则可以使用提供的命令行脚本来完成。此脚本仅适用于从您的个人帐户发送电子邮件,而不是从用户帐户发送。

Google 命令行 OAuth 令牌生成器

Google 客户端库 API 允许您从命令行生成令牌(无需重定向到脚本),我已包括了一个快速脚本。

要获取可用于您的 Gsuite/Gmail 帐户的 Oauth2 令牌,请按照以下说明操作。

  1. 通过访问 https://developers.google.com/gmail/api/quickstart/php 并点击 启用 Gmail API 按钮,然后点击 桌面应用程序,接着点击 下载客户端配置 按钮,来为您电子邮件账户启用 Gsuite API。完成这些操作后,将数据文件保存到 vendor/originphp/email/ 文件夹中的 data/credentials.json 文件。

  2. 通过运行以下命令来安装 Google 客户端库 (PHP):

$ composer require google/apiclient:^2.0
  1. 运行 Google CLI 脚本。
$ vendor/bin/google

现在将 URL 复制到浏览器中,并按照屏幕上的说明操作,这将为您提供一段代码。将代码粘贴到控制台窗口中,您的令牌将显示在屏幕上。令牌 JSON 将保存到 data/token.json 以供将来参考。

  1. 将生成的令牌添加到您的电子邮件配置中。