0% menganggap dokumen ini bermanfaat (0 suara)
217 tayangan

Pop3 Server Dengan Socket Programming Dalam Bahasa Java

Ringkasan dokumen tersebut adalah: 1. Dokumen tersebut membahas cara membuat POP3 server sederhana menggunakan socket programming dalam bahasa Java 2. POP3 server akan menyimpan email pengguna dalam berbagai mailbox dengan alamat unik 3. Program POP3 server akan memverifikasi username dan password pengguna untuk mengakses mailboxnya

Diunggah oleh

shandy_santika
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
217 tayangan

Pop3 Server Dengan Socket Programming Dalam Bahasa Java

Ringkasan dokumen tersebut adalah: 1. Dokumen tersebut membahas cara membuat POP3 server sederhana menggunakan socket programming dalam bahasa Java 2. POP3 server akan menyimpan email pengguna dalam berbagai mailbox dengan alamat unik 3. Program POP3 server akan memverifikasi username dan password pengguna untuk mengakses mailboxnya

Diunggah oleh

shandy_santika
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 12

POP3 Server dengan Socket Programming dalam Bahasa Java

POP3 Server
dengan
Socket Programming
dalam
Bahasa Java
Jeffrey Hermanto Halimsetiawan
[email protected]
tutorialpemrograman.wordpress.com
3 Juni 2009

tutorialpemrograman.wordpress.com - 2009 1
POP3 Server dengan Socket Programming dalam Bahasa Java

POP3 Server adalah tempat dimana email ditampung dari berbagai pengirim yang dibagi dalam mailbox-
mailbox dimana masing masing mailbox memiliki alamat yang unik dari pemiliknya. Mailbox tersebut memiliki
quota space yang diset oleh administrator email server tersebut. Untuk mengakses mailbox tersebut
dibutuhkan otentikasi akses dengan menggunakan konfigurasi tertentu seperti username dan password, atau
yang biasa disebut mail account. Sebuah mail account memiliki konfigurasi yang berisi informasi teknis untuk
dapat masuk dan membaca email email yang berada di POP3 Server. Selain itu, mungkin masih ada yang
bingung mengenai perbedaan POP dan SMTP, Post Office Protocol (POP) digunakan untuk membaca email
sedangkan Simple Mail Transfer Protocol (SMTP) digunakan untuk mengirim email.

Nah, dalam tulisan ini akan dijelaskan bagaimana caranya untuk membuat POP3 Server sederhana dengan
memanfaatkan pemrograman socket dalam Bahasa Java. Nantinya, e-mail yang terdapat dalam POP3 Server
dapat di-retreive dengan menggunakan telnet ataupun Mail Client seperti Outlook Express, Mozilla
Thunderbird, dan lain sebagainya. Jika program POP3 Server nya telah di-run , cukup setting salah satu Mail
Client tersebut dengan email address misalnya : jeffrey@localhost, POP3 Server : localhost, dan POP3 port :
1804. Kemudian , tinggal lakukan receive all maka semua e-mail untuk user jeffrey akan masuk ke inbox.

Sebenarnya format e-mail yang dibaca oleh e-mail client adalah seperti ini :
From [email protected] Tue Apr 7 23:08:41 2009
Return-Path: <[email protected]>
X-Original-To: jeffrey
Delivered-To: [email protected]
Received: from hai (unknown [10.151.76.203])
by klp47.com (Postfix) with SMTP id 5E5DBEAFC
for <yoga>; Tue, 7 Apr 2009 23:08:03 +0700 (WIT)
Message-Id: <[email protected]>
Date: Tue, 7 Apr 2009 23:08:03 +0700 (WIT)
From: [email protected]
To: undisclosed-recipients:;

Nyoba PJK jeh.....

Dalam program POP3 Server yang akan dibuat ini, nantinya akan terdapat file user.txt yang menyimpan
username dan password , contoh :
jeffrey 12345
jeff 12345
Kemudian setiap user akan mempunyai file yang bernama seperti username nya yang didalamnya berisi e-mail
yang formatnya seperti format di atas yang ditujukan untuk user tersebut. Jadi, nantinya aka nada file jeffrey
dan jeff.

tutorialpemrograman.wordpress.com - 2009 2
POP3 Server dengan Socket Programming dalam Bahasa Java

Main.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jhhs;

import java.io.BufferedReader;
import java.io.FileReader;
import java.net.ServerSocket;
import java.util.StringTokenizer;
import jhhs.unit.ListMessage;
import jhhs.unit.ListUser;

/**
*
* @author Jeffrey
*/
public class Main {
public static ListUser listUser = new ListUser();

public static void main(String [] args) throws Exception{


loadUser(listUser);
int PORT = 1804;
ServerSocket listenSocket = new ServerSocket(PORT);

while(true) {
PopRequest request = new PopRequest(listenSocket.accept());
Thread thread = new Thread(request);
thread.start();
}
}

//method untuk me-load data-data user yang terdaftar


private static void loadUser(ListUser listUser){
try {
FileReader fr = new FileReader("user.txt");
BufferedReader br = new BufferedReader(fr);
while (br.ready()){
StringTokenizer st = new StringTokenizer(br.readLine());
listUser.addUser(st.nextToken(), st.nextToken());
}
} catch (Exception ex) {

}
}

//method untuk me-load data-data message yang ada


public static void loadMessage(ListMessage listMessage, String user){
try {
FileReader fr = new FileReader(user);
BufferedReader br = new BufferedReader(fr);
String tempMsg = "";
while (br.ready()){
String temp = br.readLine();
if (temp.contains("From " ) && !tempMsg.matches("") ){
listMessage.addMessage(tempMsg);
tutorialpemrograman.wordpress.com - 2009
tempMsg = ""; 3
}
tempMsg += temp +"\n";
}
if (!tempMsg.matches("")){
POP3 Server dengan Socket Programming dalam Bahasa Java

String temp = br.readLine();


if (temp.contains("From " ) && !tempMsg.matches("") ){
listMessage.addMessage(tempMsg);
tempMsg = "";
}
tempMsg += temp +"\n";
}
if (!tempMsg.matches("")){
listMessage.addMessage(tempMsg);
}
} catch (Exception ex) {

}
}
}

PopRequest.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jhhs;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.Socket;
import java.util.StringTokenizer;
import jhhs.unit.ListMessage;
import jhhs.unit.Message;
import jhhs.unit.User;

/**
*
* @author Jeffrey
*/
public class PopRequest implements Runnable{
final static String CRLF ="\r\n";
public Socket client;
private boolean login;
private boolean stop;
private boolean welcome;
public User curUser;
public ListMessage listMsg;

public PopRequest(Socket client) throws Exception {


this.client = client;
this.login = false;
this.stop = false;
this.listMsg = new ListMessage();
this.welcome = false;
}

public void run() {


try {
while (!stop){
tutorialpemrograman.wordpress.com - 2009 4
this.processRequest();
}
} catch (Exception ex) {
ex.printStackTrace();
POP3 Server dengan Socket Programming dalam Bahasa Java

public void run() {


try {
while (!stop){
this.processRequest();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}

private void processRequest() throws Exception{

InputStream is = this.client.getInputStream();
DataOutputStream dos = new
DataOutputStream(this.client.getOutputStream());

DataInputStream br = new DataInputStream(is);

if (!this.welcome){
dos.writeBytes("+OK Hello There."+CRLF);
this.welcome = true;
}
String requestLine = "";

byte ab[] = new byte[512];


br.read(ab);
for (byte counter : ab){
if (counter == 0)
break;
requestLine += (char) counter;
}
System.out.print(requestLine);

//jika user melakukan ^] atau CTRL+] pada Telnet


if (requestLine == null){
this.curUser = null;
this.stop = true;
// close connection
dos.close();
is.close();
client.close();
return;
}

StringTokenizer st = new StringTokenizer(requestLine);


String command = st.nextToken();
if (! login){
if (command.equalsIgnoreCase("quit")){
this.stop = true;
this.curUser = null;
dos.writeBytes("+OK dewey POP3 server signing off."+CRLF);
// close connection
dos.close();
is.close();
client.close();
}
if (this.curUser == null){
if (command.equalsIgnoreCase("user") && st.hasMoreTokens()){
this.curUser
tutorialpemrograman.wordpress.com = new User();
- 2009 5
this.curUser.user = st.nextToken();
if (Main.listUser.findUser(this.curUser.user)){
dos.writeBytes("+OK name is a valid mailbox."+CRLF);
}
POP3 Server dengan Socket Programming dalam Bahasa Java

if (this.curUser == null){
if (command.equalsIgnoreCase("user") && st.hasMoreTokens()){
this.curUser = new User();
this.curUser.user = st.nextToken();
if (Main.listUser.findUser(this.curUser.user)){
dos.writeBytes("+OK name is a valid mailbox."+CRLF);
}
else {
dos.writeBytes("-ERR sorry, no mailbox for
"+this.curUser.user+" here."+CRLF);
this.curUser = null;
}
}
else {
dos.writeBytes("-ERR command not found!!"+CRLF);
}
}
else {
//command untuk pass
if (command.equalsIgnoreCase("pass") && st.hasMoreTokens()){
this.curUser.pass = st.nextToken();
boolean authenticated =
Main.listUser.authenticate(this.curUser.user, this.curUser.pass);
if (authenticated){
this.login = true;
Main.loadMessage(this.listMsg, this.curUser.user);
dos.writeBytes("+OK maildrop locked and ready."+CRLF);
}
else{
dos.writeBytes("-ERR invalid password."+CRLF);
this.curUser = null;
}
}
else {
dos.writeBytes("-ERR command not found!!"+CRLF);

}
}
}
else {
// Command untuk list
if (command.equalsIgnoreCase("list")){
if (!st.hasMoreTokens()){
dos.writeBytes("+OK
"+String.valueOf(this.listMsg.list.size())+" messages."+CRLF);
int i = 1;
String msg = "";
for (Message iterator : this.listMsg.list){
msg += String.valueOf(i) + " " +
Integer.toOctalString(iterator.text.length()) + CRLF;
dos.writeBytes(msg);
msg = "";
i++;
}
dos.writeBytes("."+CRLF);
}
else {
int pil = Integer.parseInt(st.nextToken());
Message temp = this.listMsg.findMessage(pil);
tutorialpemrograman.wordpress.com
if (temp ==- null){
2009 6
dos.writeBytes("-ERR no such message, only
"+String.valueOf(this.listMsg.list.size())+" messages in maildrop."+CRLF);
}
else {
POP3 Server dengan Socket Programming dalam Bahasa Java

else {
int pil = Integer.parseInt(st.nextToken());
Message temp = this.listMsg.findMessage(pil);
if (temp == null){
dos.writeBytes("-ERR no such message, only
"+String.valueOf(this.listMsg.list.size())+" messages in maildrop."+CRLF);
}
else {
dos.writeBytes(String.valueOf(pil)+"
"+Integer.toOctalString(temp.text.length())+CRLF);
}
}
}
// Command untuk Retr
else if (command.equalsIgnoreCase("retr")){
if (st.hasMoreTokens()){
int choice = Integer.parseInt(st.nextToken());
//System.out.println(choice);
Message temp = this.listMsg.findMessage(choice);
if (temp == null){
dos.writeBytes("-ERR no such message."+CRLF);
}
else {
dos.writeBytes("+OK
"+Integer.toOctalString(temp.text.length())+" octets."+CRLF);
dos.writeBytes(temp.text+CRLF);
}
dos.writeBytes("."+CRLF);
}
else dos.writeBytes("-ERR no such message."+CRLF);
}
else if (command.equalsIgnoreCase("dele")){
if (st.hasMoreTokens()){
int choice = Integer.parseInt(st.nextToken());
//System.out.println(choice);
Message temp = this.listMsg.findMessage(choice);
if (temp == null){
dos.writeBytes("-ERR no such message."+CRLF);
}
else {
if (!temp.deleted){
temp.deleted = true;
dos.writeBytes("+OK message
"+String.valueOf(choice)+" deleted."+CRLF);
}
else {
dos.writeBytes("-ERR message
"+String.valueOf(choice)+" already deleted."+CRLF);
}
}
}
else dos.writeBytes("-ERR no such message."+CRLF);
}
else if (command.equalsIgnoreCase("stat")){
int count = this.listMsg.countMessage();
int length = this.listMsg.countLengthMessage();
dos.writeBytes("+OK "+count+" "+length+"."+CRLF);
}
else if (command.equalsIgnoreCase("quit")){
tutorialpemrograman.wordpress.com - 2009 7
this.stop = true;

int count = this.listMsg.deleteMessage();


this.listMsg.printToFile(this.curUser.user);
this.curUser = null;
POP3 Server dengan Socket Programming dalam Bahasa Java

dos.writeBytes("+OK "+count+" "+length+"."+CRLF);


}
else if (command.equalsIgnoreCase("quit")){
this.stop = true;

int count = this.listMsg.deleteMessage();


this.listMsg.printToFile(this.curUser.user);
this.curUser = null;
dos.writeBytes("+OK dewey POP3 server signing off (maildrop
empty)."+CRLF);
// close connection
dos.close();
is.close();
client.close();
}
else {
dos.writeBytes("-ERR command not found!!"+CRLF);
}
}
}
}

User.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jhhs.unit;

/**
*
* @author Jeffrey
*/
public class User {
public String user;
public String pass;

public User() {
}

public User(String user, String pass) {


this.user = user;
this.pass = pass;
}
}

tutorialpemrograman.wordpress.com - 2009 8
POP3 Server dengan Socket Programming dalam Bahasa Java

ListUser.java
package jhhs.unit;

import java.util.ArrayList;

/**
*
* @author Jeffrey
*/
public class ListUser {
public ArrayList<User> list;

public ListUser() {
this.list = new ArrayList<User>();
}

public void addUser(String user, String pass){


User newUser = new User(user, pass);
this.list.add(newUser);
}

public boolean findUser(String user){


for (User iterator : this.list){
if (iterator.user.matches(user)){
return true;
}
}
return false;
}

public boolean authenticate(String user, String pass){


for (User iterator : this.list){
if (iterator.user.matches(user) && iterator.pass.matches(pass)){
return true;
}
}
return false;
}

public void showUser(){


for (User iterator : this.list){
System.out.println(iterator.user+" "+iterator.pass);
}
}

tutorialpemrograman.wordpress.com - 2009 9
POP3 Server dengan Socket Programming dalam Bahasa Java

Message.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jhhs.unit;

/**
*
* @author Jeffrey
*/
public class Message {
public String text;
public boolean deleted;

public Message() {
}

public Message(String text) {


this.text = text;
this.deleted = false;
}
}

ListMessage.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package jhhs.unit;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;

/**
*
* @author Jeffrey
*/
public class ListMessage {
public ArrayList<Message> list;

public ListMessage() {
this.list = new ArrayList<Message>();
}

public void addMessage(String text){


Message newMessage = new Message(text);
this.list.add(newMessage);
}

public Message findMessage(int choice){


int i = 1;
for (Message iterator : this.list){
if (i == choice){
tutorialpemrograman.wordpress.com - 2009
return iterator; 10
}
i++;
}
return null;
POP3 Server dengan Socket Programming dalam Bahasa Java

public Message findMessage(int choice){


int i = 1;
for (Message iterator : this.list){
if (i == choice){
return iterator;
}
i++;
}
return null;
}

public int deleteMessage(){


int count = 0,
index = 0;
ArrayList<Integer> del = new ArrayList<Integer>();
System.out.println("Message : ");
for (Message iterator : this.list){
if (iterator.deleted){
System.out.println(iterator.text.substring(0, 30));
del.add(Integer.valueOf(index));
count++;
}
index++;
}
int minus = 0;
for (Integer counter : del){
System.out.println(counter.intValue() - minus);
System.out.println(this.list.get(counter.intValue() - minus).text);
this.list.remove(counter.intValue() - minus);

minus++;
}
return count;
}

public void showMessage(){


for (Message iterator : this.list){
System.out.println(iterator.text);
}
}

public int countMessage(){


int count = 0;
for (Message iterator : this.list){
if (!iterator.deleted){
count++;
}
}
return count;
}

public int countLengthMessage(){


int count = 0;
for (Message iterator : this.list){
if (!iterator.deleted){
count +=
Integer.parseInt(String.valueOf(iterator.text.length()),8);
}
}
tutorialpemrograman.wordpress.com
return count; - 2009 11
}

public void printToFile(String user){


FileWriter fw;
POP3 Server dengan Socket Programming dalam Bahasa Java

Integer.parseInt(String.valueOf(iterator.text.length()),8);
}
}
return count;
}

public void printToFile(String user){


FileWriter fw;
try {
fw = new FileWriter(user);
BufferedWriter bw = new BufferedWriter(fw);
bw.flush();
for (Message iterator : this.list){
bw.write(iterator.text);
}
bw.close();
fw.close();
} catch (Exception ex) {

}
}
}

tutorialpemrograman.wordpress.com - 2009 12

Anda mungkin juga menyukai