标签: imaplib

一次获取多个IMAP消息

我见过的关于使用python通过IMAP加载电子邮件的示例进行搜索,然后对结果中的每个消息ID进行查询.我想通过一次取出它们来加快速度.

python imap imaplib

5
推荐指数
1
解决办法
6172
查看次数

使用imaplib删除gmail中的电子邮件时出现问题

我尝试从收件箱文件夹中删除邮件,一切正常,但当我切换到所有邮件文件夹时删除不起作用.expunge()方法返回('OK', [None])并且未删除消息:

>>>import imaplib
>>>server = imaplib.IMAP4_SSL('imap.gmail.com','993')
>>>server.login('likvidator89@gmail.com','Password')
>>>server.select('inbox')
>>>for i in server.search(None,'all')[1][0].split():
...    print i+"\n"+server.fetch(i,'(BODY[HEADER.FIELDS (Subject)])')[1][0][1]
...
#  that how i know what UID hame my message? I select by subject
#....
#28
#Subject: 1 Question Has 1 Answer - Stack Overflow
#
#
#29
#Subject: 2222222222
#...
>>>server.store(29,'+FLAGS','\\Deleted')
#('OK', ['29 (FLAGS (\\Seen \\Deleted))'])
>>>server.expunge()
#('OK', ['29'])
>>> server.select('[Gmail]/All Mail')
('OK', ['47'])
>>> for i in server.search(None,'all')[1][0].split():
...  print i+"\n"+server.fetch(i,'(BODY[HEADER.FIELDS (Subject)])')[1][0][1]
... 
#....
#
#46 …
Run Code Online (Sandbox Code Playgroud)

python gmail imap imaplib gmail-imap

5
推荐指数
3
解决办法
8408
查看次数

将消息从一台IMAP服务器移动到另一台IMAP服务器的脚本

我们的办公室使用2台IMAP服务器发送电子邮件,其中一台是传入服务器并保存最近的电子邮件,另一台是存档服务器。我们主要使用Outlook 2010,当前的过程是定期将已发送的邮件从传入服务器拖动到存档中。

今天,我被要求研究编写脚本,该脚本将定期(可能使用crontab)捕获所有已发送的消息并将其移动到存档中。

我研究了一些SSL或telnet实例来访问服务器并四处摸索。但是我不知道编写此脚本或如何在IMAP环境中跨服务器移动文件的最佳方法。

做到这一点的最佳方法是什么?我宁愿仅从舒适度的角度使用Python,但是如果已经存在另一种语言的解决方案,我可以解决。


更新:

好的,这是一些代码。当前,它可以很好地复制消息,但是,它将复制存档服务器上的现有消息。

import imaplib
import sys

#copy from
f_server = 'some.secret.ip.address'
f_username = 'j@example.com'
f_password = 'password'
f_box_name = 'Sent Messages'

#copy to
t_server = 'archive.server.i.p'
t_username = 'username'
t_password = 'password'
t_box_name = 'test'

To = imaplib.IMAP4(t_server) 
To.login(t_username, t_password)
print 'Logged into mail server'

From = imaplib.IMAP4(f_server)
From.login(f_username, f_password)
print 'Logged into archive'

From.select(f_box_name)  #open box which will have its contents copied
print 'Fetching messages...'
typ, data = From.search(None, 'ALL')  #get all messages in …
Run Code Online (Sandbox Code Playgroud)

python email imap mail-server imaplib

5
推荐指数
1
解决办法
4197
查看次数

如何仅从特定Gmail邮件标签下载未读附件?

我有一个Python脚本改编自下载使用Python发送到Gmail的MMS电子邮件

import email, getpass, imaplib, os

detach_dir = '.' # directory where to save attachments (default: current)
user = raw_input("Enter your GMail username:")
pwd = getpass.getpass("Enter your password: ")

# connecting to the gmail imap server
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
m.select("[Gmail]/All Mail") # here you a can choose a mail box like INBOX instead
# use m.list() to get all the mailboxes

resp, items = m.search(None, 'FROM', '"Impact Stats Script"') # you could filter using the IMAP rules here …
Run Code Online (Sandbox Code Playgroud)

python gmail attachment imaplib

5
推荐指数
1
解决办法
9529
查看次数

imaplib/gmail如何在不标记读取的同时下载完整的消息(所有部分)

我无意中将此收件箱中的所有邮件标记为使用此python语句读取:

status, data = conn.uid('fetch', fetch_uids, '(RFC822)')
Run Code Online (Sandbox Code Playgroud)

但我能够通过以下一组陈述来浏览消息的所有部分:

email_message = email.message_from_string(data[0][1])
for part in email_message.walk():
  print '\n'
  print 'Content-Type:',part.get_content_type()
  print 'Main Content:',part.get_content_maintype()
  print 'Sub Content:',part.get_content_subtype()
Run Code Online (Sandbox Code Playgroud)

输出:

Content-Type: multipart/mixed
Main Content: multipart
Sub Content: mixed


Content-Type: multipart/alternative
Main Content: multipart
Sub Content: alternative


Content-Type: text/plain
Main Content: text
Sub Content: plain


Content-Type: text/html
Main Content: text
Sub Content: html
Run Code Online (Sandbox Code Playgroud)

我发现如果我使用这个陈述:

status, data = conn.uid('fetch', fetch_uids, '(RFC822.HEADER BODY.PEEK[1])')
Run Code Online (Sandbox Code Playgroud)

我不会将所有消息都标记为已读.但是,我也不会得到消息的所有部分:

Content-Type: multipart/mixed
Main Content: multipart
Sub Content: mixed
Run Code Online (Sandbox Code Playgroud)

我试着在这里阅读imaplib的手册,但没有提到"peek"这个词.我的问题是,如何在不将我的消息标记为已读的情况下获取消息的所有部分?谢谢.

python gmail imaplib

5
推荐指数
1
解决办法
3305
查看次数

使用Python从Gmail中提取信息

我已经通过解决方案从Gmail邮箱中选定的已接收电子邮件中提取有用信息.

在这个例子的目的是获取从提供每月石油价格的时事通讯发送的所有邮件.您可以在EIA网站上自由订阅此类时事通讯.所有这些时事通讯都会在我的Gmail邮箱中的相同文件夹中找到,并以"$"开头.

电子邮件的内容就是这样

在此输入图像描述

我的目标是编写一个脚本来获取最后10封这样的电子邮件(过去10个月),并根据时间绘制不同美国地区的石油价格.

python gmail extract imaplib

5
推荐指数
1
解决办法
1万
查看次数

为什么我不能在Python中两次登录到imap服务器

如下面的错误消息所示,我无法登录,因为我处于状态LOGOUT而不处于状态NONAUTH.如何从LOGOUT到NONAUTH?

下面的示例(显然登录凭据是伪造的)

Python 2.7.3 (default, Aug  1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import imaplib
>>> imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993)
>>> imap_server.login('something@myserver.com', 'mypassword')
('OK', ['something@myserver.com Joe Smith authenticated (Success)'])
>>> imap_server.logout()
('BYE', ['LOGOUT Requested'])
>>> imap_server.login('something@myserver.com', 'mypassword')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/imaplib.py", line 505, in login
    typ, dat = self._simple_command('LOGIN', user, self._quote(password))
  File "/usr/lib/python2.7/imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File …
Run Code Online (Sandbox Code Playgroud)

python imap imaplib

5
推荐指数
1
解决办法
3066
查看次数

如何连接 Python IMAP4_SSL 和自签名服务器 SSL 证书?

我正在使用 python3 并imaplib连接到 Exchange 服务器。Exchange 服务器使用为主机名“my.server.fqdn”创建的自签名证书。最近在我的工作站 (Ubuntu 14.04) 上升级操作系统后,我的 python 脚本不再有效。

我正在使用的基本代码片段在这里:

#!/usr/bin/python3

import imaplib
import socket
import ssl
import getpass

passwd = getpass.getpass()
mail =  imaplib.IMAP4_SSL('my.server.fqdn', 1143)  
mail.login('mike', passwd)
mail.list()
mail.select("INBOX")
Run Code Online (Sandbox Code Playgroud)

代码在升级之前运行良好。现在此代码产生此错误:

Traceback (most recent call last):
  File "./example.py", line 9, in <module>
    mail =  imaplib.IMAP4_SSL('my.server.fqdn', 1143)  
  File "/usr/lib/python3.4/imaplib.py", line 1222, in __init__
    IMAP4.__init__(self, host, port)
  File "/usr/lib/python3.4/imaplib.py", line 181, in __init__
    self.open(host, port)
  File "/usr/lib/python3.4/imaplib.py", line 1236, in open
    IMAP4.open(self, host, port)
  File "/usr/lib/python3.4/imaplib.py", line 257, …
Run Code Online (Sandbox Code Playgroud)

python ssl-certificate imaplib

5
推荐指数
1
解决办法
6412
查看次数

imaplib - Gmail中存档/所有邮件的正确文件夹名称是什么?

我有一个脚本可以将Gmail中的所有电子邮件导出为文本文件.

它适用于您选择文件夹的这一行:

mail.select("inbox")
Run Code Online (Sandbox Code Playgroud)

但我不确定Gmail存档的名称是什么,其中存储了所有电子邮件.我已经尝试过存档和所有邮件和东西,但没有运气.

有谁知道正确的名字?

python email gmail imaplib

4
推荐指数
1
解决办法
2487
查看次数

使用python脚本读取未读电子邮件

我正在尝试阅读来自 gmail 帐户的所有未读电子邮件。上面的代码能够建立连接但无法获取电子邮件。

我想打印每封电子邮件的内容。

我收到错误,因为无法将 int 连接到字节。

代码:

import smtplib
import time
import imaplib
import email

def read_email_from_gmail():
        mail = imaplib.IMAP4_SSL('imap.gmail.com')
        mail.login('my_mail','my_pwd')
        mail.select('inbox')

        result, data = mail.search(None, 'ALL')
        mail_ids = data[0]

        id_list = mail_ids.split()   
        first_email_id = int(id_list[0])
        latest_email_id = int(id_list[-1])


        for i in range(latest_email_id,first_email_id, -1):
            result, data = mail.fetch(i, '(RFC822)' )

            for response_part in data:
                if isinstance(response_part, tuple):
                    msg = email.message_from_string(response_part[1])
                    email_subject = msg['subject']
                    email_from = msg['from']
                    print ('From : ' + email_from + '\n')
                    print ('Subject : ' + …
Run Code Online (Sandbox Code Playgroud)

python smtp imaplib python-3.x

4
推荐指数
1
解决办法
8197
查看次数