【发布时间】:2014-11-08 06:51:58
【问题描述】:
我在 shell 脚本中遇到了一个奇怪的问题。我正在尝试编写一个简单的脚本来连接到 POP3 服务器并计算邮箱中的邮件数量。 服务器上的 Bash 版本是:3.2.25(1)-release on Linux box。
当我手动键入命令来执行此操作时,它可以工作。
$ telnet <pop3 server ip> 110
Trying <pop3 server ip>...
Connected to <pop3 server ip>.
Escape character is '^]'.
+OK The Microsoft Exchange POP3 service is ready.
USER sadmin
+OK
PASS sadmin
+OK User successfully logged on.
STAT
+OK 1 10320
quit
+OK Microsoft Exchange Server 2010 POP3 server signing off.
Connection closed by foreign host.
现在为了计算消息数量,我编写了下面的脚本。
#!/bin/bash
exec 3<> /dev/tcp/<pop3 server ip>/pop3
read ok line <&3
echo $ok $line
echo USER sadmin >&3
read ok line <&3
echo aft userid entered:$ok $line
echo PASS sadmin1 >&3
echo STAT >&3
read num num1 <&3
echo $num $num1
echo quit >&3
exit
当我运行这个脚本时,输出如下所示。
$ ./tcp.sh
+OK The Microsoft Exchange POP3 service is ready.
aft userid entered:-ERR Connection is closed. 12
$
在我将密码发送到 fd 3 后,它需要很长时间才能读取它,然后它返回消息为“-ERR 连接已关闭”。
你能告诉我我在这里缺少什么吗?
【问题讨论】:
-
理论上POP3需要CR+LF,而不仅仅是LF。有些服务器接受简单的 LF ,有些则不接受。所以你最好显式添加 CR。