如何使用 shell 脚本读取用户的最后一封电子邮件?

如何使用 shell 脚本读取用户的最后一封电子邮件?

假设我有两台机器 A 和 B

在 AI 上已安装并配置了 SMTP 和 IMAP 服务器

例如,我在机器 A 上有用户:george,密码:123456

我正在尝试编写一个 shell 脚本,该脚本将从机器 B 执行,并将读取用户 george 收到的最后一封电子邮件并显示到 STDOUT。

据我所知,为了能够被 IMAP 服务器读取,消息应该以 Maildir 格式传送。

答案1

欢迎来到 IMAP 的奇妙地狱 ;-)
您可以使用 python 来做到这一点:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from email.parser import HeaderParser

import imaplib, email, re

list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')

def parse_list_response(line):
    flags, delimiter, mailbox_name = list_response_pattern.match(line).groups()
    return (flags, delimiter, mailbox_name)

# Add your data here
HOST = 'server.de'
USERNAME = 'user'
PASSWORD = 'password'

server = imaplib.IMAP4(HOST) # connect
server.login(USERNAME, PASSWORD) # login
server.select('INBOX',readonly=True) # select mailbox aka folder

result, data = server.search(None, "ALL") # search emails

ids = data[0] # data is a list.
id_list = ids.split() # ids is a space separated string
latest_email_id = id_list[-1] # get the latest
result, data = server.fetch(latest_email_id, "(RFC822)") # fetch email

for response_part in data:
    if isinstance(response_part, tuple):
        msg = email.message_from_string(response_part[1])
        varSubject = msg['subject']
        varFrom = msg['from']
        varDate = msg['Date']

        print varDate + " " + varFrom.split()[-1] + " " + varSubject

server.close()
server.logout()

答案2

为什么不尝试基于 shell 的邮件客户端呢?例如mh-mutt 如果这些都不符合您的需求,我相信还有更多。

相关内容