在laravel中替代swiftmailer

Kim*_*cks 5 php swiftmailer laravel

我有一个问题,使用swiftmailer与客户端的SMTP微软Exchange服务器.

要进行故障排除,我正在考虑用其他东西更换swiftmailer.

我的整个设置都在内部网络上.所以根本没有mailgun或sendgrid.

如何在Laravel中为swiftmailer使用替代库以进行故障排除?

这也是我在Laravel上尝试使用swiftmailer时得到的日志

<< 250-xxx.internal.abc.com Hello [xxx.xx.xxx.xx]
250-SIZE 36700160
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-AUTH
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XSHADOW

>> STARTTLS

<< 500 5.3.3 Unrecognized command

!! Expected response code 220 but got code "500", with message "500 5.3.3 Unrecognized command
Run Code Online (Sandbox Code Playgroud)

我试过的是什么(一)

有人让我尝试MAIL_ENCRYPTION为null和dd(config('mail.encryption')),所以下面是答案:

码:

    try { 
        Mail::send('emails.test', [], function ($m) {
        $m->from('xxx@client.com', 'Your Application')->to('me@me.com');
        dd(config('mail.encryption'));
        var_dump('executed');
    });
     } catch (Exception $e) {
        var_dump($e->getMessage()); 
        var_dump($e->getTraceAsString());
    }  
Run Code Online (Sandbox Code Playgroud)

结果: null 打印出来的字符串executed不是.

我试过的是(II):

明确使用加密设置为null的swiftmailer传输

  try {
    // Create the Transport
    $transport = \Swift_SmtpTransport::newInstance();

    $transport->setUsername('xxx@client.com')
    ->setPort(25)
    ->setHost('smtp.internal.client.com')
    ->setEncryption(null);

    // Create the Mailer using your created Transport
    $mailer = \Swift_Mailer::newInstance($transport);

    $logger = new \Swift_Plugins_Loggers_ArrayLogger();
    $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));


    $message = new \Swift_Message('Wonderful Subject');
    $message->setFrom(['xxx@client.com' => 'John Doe']);
    $message->setTo(['me@me.com'])->setBody('Here is the message itself');

    // // Send the message
    $numSent = $mailer->send($message);
    } catch(\Swift_TransportException $e) {
        var_dump('test');
        var_dump($e->getMessage()); 
        var_dump($e->getTraceAsString());
    }
Run Code Online (Sandbox Code Playgroud)

结果:

www-data@server:~/html/laravel-app$ php artisan email:send
string(4) "test"
string(127) "Failed to authenticate on SMTP server with username "xxx@client.com" using 0 possible authenticators"
string(2503) "#0 /var/www/html/a3qp/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(332): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport))
Run Code Online (Sandbox Code Playgroud)

我尝试了第(III)部分:

与第二部分相同,但明确将加密设置为'tls'.我得到的错误信息与最顶层的错误信息相同.

我尝试的是第(IV)部分:

有人让我在第一部分中取出dd系列这是我得到的

string(8) "executed"
[Swift_TransportException]
Failed to authenticate on SMTP server with username "xxx@client.com" using 0 possible authenticators
Run Code Online (Sandbox Code Playgroud)

更新

  1. 我使用SMTP到我客户端基础结构中的MS Exchange服务器.我无法访问该服务器的SMTP日志,因此很难进行故障排除.代码完全是内联网.无法访问外部互联网服务,我不应该使用mailgun或任何其他smtp云服务来发送客户的内部消费交易电子邮件.
  2. 我有另一个代码使用遗留的cakephp 2系统,可以使用相同的SMTP邮件服务器,没有任何问题.
  3. 我在google邮件上测试了我的laravel SMTP设置.它工作正常.
  4. 我的故障排除的下一步是查看它是swiftmailer还是问题所在的laravel的其余部分.因此这篇文章.
  5. 是的,我试图抓住负责Exchange服务器的IT团队,但他们在另一个国家.我还在努力.
  6. 我知道我正在重复第2点,但评论表明这一点不够明确.我在传统的cakephp 2系统上使用完全相同的SMTP设置来发送电子邮件,没有问题.因为我无法掌握负责交换服务器的IT团队,加上SMTP设置确实适用于另一个cakephp 2系统,我觉得我应该尝试在laravel系统上对其进行故障排除以确定.
  7. 我通过更改.env文件尝试了PHP邮件和sendmail.我没有触发任何错误消息,但我似乎也没有收到任何电子邮件.
  8. 有关用于测试SMTP的代码的详细信息,请参阅我尝试的第I部分,第II部分,第III部分,第IV部分

pat*_*cus 5

您尝试连接的 SMTP 服务器不理解该STARTTLS命令。为了防止该STARTTLS命令被尝试,您必须通过在文件中设置MAIL_ENCRYPTION环境变量来禁用加密。null.env

下一个问题是,根据EHLO响应,SMTP 服务器不接受任何身份验证方法。如果是这样,该行250-AUTH还将包括它接受的方法(例如250-AUTH PLAIN DIGEST-MD5)。

为了防止身份验证尝试,您必须在文件中设置MAIL_USERNAME环境变量。null.env

总而言之,您的.env文件应该包含以下几行:

MAIL_ENCRYPTION=null
MAIL_USERNAME=null
Run Code Online (Sandbox Code Playgroud)

这将禁用 tls 加密并禁用身份验证。