我正在尝试配置 fetchmail。在处理 fetchmailrc 的语法之前(我发现问题的错误程度与我不理解的问题的不同方面的数量是协同的,所以一次一件新的事情),我决定通过所有通过命令行的选项。
我厌倦了为每个测试输入密码,所以我想在脚本中传递它。我找不到像 --pass 这样的东西作为 fetchmail 的命令行选项,所以我想也许可以将密码回显到 fetchmail ala:
echo "dohadeer"| fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user [email protected]
我忽略了它并用谷歌搜索“fetchmail 密码命令行”并得到了一些声称上述技术有效的点击!但是当我尝试它时,我收到错误:
fetchmail: can't find a password for [email protected]@pop.gmail.com.
我可以找出原始问题的解决方法,但我无法弄清楚为什么这种方法不起作用。显然,我对 Linux 有一些不明白的地方,想要弄清楚。
答案1
给出错误消息的原因是 fetchmail 的标准输入未附加到终端,而是附加到管道。
man fetchmail | less -Ip 'user authentication step failed'
# from:
# http://opensource.apple.com/source/fetchmail/fetchmail-33/fetchmail/fetchmail.c
...
if (!isatty(0)) // <-- tests if stdin is a terminal (added)
{
fprintf(stderr,
GT_("fetchmail: can't find a password for %s@%s.\n"),
ctl->remotename, ctl->server.pollname);
return(PS_AUTHFAIL);
} else {
...
但是,您可以尝试以下script
技巧来让其fetchmail
在伪终端中运行。
(sleep 0.3; echo "dohadeer") |
( script -q /dev/null fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user [email protected] )
答案2
故意的。通过执行一个简单的命令,系统上的任何其他人都可以看到命令行上的任何内容ps
,因此大多数需要密码的软件不会接受从命令行传递的密码。
您可以使用一些技巧wish
,expect
但您正在寻找较少的复杂,而不是更多...
答案3
您可以使用该.netrc
文件来指定密码;这在手册中有解释http://www.fetchmail.info/fetchmail-man.html#14。例子:
machine hermes.example.org
login joe
password topsecret
答案4
我知道这个问题很古老,但如果其他人来寻找答案,希望这会有所帮助。这就是我要做的工作:
echo "轮询邮件服务器传递邮件密码" | fetchmail -f - -u 邮件用户
我实际上是从OP和OP在其中一个答案中发布的评论中拼凑起来的。 OP 似乎错过的唯一一件事是将配置发送到标准输入仍然需要遵循配置规则。因此,邮件服务器必须是配置中的第一项,并且密码仍然必须以“pass”开头。其他所有内容都可以位于通过标准输入传递的块中或参数中。