Bu Blogumda J2ME(Java 2 Micro Edition) ile nasıl SMTP servere baglanıp email Mesajı atabilecegimizi açıklamaya çalısacam.
J2ME ile SMTP Servere baglanabilmek için javax.microedition.io.Connector classını javax.microedition.io.StreamConnection class'ına cast ederek baglantı saglayacagız.
SMTP Server baglantımızı bu şekilde Kurabiliriz
StreamConnection connection;
connection = (StreamConnection)Connector.open("socket://" + "smtp.yourdomain.com" + ":25", Connector.READ_WRITE);
//SMTP Stream Connectionından DataInputStream ve DataOutputStream çekelim
DataOutputStream out = c.openDataOutputStream();
DataInputStream in = c.openDataInputStream();
SMTP Server ile Baglantımız şu anda hazır halde bulunmaktadır ve input ve utput için beklemektedir. Bundan Sonraki yapacagımız SMTP Protocolunü inceleyip protokol kurallarına uyarak Sockete yazıp ve Socket ten Responsalerı okumalıyız. Fakat bunu yapmadan önce birkaç tane Helper methodu yaratıp
işmizi kolaylaştırmak lazım.
//Verilen Stringi DataOutputStream'ine yazar
private void write(DataoutputStream out, String s)throws java.io.IOException
{
out.write(s.getBytes("utf-8"));
}
//Birsonraki Line Feed'e Kadar Okur
private String readline(DataInputStream in)throws java.io.IOException {
StringBuffer s = new StringBuffer();
int i;
while ((i=in.readUnsignedByte()) != -1 && (i != '\n')){
s.append((char) b);
}
return new String(s);
}
//Bir Sonraki Input kommandına Kadar Okur ve Input kommandının bitmesi Server'ın input için Hazır olması demektir.
private void skipInput()throws java.io.IOException{
int avail;
while (in.available() != 0) {
readResponse();
}
}
Ve sıra Mesajımızı Gondermekte.
Connection Parametrelerinin connect() adlı bir methodda bulundugunu farz edelim.
connect();
readResponse();
write(out,"HELO pensioner.su\r\n");
skipInput();
write(out,"MAIL FROM: <eren@domain.tls>\r\n");
readResponse();
write(out,"RCPT TO: you@domain.tls\r\n");
readResponse();
write("DATA\r\n");
readResponse();
write("From: <eren@domain.tls>\r\n" +
"To: you@omin.tls\r\n" +
"Subject: My J2ME SMTP Blog \r\n" +
"Content-Type: text/plain;\r\n" +
"\tcharset=\"utf-8\"\r\n" +
"\r\nBu Bir Test Mesajıdır Lütfen panik yaratmayın.\r\n" +
"\r\n.\r\n"
);
readResponse();
write("RSET\r\n");
write("QUIT\r\n");
skipInput();
Uymanız gereken e önemli kurallardan biri Yeni Satırın CRLF (Carriage Return + Line Feed) şeklinde yer almasıdır.
CRLF = "\r\n"
LF = "\n"