質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
POP

POP(Post Office Protocol)とは、電子メールで使用される受信プロトコル(通信規約)です。SMTPで転送されたメールを一時的に保管し、そのメールをサーバから取り出す際に使用します。

Q&A

解決済

1回答

2508閲覧

expectでPOP3のメール取得と削除

situmon_sya

総合スコア14

POP

POP(Post Office Protocol)とは、電子メールで使用される受信プロトコル(通信規約)です。SMTPで転送されたメールを一時的に保管し、そのメールをサーバから取り出す際に使用します。

0グッド

0クリップ

投稿2017/07/20 12:28

expectでPOP3のメール取得と削除をしようとしているのですが、うまく動きません。
取得は出来ているようなのですが、ログが遅れて出てくるのか
deleの所に被ったりOKが後で纏めて出てきたりなどで、出力結果がうまく見れません。
また削除についてはOKが出てるように見えるのですが、1通も消えてませんでした。
(telnetで入って「dele 1」とやったら当然消えました)

また「log_user 0」にしているにもかかわらず、標準出力にメールの内容が漏れ出します。

何がいけないのでしょうか。
また改善するにはどうしたらいいでしょうか。
※間のnoopは特に意味はないです。

expect

1#!/bin/expect -f 2 3set timeout -1 4spawn $env(SHELL) 5match_max 100000 6 7expect -exact "$ " 8send -- "telnet pop.example.com 110\r" 9expect -exact "telnet pop.example.com 110\r" 10 11send -- "user test@example.com\r" 12expect -exact "+OK" 13 14send -- "pass password\r" 15expect -exact "+OK" 16 17send -- "list\r" 18expect -re "\r\.$" 19 20log_user 0 21 22set i 1 23while { $i <= 100 } { 24 send_user "retr $i\r" 25 send -- "retr $i\r" 26 expect -re "\r\.$" 27 send_user "==retr== $i ==\r" 28 incr i 1 29} 30 31log_user 1 32send_user "noop\r" 33send -- "noop\r" 34expect -exact "+OK" 35 36sleep 3 37set i 1 38while { $i <= 100 } { 39 #send_user "dele $i\r" 40 send -- "dele $i\r" 41 expect -exact "+OK" 42 send_user "==dele== $i ==\r" 43 incr i 1 44} 45 46send -- "quit\r" 47expect -exact "+OK" 48 49exit 50expect eof

以上、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

問題点は2点あった
・まだ応答が完了していないのにexpectが「OK」に反応してしまい、sendを出すタイミングが早すぎた
・popの仕様上、正しくquitしないとメールが消えない事

expect -re "\+OK.*\r"
上記みたいな感じで、力技で応答の行末を確認し、実行する事で問題なく動作した。
そしてちゃんと最後まで完了するようにキレイに書いた。

投稿2017/07/21 11:07

編集2017/07/21 11:08
situmon_sya

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問