2009-04-08 34 views
21

Tôi đã khá quen thuộc với khả năng gửi email của django, nhưng tôi không thấy bất kỳ điều gì về việc nhận và xử lý email từ người dùng. Chức năng này có sẵn không?django để gửi VÀ nhận email?

Một vài tìm kiếm trên google chưa đưa ra kết quả đầy hứa hẹn. Mặc dù tôi đã tìm thấy điều này: Receive and send emails in python

Tôi có phải tự cuộn của mình không? nếu vậy, tôi sẽ đăng tải ứng dụng đó nhanh hơn bạn có thể nói ... bất cứ điều gì bạn nói.

cảm ơn, Jim

cập nhật: Tôi không cố gắng để làm cho một máy chủ email, tôi chỉ cần thêm một số chức năng mà bạn có thể gửi email cho một hình ảnh vào trang web và có nó bật lên trong bạn tài khoản.

+0

Xem thêm câu hỏi này: http://stackoverflow.com/questions/640970/email-integration –

Trả lời

17

Có một ứng dụng gọi là jutda-helpdesk sử dụng số poplibimaplib của Python để xử lý email đến. Bạn chỉ cần có một tài khoản ở đâu đó với quyền truy cập POP3 hoặc IMAP.

này được chuyển thể từ get_email.py của họ:

def process_mail(mb): 
    print "Processing: %s" % q 
    if mb.email_box_type == 'pop3': 
     if mb.email_box_ssl: 
      if not mb.email_box_port: mb.email_box_port = 995 
      server = poplib.POP3_SSL(mb.email_box_host, int(mb.email_box_port)) 
     else: 
      if not mb.email_box_port: mb.email_box_port = 110 
      server = poplib.POP3(mb.email_box_host, int(mb.email_box_port)) 
     server.getwelcome() 
     server.user(mb.email_box_user) 
     server.pass_(mb.email_box_pass) 

     messagesInfo = server.list()[1] 

     for msg in messagesInfo: 
      msgNum = msg.split(" ")[0] 
      msgSize = msg.split(" ")[1] 
      full_message = "\n".join(server.retr(msgNum)[1]) 

      # Do something with the message 

      server.dele(msgNum) 
     server.quit() 

    elif mb.email_box_type == 'imap': 
     if mb.email_box_ssl: 
      if not mb.email_box_port: mb.email_box_port = 993 
      server = imaplib.IMAP4_SSL(mb.email_box_host, int(mb.email_box_port)) 
     else: 
      if not mb.email_box_port: mb.email_box_port = 143 
      server = imaplib.IMAP4(mb.email_box_host, int(mb.email_box_port)) 
     server.login(mb.email_box_user, mb.email_box_pass) 
     server.select(mb.email_box_imap_folder) 
     status, data = server.search(None, 'ALL') 
     for num in data[0].split(): 
      status, data = server.fetch(num, '(RFC822)') 
      full_message = data[0][1] 

      # Do something with the message 

      server.store(num, '+FLAGS', '\\Deleted') 
     server.expunge() 
     server.close() 
     server.logout() 

mb chỉ là một số đối tượng để lưu trữ tất cả các thông tin máy chủ mail, phần còn lại nên được khá rõ ràng.

Có thể bạn sẽ cần phải kiểm tra tài liệu trên poplibimaplib để nhận các phần cụ thể của thư, nhưng hy vọng điều này là đủ để giúp bạn tiếp tục.

2

Django thực sự được dự định là máy chủ web (tốt, như một khuôn khổ phù hợp với máy chủ web), không phải là máy chủ email. Tôi cho rằng bạn có thể đặt một số mã vào ứng dụng web Django khởi động máy chủ email, sử dụng loại mã được hiển thị trong câu hỏi mà bạn đã liên kết, nhưng tôi thực sự không khuyên bạn nên sử dụng nó; đó là sự lạm dụng khả năng lập trình web động.

Thực tiễn thông thường là phải có các máy chủ email và web riêng biệt, và để thực hiện điều đó, bạn sẽ muốn xem một số thứ như Postmail hoặc (tốt hơn) Postfix. Đối với POP3 bạn cũng sẽ cần một cái gì đó như Dovecot hoặc Courier, tôi nghĩ. (Chắc chắn là máy chủ email có thể thông báo cho ứng dụng web của bạn khi nhận được email để có thể hành động với chúng, nếu đó là những gì bạn muốn làm.)

EDIT: để phản hồi ý kiến ​​của bạn: có bạn cố gắng tạo (hoặc ít nhất là sử dụng) một máy chủ email. Một máy chủ email chỉ là một chương trình nhận email (và có thể có khả năng gửi chúng, nhưng bạn không cần nó).

Bạn chắc chắn có thể viết một máy chủ email nhỏ bằng Python chỉ nhận các email này và lưu hình ảnh vào hệ thống tệp hoặc cơ sở dữ liệu hoặc bất kỳ thứ gì. (Có thể đáng để hỏi một câu hỏi mới, về) Nhưng đừng biến nó thành một phần của ứng dụng web Django của bạn; giữ nó như là một chương trình riêng biệt.

+1

Tôi không cố gắng tạo một máy chủ email, tôi chỉ cần thêm một số chức năng mà bạn có thể gửi hình ảnh qua email đến và đưa nó vào tài khoản của bạn. – Jiaaro

5

Tôi biết câu hỏi này hiện đã khá cũ nhưng chỉ nghĩ rằng tôi muốn thêm để tham khảo trong tương lai mà bạn có thể muốn cung cấp cho http://cloudmailin.com một lần. Chúng tôi có khá nhiều người dùng django sử dụng hệ thống và nó phải đơn giản hơn một chút so với giải pháp được đề xuất.

+0

THANK YOU steve, đây chính xác là những gì tôi đang tìm kiếm. –

Các vấn đề liên quan