谷歌已于 2022 年 5 月 30 日停止支持用户/密码身份验证。
如果没有 xoauth2 的支持,imap_open 将无法再使用。
https://support.google.com/accounts/answer/6010255
有一个来自 2020 年的待办事项,但没有完成。
https://wiki.php.net/todo/ext/imap/xoauth2
唯一的方法是切换到第三方库“php-imap”。
太可惜了。
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_open — 打开到邮箱的 IMAP 流
$mailbox
,$user
,$password
,$flags
= 0,$retries
= 0,$options
= []打开到 mailbox
的 IMAP 流。
此函数也可以用来打开到 POP3 和 NNTP 服务器的流,但某些函数和功能仅在 IMAP 服务器上可用。
mailbox
邮箱名称由服务器和该服务器上的邮箱路径组成。特殊名称 INBOX
代表当前用户的个人邮箱。包含除可打印 ASCII 空间以外的国际字符的邮箱名称必须使用 imap_utf7_encode() 编码。
除非 imap.enable_insecure_rsh 被禁用,否则将不可信数据传递给此参数是不安全的。
服务器部分,用 '{' 和 '}' 包围,由服务器名称或 IP 地址、可选端口(以 ':' 为前缀)和可选协议规范(以 '/' 为前缀)组成。
服务器部分在所有邮箱参数中都是强制性的。
所有以 {
开头的名称都是远程名称,形式为 "{" remote_system_name [":" port] [flags] "}" [mailbox_name]
,其中
remote_system_name
- 服务器的互联网域名或带括号的 IP 地址。
port
- 可选 TCP 端口号,默认为该服务的默认端口
flags
- 可选标志,请参见下表。
mailbox_name
- 远程邮箱名称,默认为 INBOX
标志 | 说明 |
---|---|
/service= service |
邮箱访问服务,默认为 "imap" |
/user= user |
服务器上登录的远程用户名 |
/authuser= user |
远程身份验证用户;如果指定了,则为使用其密码的用户(例如管理员) |
/anonymous |
以匿名用户身份进行远程访问 |
/debug |
在应用程序的调试日志中记录协议遥测数据 |
/secure |
不要通过网络传输明文密码 |
/imap , /imap2 , /imap2bis , /imap4 , /imap4rev1 |
等效于 /service=imap |
/pop3 |
等效于 /service=pop3 |
/nntp |
等效于 /service=nntp |
/norsh |
不要使用 rsh 或 ssh 建立预身份验证的 IMAP 会话 |
/ssl |
使用 Secure Socket Layer 加密会话 |
/validate-cert |
验证来自 TLS/SSL 服务器的证书(这是默认行为) |
/novalidate-cert |
不要验证来自 TLS/SSL 服务器的证书,如果服务器使用自签名证书,则需要此选项 |
/tls |
强制使用 start-TLS 加密会话,并拒绝连接到不支持它的服务器 |
/notls |
不要使用 start-TLS 加密会话,即使是支持它的服务器 |
/readonly |
请求只读邮箱打开(仅限 IMAP;在 NNTP 上忽略,在 SMTP 和 POP3 上为错误) |
user
用户名
password
与 user
关联的密码
flags
flags
是一个位掩码,包含以下一个或多个
OP_READONLY
- 以只读方式打开邮箱
OP_ANONYMOUS
- 不要使用或更新新闻的 .newsrc(仅限 NNTP)
OP_HALFOPEN
- 对于 IMAP 和 NNTP 名称,打开连接但不打开邮箱。
CL_EXPUNGE
- 在邮箱关闭时自动清除邮箱(另请参见 imap_delete() 和 imap_expunge())
OP_DEBUG
- 调试协议协商
OP_SHORTCACHE
- 短(仅 elt
)缓存
OP_SILENT
- 不要传递事件(内部使用)
OP_PROTOTYPE
- 返回驱动程序原型
OP_SECURE
- 不要进行非安全身份验证
retries
最大连接尝试次数
options
连接参数,可以使用以下(字符串)键设置一个或多个连接参数
DISABLE_AUTHENTICATOR
- 禁用身份验证属性
成功时返回一个 IMAP\Connection 实例,失败时返回 false
。
版本 | 说明 |
---|---|
8.1.0 | 现在返回一个 IMAP\Connection 实例;以前返回的是 资源。 |
示例 #1 imap_open() 的不同用法
<?php
// 要连接到在本地机器上的端口 143 上运行的 IMAP 服务器,
// 请执行以下操作:
$mbox = imap_open("{localhost:143}INBOX", "user_id", "password");
// 要连接到本地服务器上的端口 110 上的 POP3 服务器,请使用:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");
// 要连接到 SSL IMAP 或 POP3 服务器,请在协议
// 规范之后添加 /ssl:
$mbox = imap_open ("{localhost:993/imap/ssl}INBOX", "user_id", "password");
// 要连接到具有自签名证书的 SSL IMAP 或 POP3 服务器,
// 请在协议规范之后添加 /ssl/novalidate-cert:
$mbox = imap_open ("{localhost:995/pop3/ssl/novalidate-cert}", "user_id", "password");
// 要连接到本地服务器上的端口 119 上的 NNTP 服务器,请使用:
$nntp = imap_open ("{localhost:119/nntp}comp.test", "", "");
// 要连接到远程服务器,请将 "localhost" 替换为您要连接到的服务器的名称或
// IP 地址。
?>
示例 #2 imap_open() 示例
<?php
$mbox = imap_open("{imap.example.org:143}", "username", "password");
echo "<h1>邮箱</h1>\n";
$folders = imap_listmailbox($mbox, "{imap.example.org:143}", "*");
if ($folders == false) {
echo "调用失败<br />\n";
} else {
foreach ($folders as $val) {
echo $val . "<br />\n";
}
}
echo "<h1>INBOX 中的邮件头</h1>\n";
$headers = imap_headers($mbox);
if ($headers == false) {
echo "调用失败<br />\n";
} else {
foreach ($headers as $val) {
echo $val . "<br />\n";
}
}
imap_close($mbox);
?>
谷歌已于 2022 年 5 月 30 日停止支持用户/密码身份验证。
如果没有 xoauth2 的支持,imap_open 将无法再使用。
https://support.google.com/accounts/answer/6010255
有一个来自 2020 年的待办事项,但没有完成。
https://wiki.php.net/todo/ext/imap/xoauth2
唯一的方法是切换到第三方库“php-imap”。
太可惜了。
回复“dsgvoseidank”说它不再适用于 Gmail。
截至今天 2022 年 8 月 26 日,它仍在工作,但你需要使用谷歌参数为你的应用生成一个密码,用于 2FA 帐户。
imap_open 使用起来很简单,但在使用 ssl 和 tls 的设置上会遇到一些困难。
以下是针对不同主机和协议的测试示例。
取消对主机/协议行的注释,并填写正确的用户名和密码。
凯
<?php
#######
# 本地主机 pop3,带或不带 ssl
# $authhost="{localhost:995/pop3/ssl/novalidate-cert}";
# $authhost="{localhost:110/pop3/notls}";
# 本地主机 imap,带或不带 ssl
# $authhost="{localhost:993/imap/ssl/novalidate-cert}";
# $authhost="{localhost:143/imap/notls}";
# $user="localuser";
# 本地主机 nntp,带或不带 ssl
# 你必须指定一个现有的组,control.cancel 应该存在
# $authhost="{localhost:563/nntp/ssl/novalidate-cert}control.cancel";
# $authhost="{localhost:119/nntp/notls}control.cancel";
######
# web.de pop3,不带 ssl
# $authhost="{pop3.web.de:110/pop3/notls}";
# $user="[email protected]";
#########
# goggle pop3 或 imap
# $authhost="{pop.gmail.com:995/pop3/ssl/novalidate-cert}";
# $authhost="{imap.gmail.com:993/imap/ssl/novalidate-cert}";
# $user="[email protected]";
$user="如上所示的用户名";
$pass="你的密码";
if ($mbox=imap_open( $authhost, $user, $pass ))
{
echo "<h1>已连接</h1>\n";
imap_close($mbox);
} else
{
echo "<h1>失败!</h1>\n";
}
?>
Gmail IMAP SSL 身份验证问题之一与谷歌的帐户安全性有关。
如果你收到一次登录错误,请注销所有谷歌帐户。然后访问此链接
http://www.google.com/accounts/DisplayUnlockCaptcha
使用你要通过 imap 访问的帐户登录。
按照步骤操作,你就可以使用 php imap 登录到 gmail 了。
此处有可视化展示
http://jeffreifman.com/filtered-open-source-imap-mail-filtering-software-for-php/configuring-gmail/
使用
<?php
imap_open( "{server.example.com:143}INBOX" , 'login' , 'password' );
?>
出现以下错误
"无法打开流 {server.example.com:143}INBOX"
通过添加标志 "novalidate-cert" 解决
<?php
imap_open( "{server.example.com:143/novalidate-cert}INBOX" , 'login' , 'password' );
?>
=D
INBOX 的子文件夹必须用点隔开,例如:'INBOX.test'
$mailbox = '{example.example.com:143/imap/novalidate-cert}INBOX.test'
此代码演示了目前未在文档中详细说明的功能。主要功能是 imap_open(或 reopen)中选择的邮箱与其他 imap 函数中指定的邮箱无关。它已在 Gmail 和 Dovecot IMAP 服务器上测试。邮箱分隔符取决于服务器。Gmail:"/" Dovecot:"." 如果你想在 Gmail 上进行测试,你需要在你的帐户中启用“对安全性较低应用的访问权限”。
<?php
// 更改这些内容。
$server = "{imap.gmail.com:993/imap/ssl/novalidate-cert}";
$email = "[email protected]";
$password = "password";
// 代码假设文件夹 Test/Sub1/Sub11 等存在。
$selected = "{$server}Test/Sub1/Sub12";
$conn = imap_open($selected, $email , $password);
// 这将返回指定的邮箱及其子邮箱,
// 即使指定的邮箱不在选择的邮箱内。
$specified = "{$server}Test/Sub1";
$boxes = imap_list($conn, $specified , '*');
print_r($boxes);
// 这将在指定的邮箱中追加邮件。
// 它将忽略选择的邮箱。
imap_append($conn, $specified
, "From: [email protected]\r\n"
. "To: [email protected]\r\n"
. "Subject: test\r\n"
. "\r\n"
. "这是一条测试邮件,请忽略\r\n");
// 这将更改选择的邮箱
$selected = "{$server}Test/Sub1";
imap_reopen($conn, $selected);
// 这将把邮件从选择的邮箱移动到指定的邮箱
// 在这种情况下,指定的邮箱不包含服务器。
imap_mail_move ($conn , "1" , "Test");
imap_expunge($conn);
imap_close($conn);
// 如果你使用真实的 IMAP 服务器执行了此代码,
// 邮件现在将位于 Test 邮箱中!
?>
不要在 $mailbox 中使用 "/debug" 标志或在 $options 中使用 OP_DEBUG。它们没有任何作用。
当你设置其中任何一个时,底层的 IMAP c-client 库将收集协议调试数据并将其传递回 PHP。
但是,PHP 定义的调试处理程序是一个空函数,它什么也不做。
因此,除非你使用自定义版本的 IMAP 扩展程序来处理该处理程序(mm_dlog),否则使用 "/debug" 或 OP_DEBUG 毫无意义。
如果你遇到 Kerberos 错误,例如
« 注意:未知:Kerberos 错误:凭据缓存文件 '/tmp/krb5cc_0123' 未找到(尝试运行 kinit)»。
尝试添加为 $param
<?php array('DISABLE_AUTHENTICATOR' => 'GSSAPI') ?>
例如
<?php
$imap_stream = imap_open('{mail.domain.tld:993/imap/ssl}' , 'username' , 'password', null, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));
?>
错误:未知:邮箱为空(errflg=1)在 Unknown 上的第 0 行
出现于
1) 使用 imap_open 连接
2) 然后使用 imap_search ALL 检索邮件
但没有可用消息。为了避免此错误,请先使用 imap_status 检查邮箱中的消息数量。只有在有可用消息的情况下,才能使用 imap_search。
从 5.3.2 版本开始,可以使用第 6 个参数来禁用 GSSAPI 或 NTLM 身份验证。
示例
<?php
$mbox = imap_open("{w2010ExchangeServer:993/imap/ssl}", $user, $password, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));
?>
这解决了我的 Exchange 2010 问题。作为参考,请查看 https://bugs.php.net/bug.php?id=33500
用于测试连接大多数可能选项的函数
function imapConfig($options, $i=0, $till = array()) {
if(sizeof($options)==$i)
return $till;
if(sizeof($till)==0)
$till[] = '';
$opt = $options[$i];
$new = array();
foreach($till as $t) {
foreach($opt as $o) {
if(strlen($o)==0)
$new[] = $t;
else
$new[] = $t.'/'.$o;
}
}
return imapConfig($options, $i+1, $new);
}
function imap_test($server, $port, $dir, $username, $passw) {
$options = array();
//$options[] = array('debug');
$options[] = array('imap', 'imap2', 'imap2bis', 'imap4', 'imap4rev1', 'pop3'); //nntp
$options[] = array('', 'norsh');
$options[] = array('', 'ssl');
$options[] = array('', 'validate-cert', 'novalidate-cert');
$options[] = array('', 'tls', 'notls');
$configOptions = imapConfig($options);
foreach($configOptions as $c) {
$mbox = @imap_open("{".$server.":".$port.$c."}".$dir, $username, $passw);
echo "<b>{".$server.":".$port.$c."}".$dir."</b> ... ";
if (false !== $mbox) {
echo '<span style="color: green"> 成功</span>';
}
else {
echo '<span style="color: red"> 失败</span>';
}
echo '<br>';
}
}
imap_test('mail.server.de', 143, 'INBOX', 'username', 'pwd');
要使用 kerberos V / GSSAPI 进行身份验证,您可能需要在连接字符串中添加 "user="。例如
$mbox = imap_open( "\{imap.example.com:143/imap/notls/user=" . $user . "}INBOX", $user, $passwd );
我们的 IMAP 服务器不允许除 kerberos 凭据中指定的用户以外的用户使用这些凭据连接,除非您在连接字符串中指定了额外的 "user="。将其作为参数传递给 imap_open() 似乎还不够。
如果您的服务器使用传输层安全性 (TLS) 操作,imap_open 不会打开流。imap_open 如果存在 SSL,则会使用 SSL 连接。因此,尝试以以下方式打开邮箱
$mailbox="{mail.domain.com:143/imap/notls}";
或者
$mailbox="{mail.domain.com:110/pop3/notls}"; 这有效...
一些邮件服务器要求您提供 [email protected],因此您可以始终使用。[email protected]
$conn=imap_open($mailbox, $username, $password);
一些服务器可能要求将用户名设置为 "[email protected]"
:)
为了与 Microsoft Exchange Server 5.5 建立 IMAP 连接,我使用了以下连接字符串
<?php
if(imap_open ("{192.168.1.6:143/imap}Inbox", "DOMAIN/USERNAME/ALIAS", "PASSWORD"))
{
echo '连接成功!';
}
else
{
echo '连接失败';
}
?>
通过将 "Inbox" 替换为,例如 "Tasks",就可以查看所有任务。希望这对大家有所帮助!
此致
对于所有您指定邮箱字符串的 imap 函数,务必始终使用 IP(而不是主机名)和端口号。如果您不这样做,imap 函数会非常慢。
使用主机名而不是 IP 会给每个 IMAP 调用增加 3 秒,不使用端口号会给每个 imap 调用增加 10 秒。(提示:使用 gethostbyname())
我的脚本一直超时,即使语法完全正确... 最终,我发现端口被我的虚拟主机阻止了,我在共享服务器上运行了它...
我发布这个只是为了提醒您注意这个显而易见的错误,就像我一样。
对于 FreeBSD 用户...
如果您想要 SSL 支持,则需要安装端口
mail/php5-imap
security/php5-openssl
干杯 :)
- avizion
一个小技巧,即使您阅读了所有正确的解决方案并实施了它们,但仍然遇到相同的错误或根本没有错误,也会让您非常沮丧..
更改代码后.. 重新启动 httpd deamon..
对于 Fedora 或任何其他 Red Hat Linux 操作系统 (/etc/init.d/httpd restart)。
之后,您将能够从 apache 建立 imap/pop3 流..
我一直在努力使 imap_open 连接到 imap 服务器。然后我在网上找到了另一篇文章,建议使用它,它有效,所以我将把它发布在这里。我希望这对其他人有所帮助..
"我已经尝试过以下字符串,它有效
对于 pop3: {www.server.com:110/pop3/notls}INBOX
对于 imap: {www.server.com:143/notls}INBOX。
``这些年来我学到了一件事,
如果有人说:“这是不可能的”,那就证明他们错了。`` ~ Stefano Kocka '99
测试日期:2022-11-20
php 版本:PHP 8.0.10 (cli)
extension=imap
extension=openssl
imap: IMAP c-Client 版本 => 2007f
SSL 支持 => 已启用
https://support.google.com/accounts/answer/185833?hl=en
<?php
$cnx = '{imap.gmail.com:993/imap/ssl/readonly}';
$mbox = imap_open($cnx, '[email protected]', 'MyAppPassword');
$folders = imap_listmailbox($mbox, $cnx, '*');
print_r($folders);
/*
Array
(
[0] => {imap.gmail.com:993/imap/ssl/readonly}INBOX
[1] => {imap.gmail.com:993/imap/ssl/readonly}LABEL1
[2] => {imap.gmail.com:993/imap/ssl/readonly}LABEL2
[3] => {imap.gmail.com:993/imap/ssl/readonly}Queue
[4] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/All
[5] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Drafts
[6] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Sent
[7] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Spam
[8] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Starred
[9] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Trash
)
*/
?>
此致
一个旧的存档 2006 PHP 脚本,用于将 IMAP POP3 邮件检索到 MySQL 数据库中,以及作为文件,位于
http://web.archive.org/web/20060411020022/http://www.sellchain.com/phPOP3/phPOP3.txt
"无法打开流 {127.0.0.1:143/imap/notls}INBOX"
通过仅将 127.0.0.1 替换为 localhost 来解决,php 和 IMAP 服务器都在同一台机器上,不通过代理或任何其他东西。奇怪!
默认情况下,imap_open() 会在放弃之前重试 3 次错误的密码。这是 c-client 库中内置的功能,用于交互式邮件客户端(可以提示最终用户输入新的用户名/密码组合)。
新的可选参数 "$n_retries" 允许 PHP 覆盖默认的重试限制。绝对没有理由将其保留为默认值,或将其设置为除 1 以外的任何值。这对于使用邮件服务器的用户来说尤为重要,因为如果用户登录失败次数过多,这些邮件服务器会将用户锁定。
适用于 Gmail 的新 IMAP 功能,适用于个人和 Google Apps。
$mbox = imap_open ("{imap.gmail.com:993/imap/ssl}INBOX", "[email protected]", "password")
or die("无法连接: " . imap_last_error());
我设法在不重新编译的情况下对 Exchange 2010 使用此功能来禁用 kerberos
对我来说重要的是,php 按照标准软件包进行安装 (yum install php)
Exchange 2010 会在 php 中触发 kerberos,您需要 kinit 东西(在 google 上搜索 "imap_open kinit exchange 2010",您会找到它)
为了使其正常工作,我不得不
1. 正确设置 krb5.conf 文件
2. 使用有效的用户名/密码执行 kinit [email protected]
3. 将票证文件重命名为反映 apache 的用户 ID(通常为 48)
/tmp/krb5cc_48
4. 修复所有权
chown apache.apache /tmp/krb5cc_48
但 exchange 服务器将使用 kerberos 票证而不是用户名密码 - 除非您使用 ssl
<?php
$imap_user = "用户名";
$imap_pass = "密码";
$imap_server = "{w2010kExchangeServer:993/novalidate-cert/ssl}";
$mbox = imap_open("{$imap_server}INBOX", $imap_user, $imap_pass);
$sorted_mbox = imap_sort($mbox, SORTDATE, 0);
$totalrows = imap_num_msg($mbox);
print "$imap_server\n";
$startvalue = 0;
while ($startvalue < $totalrows) {
$headers = imap_fetchheader($mbox, $sorted_mbox[ $startvalue ] );
$subject = array();
preg_match_all('/^Subject: (.*)/m', $headers, $subject);
print $subject[1][0] . "\n";
$startvalue++;
}
?>
PHP/Exchange 的一小步,David 的一大步...
嗨
我一直无法连接到 Gmail 的 Imap/pop。它一直提示我尝试登录次数过多。
我做的事情
https://www.google.com/settings/security/lesssecureapps
点击“开启”
> 有效!
因此,最后一步可以使用,但请记住,您的帐户将面临一定的安全风险。无论如何,它在开发中很有用...
如果您的连接速度太慢,请尝试使用端口或不使用域。
<?php
// 正常连接
$mailbox = imap_open("{SERVER}INBOX", $username, $password);
// 更快的连接
$mailbox = imap_open("{SERVER:143}INBOX", $username, $password);
// 非常慢的连接
$mailbox = imap_open ("{SERVER.DOMAIN}INBOX", "DOMAIN/".$username, $password);
?>
我想补充一点关于 imap_open 的内容。
如果您想连接到新闻服务器,而不指定任何新闻组,您可以使用以下代码
<?php
$server = "{news.servername.com/nntp:119}";
$nntp = imap_open($server,"","",OP_HALFOPEN);
?>
然后 $nntp 将成为连接 ID。
此致
//Babak
如果您正在访问本地邮箱文件,例如 imap_open('/var/mail/www-data', '', ''), 您可能在访问文件方面受到限制。
如果 PHP IMAP 在编译时使用了 restrictBox 选项(我认为现在大多数软件包都是这样),您只能访问相对于 $HOME 的文件。以 '/' 或 '../' 开头的路径将被拒绝。
在 Windows 上,此函数不使用 openssl_get_cert_locations() 中列出的目录中的证书:它使用系统的证书存储。如果您想使用由测试机构签名的证书,则必须将测试机构的根证书添加到 Windows 的证书存储中。
如果您遇到 imap4/pop3 身份验证步骤缓慢的情况
例如,仅响应就需要 5-10 秒,这可能是因为您连接到一个宣传 GSSAPI 身份验证机制的 imap 服务器。
Martin Eckardt 的注释可以帮助加快速度。
<?php
$mbox = imap_open("{带有 GSSAPI 的 imap 服务器 :993/imap/ssl}", $user, $password, NULL, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));
?>
如果您没有使用 GSSAPI,请禁用它。
如果您的 imap/pop 服务器是 Dovecot
/etc/dovecot/conf.d/10-auth.conf
...
auth_mechanisms = plain login gssapi
-> auth_mechanisms = plain login
确保您的 PHP 通过 phpinfo() 函数启用了 imap
'--with-imap-dir=/opt/lampp' '--with-imap-ssl' '--with-imap=/opt/lampp'
以及
IMAP c-Client 版本 2007e
SSL 支持 是
我注意到我的 apache 脚本可以正常工作,但我的 cli 脚本无法工作。原来我的 php cli 可执行文件没有设置 imap,所以我不得不使用另一个 php cli 可执行文件。
感谢您所有的评论。用户评论帮助我无数次。
我想以我自己的方式回馈一下,提供这个小技巧。要测试您的 pop 或 imap 服务,您可以使用 telnet(几乎所有操作系统都应该自带命令行 telnet 客户端)。
这是 pop3 示例(以 + 开头的行是服务器的响应)
telnet your.pop.host.com 110
+OK POP3 your.pop.host.com v2001.78 server ready
user your_username
+OK User name accepted, password please
pass your_password
+OK Mailbox open, 23 messages
请注意,您的 pop 服务器可能不在 110 端口上,但那是默认/标准端口。
这是 imap 示例(以 OK 开头的行是服务器响应)
telnet your.imap.host.com 143
* OK [CAPABILITY IMAP4REV1...]
1 LOGIN "your_username" "your_password"
1 OK [CAPABILITY...] ... User your_username authenticated
这对一些人来说可能是旧闻,但我希望它对很多人都有帮助。
imap_open 支持 SSL/TLS 和 start-TLS,以及完全未加密的会话。
此处的文档略微混淆了某些内容。
它指的是 SSL (/ssl),实际上指的是立即 SSL/TLS。初始连接将立即是 SSL/TLS,而不是稍后升级。(我不知道 c-client 将要协商/使用的 SSL/TLS 版本的具体细节。)
'/tls' 和 '/notls' 选项仅与 start-TLS 相关,即升级的连接。
请注意,存在 '/notls' 选项,但不存在 '/nossl' 选项。这是因为默认情况下,c-client 会在将 start-TLS 作为 IMAP 服务器的广告选项时升级到 TLS (start-TLS)。也就是说,它将根据自动检测来执行此操作。'/notls' 选项会禁用该自动检测,这在某些情况下是必要的。例如,我刚帮助过一个人,他的 IMAP 服务器在 143 端口上向连接宣传 start-TLS,但实际上它只在 993 端口上有效。常规 SSL/TLS 不会执行任何自动检测,因为连接模式必须提前明确地进行。