webForumDet fria alternativet

Skicka e-mail

12 svar · 460 visningar · startad av SPiN

SPiNMedlem sedan mars 20005 832 inlägg
#1

Hej!

Jag sitter och leker med J2ME och funderar på hur jag ska kunna bygga en email-applikation för telefoner... Jag vill alltså inte använda redan existerande JavaMail eller liknande, utan skriva en egen, pytteliten applikation för det här. Hur ser protkollet för SMTP ut, och hur bör jag gå till väga? Det handlar alltså om att skicka små meddelanden ( Inte ens ta emot e-mails alltså ), utan möjligheten med attachments och liknande. Plain text, mao.

Jag har sökt som en dåre på nätet, och jag får väl pallra mitt arsle till RFC'n för SMTP - men jag kommer nog inte att förstå nånting där heller. Hur ser t.ex. anslutningssträngen till en SMTP-server ut? Protokollet är väl inte så svårt att luska ut, egentligen.

ViktorMedlem sedan aug. 20021 710 inlägg
#2

Som du säger så är det inte så svårt :)

Example of the SMTP Procedure

     This SMTP example shows mail sent by Smith at host Alpha.ARPA,
     to Jones, Green, and Brown at host Beta.ARPA.  Here we assume
     that host Alpha contacts host Beta directly.

        S: MAIL FROM:\<Smith@Alpha.ARPA\>
        R: 250 OK

        S: RCPT TO:\<Jones@Beta.ARPA\>
        R: 250 OK

        S: RCPT TO:\<Green@Beta.ARPA\>
        R: 550 No such user here

        S: RCPT TO:\<Brown@Beta.ARPA\>
        R: 250 OK

        S: DATA
        R: 354 Start mail input; end with \<CRLF\>.\<CRLF\>
        S: Blah blah blah...
        S: ...etc. etc. etc.
        S: \<CRLF\>.\<CRLF\>
        R: 250 OK

     The mail has now been accepted for Jones and Brown.  Green did
     not have a mailbox at host Beta.

Du kan själv prova genom att öppna telnet mot din mailserver (har testat själv mot telia och det fungerar).
För att logga in så skriver du "helo xxxx.xxxx.xxx" (xxx är din mail server) och efter det är det bara att följa koden som jag klipte in ovan. Du avslutar medelandet (data) genom att ha en ensam punkt på en rad. För att få subject så skriver du "Subject: Ditt subject" högst upp i data och trycker på return 2 ggr.

För att få det att fungera i Java vet jag inte hur man ska göra. Om man kan ignorera retur koder så är det nog inte så svårt men om man inte kan göra det, hur gör man då för att få dubbel riktad komunikation?

/Viktor

SPiNMedlem sedan mars 20005 832 inlägg
#3

Thanks, mon! Nu ska jag pillas med Java. :)

SPiNMedlem sedan mars 20005 832 inlägg
#4

Humma, kommandot RCPT TO: kändes inte igen... Jag testar mot Telia. :q

GeinMedlem sedan sep. 20004 849 inlägg
#5

Testar mot telia? dom har stängt ner port 25, kan det vara ett problem?

SPiNMedlem sedan mars 20005 832 inlägg
#6

Nej, det har dom inte eftersom att jag lyckas logga in mot den. Dom har troligtvis inte stängt den på sin egen SMTP-server... ;)

GeinMedlem sedan sep. 20004 849 inlägg
#7

Oh, inte på deras egen givetvis, trodde du lekte med egen eller så :r

ViktorMedlem sedan aug. 20021 710 inlägg
#8

Det är lite krångligt, om du har skrivit fel och går bakåt, och skriver om så ser det rätt ut på skärmen men det skickas fel. Försök igen bara och skriv rätt från början så ska det fungera :)
Jag provade som sagt för 2 timmar sedan på mail1.telia.com och det gick bra.

/Viktor

SPiNMedlem sedan mars 20005 832 inlägg
#9

mail1.telia.com använder inte jag, det är väl deras POP3-server? Jag tror inte att jag skrev fel, men jag försöker igen. :)

ViktorMedlem sedan aug. 20021 710 inlägg
#10

Nej, mail1.telia.com är SMTP servern, m1.877.telia.com är POP servern.

/Viktor

SPiNMedlem sedan mars 20005 832 inlägg
#11

Jaja, jag luskade fram att båda var SMTP-servers ivf, så det verkade inte spela nån roll... ;)

Det funkade fint den här gången. :)

Gütt! Tack!

ViktorMedlem sedan aug. 20021 710 inlägg
#12

Lägg gärna ut lite kod om du lyckas :)

/Viktor

SPiNMedlem sedan mars 20005 832 inlägg
#13

Det var ju inga konstigheter alls att skriva en Java-applikation som skickar enkla text-emails:

import java.io.*;
import java.net.Socket;
import java.net.SocketException;

public class EMail {
	private Socket socket;
	private OutputStreamWriter outputStreamWriter;
	private BufferedReader bufferedReader;
	
	public static void main( String[] args ) {
		EMail email = new EMail();
		email.start( "MyMessage", "bjorne.w@telia.com", "bjorne.w@telia.com" );
	}
	
	public void start( String message, String from, String to ) {
		try {
			System.out.println( "Connection to mail1.telia.com..." );
			this.socket = new Socket( "mail1.telia.com", 25 );
			
			this.outputStreamWriter = new OutputStreamWriter( this.socket.getOutputStream() );
			this.bufferedReader = new BufferedReader( new InputStreamReader( this.socket.getInputStream() ) );
			
			System.out.println( "Connected!" );
			System.out.println( "From server: " + bufferedReader.readLine() );
			
			send( "helo mail1.telia.com" );
			send( "MAIL FROM:<" + from + ">" );
			send( "RCPT TO:<" + to + ">" );
			send( "DATA" );
			send( message + "\r\n.\r\n" );
			
			this.outputStreamWriter.close();
			this.bufferedReader.close();
			this.socket.close();
		}
		catch( Exception e ) {
			System.err.println( "Error: " + e.getMessage() );
			e.printStackTrace();
		}
	}
	
	private void send( String sendMe ) throws Exception {
		System.out.println( "To server: " + sendMe );
		this.outputStreamWriter.write( sendMe + "\r\n" );
		this.outputStreamWriter.flush();
		System.out.println( "From server: " + this.bufferedReader.readLine() );
	}
}
132 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
129 ms — hämta tråd, inlägg och bilagor (db)