簡體   English   中英

PHP imap僅適用於IP地址,不適用於域名-DNS問題?

[英]PHP imap only works with IP address, not with domain name - DNS issue?

我正在使用PHP的imap_*功能顯示電子郵件的簡單列表:

$connection = "{mail-server:993/ssl/novalidate-cert}INBOX";
$imap = imap_open($connection, 'my-login', 'my-pass');
$check = imap_check($imap);
$overview = imap_fetch_overview($imap, "1:{$check->Nmsgs}", 0);
foreach ($overview as $msg) {
    echo "{$msg->msgno} ({$msg->date}), from {$msg->from}: {$msg->subject}\n";
}
imap_close($imap);

我正在連接到同一台機器。 這工作得很好,我看到了電子郵件列表。 但是,在頁面的最底部,將顯示一個通知:

注意:未知:無法連接到郵件服務器,993:在第0行的未知中,連接被拒絕(errflg = 1)

當我將域名或localhost(!)用作郵件服務器時,將顯示此通知。 當我使用IP地址或127.0.0.1時,一切正常。 我從這個問題中得到了這個主意。


我從機器本身為域名和本地主機做了nslookup。 兩者都返回正確的IP地址,但是,兩者也都表明它是“非權威性答案”。

這是/etc/hosts的內容:

127.0.0.1   localhost
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

我不明白nslookup localhost如何在主機文件中提供127.0.0.1作為非權威性答案。


無論如何,PHP發出此通知是因為DNS不具有權威性,對嗎? 如果是這樣,我該如何解決? 如果沒有,我該如何解決?

DNS沒有其他問題。 我可以使用其域名從任何地方訪問該計算機。 另請注意,當我使用域名時,PHP實際上可以連接-它也發出通知。

同樣,在具有相同連接的遠程計算機上使用雷鳥也沒有問題。

我正在為IMAP服務器運行Ubuntu 14.04,PHP 5.5.9和Dovecot 2.2.9。

當您的查詢解析為IPv6地址,但您的服務器未配置為支持IPv6時,可能會發生這種情況。 客戶端將首先嘗試IPv6地址,然后在失敗時嘗試IPv4地址。

您可以通過從行中刪除localhost來檢查是否是這種情況:

::1     localhost ip6-localhost ip6-loopback

在您的hosts文件中。

權威/非權威DNS查詢在這里沒有任何區別。 有關更多信息,請參見https://serverfault.com/q/413124/265582

您也可以讓dovecot接受ipv6連接。 如何執行取決於您的配置。 如果您有inet_listener塊,請確保address行包含:: 例如:

inet_listener {
  address = *, ::
  port = 143
}
inet_listener {
  address = *, ::
  port = 993
  ssl = yes
}

如果沒有inet_listener塊,請將listen指令更改為:

listen=[::]

在這兩種情況下,這都會使dovecot在ipv4和ipv6連接上進行偵聽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM