2017-08-09 46 views
0
在電子郵件

林保存附件與munpack目錄。這工作,但對我的應用程序造成問題。Munpack和procmail的 - 讓主題行

電子郵件生成形成器件和它的廣告其UID的主題行。我需要以某種方式從電子郵件中獲取主題行,並將圖像保存爲該圖像,或者將主題行添加到munpack在保存文件時創建的.desc文件中。

這是我目前procmailrc文件規則:

ATTACH=`echo /home/foo/attachments/camera` 
:0 c 
* ^To:.*[email protected] 
* ^Subject:[^ ]*\/: 
| munpack -s $MATCH -q -C $ATTACH 

-s似乎並沒有一個有效的選擇了。

不知道這一點主題作品actualy

或者可能我的電子郵件文件發送到python腳本找出主題行?

+0

我依稀推測'-s'不喜歡接收一個不帶引號的冒號作爲它的值,這就是你的代碼所做的事情(如果傳入的消息實際上在Subject頭部包含一個冒號;如果不是,條件顯然不匹配)。 – tripleee

+0

我快速搜索的'munpack'手冊頁確實不支持'-s'選項,在這種情況下,您的問題變得更加複雜。 https://linux.die.net/man/1/munpack是否與您的版本一致? (哪個版本,在哪個操作系統上,您使用的是否會使用不同的實用程序可以接受?) – tripleee

回答

0

你的任務是useless use of backticks。你只想要

ATTACH="/home/foo/attachments/camera" 

但是,如果這是一個靜態字符串,把它放在一個變量中並不真正給你買東西。

要實際提取主題,事\/必須是一個正則表達式,你想要的主體部分進行匹配之後。

:0 
* ^To:.*[email protected]\.com 
* ^Subject:[  ]*\/[^  ].+ 
| munpack -s "$MATCH" -q -C "$ATTACH" 

\/令牌之前的正則表達式[ ]*跳過任何前導空格(括號內,你需要一個標籤和一個空格,以匹配任何任何序列)。該[^ ]匹配字段的第一個非空白字符(不佔空間,而不是標籤),然後我們捕捉行的其餘部分與.+

還要注意適當的引用變量。一般情況下,除非你特別希望shell對該值執行whitespace tokenization and wildcard expansion,否則應該將變量放在雙引號中。

我刪除了c標誌:0後,因爲我猜你實際上並不需要的Procmail也做其他的事情與此消息(但這是投機性的,如果我錯了,通過各種手段把它放回去)。

如果確實munpack不支持-s那麼也許是這樣的:

:0 
* ^To:.*[email protected]\.com 
* ^Subject:[ ]*\/[^ ].+ 
| extract "$ATTACH/$MATCH" 

其中extract是一個腳本像

#!/bin/sh 
dest=$1 
mkdir "$dest.tmp" 
munpack -q -C "$dest.tmp" 
set -- "$dest.tmp"/* 
test -e "$1" || { rmkdir "$dest.tmp"; echo "$0: $dest: nothing extracted" >&2; exit 2;} 
case $# in 1) mv "$1" "$dest"; rmdir "$dest.tmp"; exit 0;; esac 
echo "$0: $dest.tmp contains multiple files; halp!"; exit 1 

這提取到一個目錄,那麼如果該目錄包含一個文件,將其移動到最終目的地。如果什麼都沒有提取,什麼都不做。如果有多個提取的文件,請提出錯誤。

你肯定能管整個郵件到Python代替,但推功能集成到Python中似乎沒有必要或有益的在這裏。 (再一次,你可能會有另外的上下文以另一種方式提示這些尺度,但是我們對你的問題的瞭解還不夠充分,從而得出這樣的結論。)

+0

...儘管如此,您至少要保留'c'標誌,直到您的配方被正確調試。 – tripleee

+0

[你的其他問題](https://stackoverflow.com/questions/45596111/using-gmail-for-trail-camera)看起來也許尺度正在傾覆,畢竟有利於Python解決方案。不幸的是,Procmail不知道現代MIME的主要部分。 – tripleee