Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将电子邮件附件自动保存为与qmail和reformime映射_Bash_Email_Pdf_Attachment_Qmail - Fatal编程技术网

Bash 将电子邮件附件自动保存为与qmail和reformime映射

Bash 将电子邮件附件自动保存为与qmail和reformime映射,bash,email,pdf,attachment,qmail,Bash,Email,Pdf,Attachment,Qmail,自动将电子邮件附件保存为与qmail和reformime映射 我正在尝试使用dot qmail文件将附件自动移动到另一个位置 我的.qmail文件 #------------------------------------------------------------ | condredirect pdf-junkmail headermatch 'X-Spam-Status: Yes' | reformime -X /bin/sh -c "if [ "\${FILENAME#*.}" ==

自动将电子邮件附件保存为与qmail和reformime映射

我正在尝试使用dot qmail文件将附件自动移动到另一个位置

我的.qmail文件

#------------------------------------------------------------
| condredirect pdf-junkmail headermatch 'X-Spam-Status: Yes'
| reformime -X /bin/sh -c "if [ "\${FILENAME#*.}" == "pdf" ];  then cat > /home/users/name/home/$(date +%Y%m%d)_\$FILENAME; fi"
# Forward not set
# Vacation Message not set
./Maildir/
这适用于带有一个附件的简单邮件。我的问题是:

  • 如何将属于此附件的邮件移动到名为“done”的邮箱
  • 上面的命令不适用于一封邮件中的多个附件?如何调整此行以适用于多个附件
  • 如果文件名包含多个点,如“how.areyu.pdf”,则此选项无效

  • 感谢您的帮助

    以下是针对您的问题的特色实现

    首先为您的用户保存并设置此bash脚本的权限。
    您需要从
    .qmail
    文件调用它:

    提取pdf附件.sh

    #/usr/bin/env bash
    #此脚本处理stdinmime消息中的邮件消息附件
    #提取所有PDF文件和附件
    #并将MIME消息返回到stdout进行进一步处理
    #确保所有区域设置都设置为C,以防止
    #使用解码从失败的MIME头重新格式化
    #[未知字符集:ANSI_X3.4-1968]
    #见:https://bugs.gentoo.org/304093
    导出LC_ALL=C LANG=C LANGUAGE=C
    #设置已保存附件的目标路径
    附件='/home/users/name/home'
    陷阱'rm-f--“$mailmessage”'退出#清除临时邮件
    #创建一个临时消息文件
    mailmessage=“$(mktemp)”
    #将stdin消息保存到tempfile
    cat>“$mailmessage”
    #迭代消息中的所有MIME部分
    而read-r mime_段;做
    #获取所有节信息标题
    
    section_info=“$(reformime-s”$mime_section"-i您引用的
    -c shell命令
    是错误的,您的
    =
    与POSIX
    sh
    的比较无效。文件名扩展名提取需要两个锐度
    #
    ,否则它将无法获取
    *
    的最长匹配,并且在文件名中有多个点时无法工作。在形成字符串时需要引用这是一个固定版本:
    |reformime-X/bin/sh-c'如果[“${FILENAME##*.}”=“pdf”];那么cat>“/home/users/name/home/$(date+%Y%m%d)\$FILENAME”;fi'
    所有附件的名称均为YYYYMMDD_unnamed_XXXXXXXX.pdf。如果我试图理解上述代码,我会认为名称应为YYYYMMDD_named.pdf。出了什么问题?我无法将其移动到名为“done”的邮箱。邮箱“done”是maildir(邮箱格式);so./Maildir/.done/如果附件文件在MIME部分中没有
    content\u name
    ,则应用名称
    YYYYMMDD\u unnamed\u.pdf
    ,否则用
    YYYYMMDD\u content\u name
    命名。对于
    done
    邮箱,可能我手头没有qmail,使用
    .done
    或完整的文件系统路径,我真的不确定n此处使用的语法。我没有得到您的答案。如果我发送了一封带有附件“hello.pdf”的邮件,我会保存一个名为“20191023\u unnamed\u 05ckYsc5.pdf”的附件。如果我正确阅读了脚本,您首先会指定名称“hello.pd”添加到字符串内容名称,但在下一行中,您通过使用REFORIME命令重写字符串内容名称。我是否正确?或者我可能不理解您的意思。我非常感谢您的帮助。通过添加“-c”选项重新编写来解决此问题。因此,“content\u name=“$(REFORIME-c UTF-8-h”$content\u name”)”来源:
    #------------------------------------------------------------
    | condredirect pdf-junkmail headermatch 'X-Spam-Status: Yes'
    | bash /path/to/extract-pdf-attachments.sh | condredirect done true
    # Forward not set
    # Vacation Message not set
    ./Maildir/