当我以imap授权的登录形式使用错误的密码和电子邮件时,如何避免出现警告?

时间:2018-09-09 13:23:24

标签: php imap

当我在imap_open的登录表单中使用错误的密码和电子邮件时,如何避免此警告和通知:

  

警告:“ imap_open():无法打开流{imap.gmail.com:993/imap/ssl/novalidate-cert}收件箱”和

     

注意:未知:IMAP协议错误:客户端中止了AUTHENTICATE命令。 i145-v6mb122753825lfi(errflg = 2)在第0行上未知

     

通知:未知:在第0行的“未知”中取消了IMAP身份验证(errflg = 2)

当我使用错误的密码和电子邮件,关闭imap连接并回显类似“错误的密码或电子邮件!”时,我需要进行一些检查。我试图避免这种情况,但是它不起作用。请告诉我,我做错了。

功能imap_open:

function open_mailbox($auth_user, $auth_password) {
    $mailbox = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
    if($imap = imap_open($mailbox, $auth_user, $auth_password)){
        imap_open($mailbox, $auth_user, $auth_password);
        echo "success";
    } else {
        imap_close($imap);
        echo 'fail';
    }
}

登录表单的功能

function display_login_form($action) { ?>
<form method="post" action="index.php?action=log-in">
    <div>
        <div>
            <div>
                <p>LOGIN</p>
            </div>
            </br>
            <div>
                <div>
                    <div>
                        <p>MAIL</p>
                    </div>
                    <div>
                        <input type="text" name="username" required>
                    </div>
                </div>
                </br>
                <div>
                    <div>
                        <p>PASSWORD</p>
                    </div>
                    <div>
                        <input type="password" name="password" required>
                    </div>
                </div>
                </br>
                <div>
                    <input type='submit' value='LOGIN'>
                </div>
            </div>
        </div>
    </div>
</form>

index.php

$username = "";
$password = "";
if(isset($_POST['username']) && !empty($_POST['username'])){
    $username = $_POST['username'];
}
if(isset($_POST['password']) && !empty($_POST['password'])){
    $password = ($_POST['password']);
}
if(null!==($username && $password)) {
    if(open_mailbox($username, $password)) {
        $action = 'view-mailbox';
        $_SESSION['auth_user'] = $username;
        $_SESSION['auth_password'] = $password;
    } else {
        $status .= "<p>Wrong password or email</p>";
   }
}

1 个答案:

答案 0 :(得分:0)

您可以使用imap_errors()摆脱警告和通知:

  

调用imap_errors()时,随后将清除错误堆栈。

     

Source

在调用imap_close()之前先调用它。


还要注意,您在此块中两次调用imap_open(),一次是在if条件内的赋值中,一次是在其后:

if($imap = imap_open($mailbox, $auth_user, $auth_password)){
    imap_open($mailbox, $auth_user, $auth_password);
    echo "success";
}

这不是必需的。如果$imap = imap_open($mailbox, $auth_user, $auth_password)分配未返回FALSE,则无需再次打开imap。