fetchmail을 구성하려고 합니다. fetchmailrc의 구문을 다루기 전에(문제에서 발견한 오류 수준은 내가 이해하지 못한 문제의 다양한 측면과 시너지 효과를 발휘하므로 한 번에 새로운 일 하나씩) 모든 과정을 진행하기로 결정했습니다. 명령줄을 통한 옵션.
모든 테스트에 대해 비밀번호를 입력하는 것이 지겨워서 스크립트에 비밀번호를 전달하고 싶습니다. fetchmail의 명령줄 옵션으로 --pass와 같은 항목을 찾을 수 없었기 때문에 비밀번호를 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 "메일 비밀번호를 전달하기 위해 메일 서버 폴링" |
나는 실제로 OP와 OP가 답변 중 하나에 게시한 의견을 바탕으로 이것을 결합했습니다. OP가 놓친 것 같은 유일한 점은 stdin으로 구성을 보내는 것이 여전히 구성 규칙을 따라야 한다는 것입니다. 따라서 메일 서버는 구성의 첫 번째 항목이어야 하며 비밀번호는 여전히 "pass"로 시작해야 합니다. 다른 모든 것은 표준 입력을 통해 전달된 블록이나 매개변수에 있을 수 있습니다.