如何正确配置symfony2 swiftmailer bundle,使其与具有NTLM AUTH的SMTP服务器一起工作


How to correctly configure symfony2 swiftmailer bundle to work with SMTP server with NTLM AUTH?

# Swiftmailer Configuration
swiftmailer:
    transport:  smtp
    host:       10.8.100.1
    port:       25
    username:   user
    password:   pass
    auth_mode:  ~
    encryption: ~
    spool:      { type: memory }

当我尝试通过$this->get('mailer')->send($message);发送消息时,我得到以下错误:

Fatal error: Uncaught exception 'Swift_TransportException' with message 'Failed
to authenticate on SMTP server with username "user" using 0 possible  authenticators'
in /..path../vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:184 Stack trace: #0 

我已经尝试将auth_mode设置为所有可能的值plain, login, cram-md5, or null -仍然是相同的错误信息。


然后我想telnet到SMTP服务器手动检查我是否可以验证(虽然,我100%确定凭据是正确的)。

telnet 10.8.100.1 25

Trying 10.8.100.1...
Connected to 10.8.100.1.
Escape character is '^]'.
220 EXC.acme.local Microsoft ESMTP MAIL Service ready at Wed, 19 Mar 2014 10:34:00 +0100

EHLO EXC.acme.local

250-EXC.acme.local Hello [10.8.100.1]
250-SIZE
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS
250-AUTH NTLM
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XRDST

我不是邮件服务器专家,但我期待AUTH LOGIN在那里…似乎服务器(我无法控制)有不同的身份验证方法(Swiftmailer bundle不支持?),这可能是问题的原因…

我的怀疑正确吗?或者是否有一种方法可以配置Swiftmailer bundle以正确地使用auth NTLM进行认证?

似乎邮件服务器拒绝你的连接(像谷歌一样,如果你试图连接你的gmail帐户,如果你有,和swiftmailer,你会得到同样的问题)

告诉你,为什么你不尝试用Swift_MailTransport代替Swift_SmtpTransport(它使用mail的底层方法,与smtp有点不同)

所以…问题不在于symfony2配置。问题是:

  • 邮箱被配置为在VPN内工作(从域/组中的计算机)
  • 我正试图从我的开发机器发送测试邮件(同时连接到VPN…但是我的电脑不在域/组中)

这也是为什么telnet EXC.acme.local 25不起作用,而telnet 10.8.100.1 25起作用的原因。

所以,当我尝试telnet,然后从我的开发机器EHLO ..它得到了250-AUTH NTLM,但是当我SSH到prod机器(在域/组内)并从那里telnet时:

  • telnet EXC.acme.local 25没有工作
  • EHLO EXC.acme.local返回AUTH LOGIN

一旦我发现,我只是上传我的更改到prod机器,并开始测试配置从那里(与swiftmailer.transport: smtp),它工作!