Revision: 68970
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at March 27, 2015 22:28 by syedhussim
Initial Code
import socket; class POP3(): def __init__(self, host, port): self.log = "" ip = socket.gethostbyname(host) self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = self.sock.connect_ex((ip, port)) if result == 0: self.log += "GREETING: " +self.read_line() def credentials(self, username, password): self.send_cmd("USER " + username + "\n") self.log += "USER: " + self.read_line() self.send_cmd("PASS " + password + "\n") self.log += "PASS: " + self.read_line() def msg_count(self): self.send_cmd("STAT\n") response = self.read_line() parts = response.split(" ") return parts[1] def get_message(self, msg_index): message = POP3Message() self.send_cmd("RETR " + str(msg_index) + "\n") parts = self.read_line().split(" ") if parts[0] == "+OK": size = int(parts[1]) data = "" while len(data) < size: data += self.sock.recv(1024).decode("utf-8") lines = data.split("\n") headers = {} is_header = True body = "" for line in lines: if line.strip() != "" and is_header == True: key_value_header = line.strip().split(":", 1) if len(key_value_header) == 2: headers[key_value_header[0].strip()] = key_value_header[1].strip() else: is_header = False if is_header == False: body += line message.set_from(headers["From"]) message.set_to(headers["To"]) message.set_subject(headers["Subject"]) message.set_date(headers["Date"]) message.set_body(body) return message def get_log(self): return self.log def send_cmd(self, cmd): self.sock.sendall(bytes(cmd, "UTF-8")) def read_line(self): return self.sock.recv(1024).decode("utf-8") class POP3Message(): def set_from(self, fromAddr): self.fromAddr = fromAddr def get_from(self): return self.fromAddr def set_to(self, to): self.to = to def get_to(self): return self.to def set_subject(self, subject): self.subject = subject def get_subject(self): return self.subject def set_date(self, date): self.date = date def get_date(self): return self.date def set_body(self, body): self.body = body def get_body(self): return self.body pop_client = POP3("pop.host.com", 110) pop_client.credentials("username", "password") print("Message count:" + pop_client.msg_count()) message = pop_client.get_message(1) print("From: " + message.get_from()) print("To: " + message.get_to()) print("Subject: " + message.get_subject()) print("Date: " + message.get_date()) print("Body: " + message.get_body()) print(pop_client.get_log())
Initial URL
http://www.hostprojects.net/snippets/python/147/simple-pop3-class
Initial Description
The following code snippet shows a basic POP3 class, which can get the total message count and message details.
Initial Title
Simple POP3 Class
Initial Tags
Initial Language
Python