我尝试将电子邮件从邮箱的 gmail 移动到另一个邮箱,只是好奇当移动到新邮箱时每封电子邮件的 UID 会发生变化吗?
使用IMAPClient如何查看邮件正文和发件人电子邮件地址?
server = IMAPClient(imap_server, use_uid=True, ssl=ssl)
server.login(imap_user, imap_password)
print 'login successful'
select_info = server.select_folder('INBOX')
print '%d messages in INBOX' % select_info['EXISTS']
messages = server.search(['NOT DELETED'])
print "%d messages that aren't deleted" % len(messages)
print
print "Messages:"
response = server.fetch(messages, ['FLAGS', 'RFC822.SIZE'])
for msgid, data in response.iteritems():
print ' ID %d: %d bytes, flags=%s' % (msgid,
data['RFC822.SIZE'],
data['FLAGS'])
Run Code Online (Sandbox Code Playgroud) 我正在开发一些IMAP检查器。现在,收件箱计数以以下布局显示一条消息:[' number ']。
现在,这个数字被分流到数以VAR NUM。请参见以下代码:
for num in data[0].split():
print num
Run Code Online (Sandbox Code Playgroud)
现在的事情是,如果不存在任何新的电子邮件,那么我想要一个if语句,例如:
if <num doesn't exist>: print "No new emails found."
Run Code Online (Sandbox Code Playgroud)
但是,如果语句是什么样的呢?
这就是我现在所在的位置,但我不知道从这里该去哪里:
import imaplib
import email
conn = imaplib.IMAP4()
conn.login("username", "password")
status, messages = conn.select('INBOX')
if status != "OK":
print ("Incorrect mail box")
exit()
print (messages)
Run Code Online (Sandbox Code Playgroud) 我需要过滤电子邮件并根据某些条件对其进行标记。
这是我的代码:
def get_inbox():
os.chdir("C:/Users/simeone/Desktop/FilterEmails")
df = {}
df = pd.read_excel("Filtri.xlsx", encoding='utf-8', sheet_name = ['FROM', 'TEXT', 'SUBJECT'])
filters = []
for key in df.keys():
fil = [ '(OR ' + key + ' ' + '"' + name + '"'+ ' UNSEEN)' for name in list(df[key][df[key].columns[0]])]
str1 = ' '.join(fil)
filters.append(str1)
filtro = ' '.join(filters)
mail = imaplib.IMAP4_SSL(host)
mail.login(username, password)
mail.select("inbox")
_, search_data = mail.search(None, filtro)
Run Code Online (Sandbox Code Playgroud)
代码不完整,但这不是重点,因为错误是条件。问题是条件。
我从 Excel 导入条件,其中条件分为来源、文本、主题,然后对它们施加条件。
问题在于代码会选择每封看不见的电子邮件,无论测试和主题如何。
我心里清楚逻辑,但无法正确翻译为代码。mail.search 必须做的是: AND UNSEEN AND (OR FROM "####" OR …