Найти - Пользователи
Полная версия: Прием почты и вложения русскими буквами.
Начало » Python для новичков » Прием почты и вложения русскими буквами.
1
kaw
Проблема в том что если вложение имеет русское название обработка останавливается
Traceback (most recent call last):
File "senddoc.py", line 51, in <module>
fp = open(path+filename, 'wb')
IOError: [Errno 2] No such file or directory: 'c:\\sender\\tmp\\=?windows-1251?B?0cjAX8Hu7fPsMzAxNDI5NDMudHh0?='
вот сам код:

#! /usr/bin/python
# -*- coding: windows-1251 -*-
# Autors - Kolesnikov Alexey
#E-mail: kawsoft@yandex.ru

import sys
import getopt
import errno
import mimetypes
import mimetools
import email
import poplib
import os
import datetime
import time

# Учетные данные пользователя:
SERVER = "server"
USERNAME = "user"
USERPASSWORD = "password"

p = poplib.POP3(SERVER)
print p.getwelcome()
# этап идентификации
print p.user(USERNAME)
print p.pass_(USERPASSWORD)
# этап транзакций
response, lst, octets = p.list()
print response
for msgnum, msgsize in [i.split() for i in lst]:
print "Сообщение %(msgnum)s имеет длину %(msgsize)s" % vars()
print "UIDL =", p.uidl(int(msgnum)).split()[2]
if int(msgsize) > 32000:
(resp, lines, octets) = p.top(msgnum, 0)
else:
(resp, lines, octets) = p.retr(msgnum)
msgtxt = "\n".join(lines)+"\n\n"
msg = email.message_from_string(msgtxt)
#print "* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n" % msg
# msg содержит заголовки сообщения или все сообщение (если оно небольшое)

for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
filename = part.get_filename()
if not filename:
continue
path ="c:\\sender\\tmp\\"
while os.path.exists(path+filename):
filename = "1"+filename
fp = open(path+filename, 'wb')
fp.write(part.get_payload(decode=1))
fp.close()

p.dele(msgnum)

print p.quit()
помогите разобраться плеазззз….
py.user.next
>>> import email.header
>>> email.header.decode_header('=?windows-1251?B?0cjAX8Hu7fPsMzAxNDI5NDMudHh0?=')
[('\xd1\xc8\xc0_\xc1\xee\xed\xf3\xec30142943.txt', 'windows-1251')]
>>> lst = email.header.decode_header('=?windows-1251?B?0cjAX8Hu7fPsMzAxNDI5NDMudHh0?=')
>>> print lst[0][0].decode(lst[0][1])
СИА_Бонум30142943.txt
>>>
это не всё, там много нюансов, особенно в третьем питоне
pyuser
проблема совсем не в русских буквах :(
from email.header import decode_header

fname, charset = decode_header("=?windows-1251?B?0cjAX8Hu7fPsMzAxNDI5NDMudHh0?=")[0]
if charset:
fname = fname.decode(charset)
kaw
Спасибо, сейчас гляну.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB