Не удается войти на внешний сервер IMAP/POP3
Я установил Postfix, Dovecot и MySQL с помощью этого руководства ( https://www.linode.com/docs/email/postfix/troubleshooting-problems-with-postfix-dovecot-and-mysql/).
Когда я делаю следующую команду, я получаю следующий ответ:
$ openssl s_client -connect mail.domain.com:993
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready.
Я могу войти в свои виртуальные учетные записи через консоль, но когда я использую этот PHP-скрипт, он не работает (страница продолжает загружаться).
<?php
$mbox = imap_open("{mail.domain.com:993}", "[email protected]", "password");
?>
Когда я запускаю команду dovecot -n, я получаю следующий вывод:
$ dovecot -n
# 2.2.22 (fe789d2): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.13 (7b14904)
# OS: Linux 4.4.0-130-generic x86_64 Ubuntu 16.04.3 LTS
auth_debug = yes
auth_verbose = yes
log_path = /var/log/dovecot.log
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group = mail
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Trash {
special_use = \Trash
}
prefix =
}
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
protocols = imap pop3 lmtp
service auth-worker {
user = vmail
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service imap-login {
inet_listener imap {
port = 0
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
}
ssl = required
ssl_cert = </etc/dovecot/private/dovecot.crt
ssl_key = </etc/dovecot/private/dovecot.key
userdb {
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
driver = static
}
Я использую брандмауэр "UFW".
$ ufw status
Status: active
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
993 ALLOW Anywhere
995 ALLOW Anywhere
587 ALLOW Anywhere
OpenSSH ALLOW Anywhere
Dovecot POP3 ALLOW Anywhere
Dovecot Secure IMAP ALLOW Anywhere
Dovecot Secure POP3 ALLOW Anywhere
Postfix ALLOW Anywhere
Postfix SMTPS ALLOW Anywhere
Postfix Submission ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
993 (v6) ALLOW Anywhere (v6)
995 (v6) ALLOW Anywhere (v6)
587 (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Dovecot POP3 (v6) ALLOW Anywhere (v6)
Dovecot Secure IMAP (v6) ALLOW Anywhere (v6)
Dovecot Secure POP3 (v6) ALLOW Anywhere (v6)
Postfix (v6) ALLOW Anywhere (v6)
Postfix SMTPS (v6) ALLOW Anywhere (v6)
Postfix Submission (v6) ALLOW Anywhere (v6)
Это проблема с брандмауэром? Кажется, я могу подключиться только с локального хоста, а не с удаленного.
Заранее спасибо.
PS: если вам нужно больше информации, я буду рад поделиться. Но я не знаю точно, какая информация вам нужна для решения этой проблемы.
Изменить: мой SMTP-сервер также не работает. Я проверил это с помощью этого ( https://www.wormly.com/test-smtp-server) инструмента.
Выход:
Resolving hostname...
Connecting...
Connection: opening to mail.domain.com:25, timeout=300, options=array (
)
Connection: opened
SERVER -> CLIENT: 220 mail.domain.com ESMTP Postfix (Ubuntu)
CLIENT -> SERVER: EHLO tools.wormly.com
SERVER -> CLIENT: 250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 454 4.7.0 TLS not available due to local problem
SMTP ERROR: STARTTLS command failed: 454 4.7.0 TLS not available due to local problem
2018-07-07 17:06:08 SMTP Error: Could not connect to SMTP host.
CLIENT -> SERVER: QUIT
SERVER -> CLIENT: 221 2.0.0 Bye
Connection: closed
2018-07-07 17:06:08 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Message sending failed.
1 ответ
В основном вы imap_open()
поток IMAP в почтовый ящик, ничего не делать с ним и оставить его открытым без imap_close()
, Поскольку распечатывать нечего, но сценарий еще не завершен, ожидается загрузка пустой страницы. Вы можете, вероятно, подтвердить это из mail.log
показывая связь. После вашего imap_open()
попробуйте, например, это из примера № 2:
$folders = imap_listmailbox($mbox, "{imap.example.org:143}", "*"); if ($folders == false) { echo "Call failed<br />\n"; } else { foreach ($folders as $val) { echo $val . "<br />\n"; } } imap_close($mbox); ?>
Также SMTP-соединение из последнего теста открывается и закрывается после STARTTLS
, Это определенно не брандмауэр, а проблема конфигурации Postfix TLS.