如何在PHP中发送电子邮件之前验证SMTP凭据?

5

由于很难找到答案,我认为这可能是不可能的。如果是这样,请确认它是不可能的。

3个回答

7

使用最新版本的PHPMailer,可以非常简单地完成。

require_once 'phpmailer/class.phpmailer.php';
require_once 'phpmailer/class.smtp.php';

$mail = new PHPMailer(true);
$mail->SMTPAuth = true;
$mail->Username = 'email@example.com';
$mail->Password = 'my_awesome_password';
$mail->Host = 'smtp.example.com';
$mail->Port = 465;

// This function returns TRUE if authentication
// was successful, or throws an exception otherwise
$validCredentials = $mail->SmtpConnect();

你可能需要根据目标SMTP服务更改端口号并启用SSL。例如,Gmail需要使用SSL连接。
要启用SSL,请添加$mail->SMTPSecure = 'ssl';
注意:PHPMailer在失败时会抛出异常。例如,用户名/密码不匹配可能会触发异常。为了避免错误消息在页面上随处打印,请将函数放在try/catch块中。
$validCredentials = false;

try {
    $validCredentials = $mail->SmtpConnect();
}
catch(Exception $error) { /* Error handling ... */ }

这应该是被接受的答案。它帮助了我很多。一开始我也遇到了错误,直到我看到了你回答的后半部分。这对我有用。 - Thomas Williams
这是我在过去几天一直在寻找的答案,谢谢 @caiosm1005。 - bharat savani
@caiosm1005 这个链接已经失效了,也许可以更新为 https://github.com/PHPMailer/PHPMailer 或者 https://packagist.org/packages/phpmailer/phpmailer ?但是更新队列已满,所以我无法编辑它。 - jirig
@jirig 很抱歉,我花了差不多一整年才看到这个消息。链接已更新。 - undefined

1

这并非不可能。

您可以自己编写SMTP交互程序,并在SMTP协议中检查凭据是否被接受的确认。对于这种方法,您需要与SMTP服务器进行套接字级通信(例如使用[PHP Sockets]服务1)。

要了解SMTP协议的工作原理,请尝试手动使用Telnet进行操作。

http://technet.microsoft.com/en-us/library/aa995718(v=exchg.65).aspx


嗯,微软的链接,我听说微软甚至不遵守所有的SMTP标准。但你已经回答了这个问题。这是可能的,只是有点棘手。 - Farzher
@StephenSarcsamKamenar:如果你在谷歌上搜索“smtp telnet”,就会有很多基于Linux的教程 :-) 我最近正好用了那个,所以知道它是完整的。 - Eric J.

0

我已经在使用一个库来发送SMTP电子邮件,这不是问题。请阅读标题。 - Farzher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接