假设我有两台机器 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
如果这些都不符合您的需求,我相信还有更多。