我需要建议如何从我的IMAP邮件下载附件,其中有附件和当前日期的主题行,即YYYYMMDD
,并将附件保存到本地路径。
我通过了Perl模块Mail::IMAPClient,能够连接到IMAP邮件服务器,但在其他任务上需要帮助。还有一件事要注意的是,我的IMAP服务器需要SSL认证。
附件也可以是gz、tar或tar.gz文件。
我需要建议如何从我的IMAP邮件下载附件,其中有附件和当前日期的主题行,即YYYYMMDD
,并将附件保存到本地路径。
我通过了Perl模块Mail::IMAPClient,能够连接到IMAP邮件服务器,但在其他任务上需要帮助。还有一件事要注意的是,我的IMAP服务器需要SSL认证。
附件也可以是gz、tar或tar.gz文件。
4条答案
按热度按时间58wvjzkj1#
下面是一个简单的程序,它可以做你想做的事情。
Email::MIME
的最低版本适用于引入walk_parts
时。你不想在程序中硬编码密码吧?
使用SSL连接。我们应该能够通过构造函数的一个简单的
Ssl
参数来实现这一点,但是一些供应商选择在他们的包中将其破坏。如果您需要收件箱以外的文件夹,请进行更改。
使用IMAP搜索,我们将查找主题中包含YYYYMMDD格式的今天日期的所有邮件。日期可以在主题中的任何位置,因此,例如,主题“foo bar baz 20100316”将匹配今天。
对于每封这样的邮件,将其附件写入当前目录中的文件。我们写入附件的最外层,而不挖掘嵌套附件。在其内容类型中具有名称参数的部分(如
image/jpeg; name="foo.jpg"
)被假定为附件,我们忽略所有其他部分。保存的附件的名称是由-
分隔的以下部分:今天的日期、其IMAP邮件ID、其在邮件中的位置的索引(从1开始)以及其名称。vlf7wbxs2#
如果您想继续使用Mail::IMAPClient,可以告诉它使用SSL。
或者,Net::IMAP::Simple::SSL也可以帮助您实现这一点。其接口与Net::IMAP::Simple提供的接口相同。
一旦你有了消息,Parsing emails with attachments将展示如何提取附件。我还没有尝试过,但我的直觉是,使用Email::MIME::walk_parts可以大大简化PerlMonks文章中显示的脚本。
mbyulnm03#
我已经改变了一点我从@Greg下载附件的方法,因为它显示下载SAP XML附件是不可靠的。他们不遵循
Content-Type: application/pdf; name=XXXXX
标准,所以,它给了我很多问题。例如:程序的其余部分几乎保持不变。不同的是我现在使用
MIME::Parser
来检索所有的消息,而丢弃了所有与正文和图片相关的内容。我还删除了Peek => 1
,因为我想在消息下载后将其标记为已读(并且只导航未读消息)。Log::Logger
帮助创建了一个集中式日志:---代码段1 ---库
---代码段2 ---日志初始化
---代码段3 ---邮件下载程序
5w9g7ksd4#
我更喜欢Greg提出的Mail::IMAPClient方法,但它对**binmode()**输出文件句柄是必不可少的,也就是说,防止Windows将0x0A字节假定为换行符,并将其替换为CRLF,从而使二进制文件无效。很抱歉,我将此伪装成一个答案,注解是适当的,但我现在没有任何声誉。