维护良好的PHP SMTP auth类,无需发送电子邮件(登录测试)?

时间:2012-06-28 16:14:16

标签: php smtp exchange-server ssl

我想实现另一种登录方法(对于@ mother_company.xyz类型的电子邮件)并强加它。

原因是离开电子邮件提供商(在这种情况下为Exchange)处理密码恢复,密码存储以防止密码被盗,并使邮件服务器管理员离开帐户arround的工作(同样,邮件地址所有者验证被删除,该帐户可以在首次登录时自动创建。

我看过Zend_Mail和Pear Net :: SMTP,他们似乎不允许只进行SMTP身份验证,他们需要发送电子邮件。

(最好是独立的,最好是维护的)存在一个PHP SMTP类,它可以执行所有SMTP身份验证类型+所有加密方法(SSL,TLS,StartTLS等) 。)并且不需要针对所提出的目的进行修改(它还必须返回有用的代码以确定登录是成功还是失败)

如果这样的类可以通过试验(仅基于域名)自动配置SMTP连接数据,然后返回配置以进行缓存/存储,那将是很好的。

2 个答案:

答案 0 :(得分:1)

不确定您想要如何处理此问题。 SMTP AUTH只是一个由邮件客户端发送到邮件服务器的命令,该邮件服务器根据某种数据库对客户端进行身份验证。我猜你的想法是以某种方式有一个“假的”php邮件客户端,可以通过身份验证的动作,然后返回AUTH命令是否成功。

我可以想到可能的工作方式,但我不知道维持的课程,我怀疑你会找到一个,因为这是一种“hacky”的做事方式。

如果它是您的身份验证交换,为什么不使用LDAP身份验证。它很容易做到,php LDAP模块是为你和你正确实现的身份验证(这总是一件好事)

答案 1 :(得分:1)

php5有Swiftmailer邮件工具。它由several components组成。其中一个组件是Swift_SmtpTransport。它扩展了Swift_Transport_EsmtpTransport,它是高度可配置的类。你可以使用这个类的start()方法来检查AUTH请求是否成功

require_once("lib/swift_required.php");

$swiftMailerSMTP=Swift_SmtpTransport::newInstance("smtp.gmail.com", 587, "tls")
    ->setUsername("john.doe@domain.tld")
    ->setPassword("iforgotmypassword")
;

//throws Swift_TransportException on auth failure
$swiftMailerSMTP->start();

//end the connection, just in case the current script is going to run for a long while
$swiftMailerSMTP->stop();
$swiftMailerSMTP=null;