originphp / email
OriginPHP Email
Requires
- php: >=7.3.0
- ext-mbstring: *
- originphp/configurable: ^2.0
- originphp/defer: ^3.0
Requires (Dev)
- google/apiclient: ^2.8
- phpstan/phpstan: ^0.12.64
- phpunit/phpunit: ^9.2
Suggests
- google/apiclient: Allows you to send email using GMAIL
README
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);
您还可以传递类似 from、to、cc、bcc、sender 和 replyTo 的键,将这些数据传递给其函数,如果它只是一个电子邮件,则为字符串,如果要将名称包含在内,则为数组。请记住,如果您打算自动 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 令牌,请按照以下说明操作。
-
通过访问 https://developers.google.com/gmail/api/quickstart/php 并点击
启用 Gmail API按钮,然后点击桌面应用程序,接着点击下载客户端配置按钮,来为您电子邮件账户启用 Gsuite API。完成这些操作后,将数据文件保存到vendor/originphp/email/文件夹中的data/credentials.json文件。 -
通过运行以下命令来安装 Google 客户端库 (PHP):
$ composer require google/apiclient:^2.0
- 运行 Google CLI 脚本。
$ vendor/bin/google
现在将 URL 复制到浏览器中,并按照屏幕上的说明操作,这将为您提供一段代码。将代码粘贴到控制台窗口中,您的令牌将显示在屏幕上。令牌 JSON 将保存到 data/token.json 以供将来参考。
- 将生成的令牌添加到您的电子邮件配置中。