我在将 Symfony Mailer 与 Exchange Server 2016 结合使用时遇到了一些困难。
当我尝试时,我发现 Swift Mailer 具有原生 NTML 支持,但它给了我这个我无法克服的错误消息。
PHP 致命错误:未捕获 Swift_TransportException:无法使用 1 个可能的身份验证器使用用户名“域\用户名”在 SMTP 服务器上进行身份验证。身份验证器 NTLM 返回预期响应代码 235,但收到代码“535”,并显示消息“535 5.7.3 身份验证失败
然后我在 Swift 网站上看到了这条消息:
请尽早转移到 Symfony Mailer。 Symfony Mailer 是 Swift Mailer 的下一代发展。它提供相同的功能,支持现代 PHP 代码并支持第三方提供商。
我安装了 Symfony Mailer,但注意到它不支持 NTML。有人将
NtmlAuthenticator.php
从 Swift Mailer 移植到 Symfony Mailer。我尝试过实现这个,但无法弄清楚这个 NtmlAuthenticator 需要如何实现。
它给了我
PHP 致命错误:未捕获错误:在 /var/www/cfs-tools/App/mailtest.php:15 中找不到类“NtlmAuthenticator”
这是我的代码:
<?php
require '../vendor/autoload.php';
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\File;
use Symfony\Component\Mailer\Transport\Smtp\Auth\AuthenticatorInterface;
$transport = (new Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport
('smtp.testdomain.com', 25))
->setUsername('testdomain\testemail')
->setPassword('password')
->setAutoTls(false);
$transport->setAuthenticators([new NtlmAuthenticator()]);
$mailer = new Mailer($transport);
$email = (new Email())
->from('[email protected]')
->to("[email protected]")
->subject('Test Mail Subject')
->html('<p>Test Email Symfony</p>');
$mailer->send($email);
我的设置: PHP 8.2.13
Exchange 服务器 2016
symfony/邮件程序7.2.0
您没有导入
NtlmAuthenticator()
。
我不知道它的完整路径,您应该在包的文档中找到它,或者您可以在供应商目录中的composer.json中检查它。
应该看起来像
use Vendor\NtlmAuthenticator;\