Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 14:41 Der er 22 kommentarer og
1 løsning

Email afsender som har virket

Jeg har et eksempel taget direkte fra en java bog som jeg har haft til at virke men nu gør det pludselig ikke mere og jeg aner ikke hvad som skulle have ændret sig.
Programmet ser ud som følger:

import java.io.*;
import java.net.*;
import java.util.*;

public class SMTPClientDemo
{
  protected int port = 25;
  protected String hostname = "localhost";
  protected String from = "";
  protected String to = "";
  protected String subject = "";
  protected String body = "";
  protected Socket socket;
  protected BufferedReader br;
  protected PrintWriter pw;

  public SMTPClientDemo() throws Exception
  {
    try
    {
      getInput();
      sendEmail();
    }
    catch(Exception e)
    {
      System.out.println("Error sending message - " + e);
    }
  }

  public static void main(String []args) throws Exception
  {
    SMTPClientDemo client = new SMTPClientDemo();
  }

  protected int readResponseCode() throws Exception
  {
    String line = br.readLine();
    System.out.println("> " + line);
    line = line.substring(0, line.indexOf(" "));
    return Integer.parseInt(line);
  }

  protected void writeMsg(String msg) throws Exception
  {
    pw.println(msg);
    pw.flush();
    System.out.println("> " + msg);
  }

  protected void closeConnection() throws Exception
  {
    pw.flush();
    pw.close();
    br.close();
    socket.close();
  }

  protected void sendQuit() throws Exception
  {
    System.out.println("Sending QUIT");
    writeMsg("QUIT");
    readResponseCode();

    System.out.println("Closing Connection");
    closeConnection();
  }

  protected void sendEmail() throws Exception
  {
    System.out.println("Sender besked");
    System.out.println("------------------------------");

    System.out.println("Opening Socket");
    socket = new Socket(this.hostname, this.port);

    System.out.println("Creating Reader & Writer");
    br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

    System.out.println("Læser første linie...");
    int code = readResponseCode();
    if(code != 220)
    {
      socket.close();
      throw new Exception("Invalid SMTP server");
    }

    System.out.println("Sending HELO command");
    writeMsg("HELO " + InetAddress.getLocalHost().getHostName());
    code = readResponseCode();
    if(code != 250)
    {
      sendQuit();
      throw new Exception("Invalid SMTP server");
    }

    System.out.println("Sending mail from command");
    writeMsg("MAIL FROM:<" + this.from + ">");
    code = readResponseCode();
    if(code != 250)
    {
      sendQuit();
      throw new Exception("Invalid SMTP server");
    }

    System.out.println("Sending rcpt to command");
    writeMsg("RCPT TO:<" + this.to + ">");
    code = readResponseCode();
    if(code != 250)
    {
      sendQuit();
      throw new Exception("Invalid SMTP server");
    }

    System.out.println("Sending data command");
    writeMsg("DATA");
    code = readResponseCode();
    if(code != 354)
    {
      sendQuit();
      throw new Exception("Data entry not accepted");
    }

    System.out.println("Sending message");
    writeMsg("Subject: " + this.subject);
    writeMsg("To: " + this.to);
    writeMsg("FROM: " + this.from);
    writeMsg("");
    writeMsg(body);
    code = readResponseCode();
    sendQuit();
    if(code != 250)
      throw new Exception("Beskeden er ikke nået korrekt frem");
    else
      System.out.println("Beskeden er sendt");
  }

  protected void getInput() throws Exception
  {
    String data = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Please enter SMTP server hostname: ");
    data = br.readLine();

    if(data == null || data.equals(""))
      hostname = "localhost";
    else
      hostname = data;

    System.out.println("Please enter FROM email address: ");
    data = br.readLine();
    from = data;

    System.out.println("Please enter TO email address: ");
    data = br.readLine();
    if(!(data == null || data.equals("")))
      to = data;


    System.out.println("Please enter subject: ");
    data = br.readLine();
    subject = data;

    System.out.println("Please enter plain-text message ('.' character on a blank line signals end of message):");
    StringBuffer buffer = new StringBuffer();

    String line = br.readLine();
    while(line != null)
    {
      if(line.equalsIgnoreCase("."))
      {
        break;
      }
      buffer.append(line);
      buffer.append("\n");
      line = br.readLine();
    }
    buffer.append(".\n");
    body = buffer.toString();
  }
}
Avatar billede arne_v Ekspert
27. februar 2005 - 14:43 #1
1)  kan du uddybe hvordan det ikke virker ?

2)  nogen speciel grund til at du bruger socket og ikke det færdige javamail ?
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 15:53 #2
1) Det viker på den måde at når det køres bliver man bedt om at indtaste email server, din egen email, modtagerens email, emne og tekst og så er der vist noget med at et . alene på en linie indikere afslutningen af mailens tekst.

2) Næeh ikke udover at det var det her eksempel jeg fandt i en bog og kastede mig over
Avatar billede arne_v Ekspert
27. februar 2005 - 16:01 #3
re 1)

Jeg mente hvad sker der når du siger det ikke virker. Hvilken fejl får du.
Avatar billede arne_v Ekspert
27. februar 2005 - 16:02 #4
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 16:39 #5
Jeg får som sådan ikke nogen fejl, men efter den har sendt teksten fryser og kommer ikke med den forventede meddelelse om hvor vidt mailen er sendt eller ej. Det kunne virke som om den ikke er klar over at mailens tekst er slut...
Avatar billede arne_v Ekspert
27. februar 2005 - 16:45 #6
Du kunne ihvertfald starte med at bruge \r\n fremfor kun \n
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 17:10 #7
det prøvede jeg og det lader heller ikke til at virke. Jeg læste din artikel og det kan godt være det er mig som er dum men du skriver at man skal downloade og udpakke zip-filerne og så putte jar filerne i sin classpath. Er det hele den mappe som kommer frem når man udpakker zip-filerne som skal indsættes og når jeg bruger jbuuilder4 hvor finder jeg så min classpath eller skal den findes i j2sdk1.4.0_01 som jeg bruger?
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 17:12 #8
Hey undskyld arne det med \r\n virkede faktisk alligevel men det ville være fedt hvis du gad hjælpe med det sidste også
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 17:13 #9
Men jeg fatter nu stadig ikke at det har virket uden \r ....
Avatar billede arne_v Ekspert
27. februar 2005 - 17:15 #10
Der er måske opdateret mail server ?
Avatar billede arne_v Ekspert
27. februar 2005 - 17:16 #11
Når du udpakker de 2 zip filer får du 2 jar filer: mail.jar og activation.jar - de skal
tilføjes projektets classpath.
Avatar billede arne_v Ekspert
27. februar 2005 - 17:19 #12
JBuilder:

project
properties
required libraries
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 17:26 #13
skal jeg gå ind i selve projekt mappen eller C:\JBuilder4
Avatar billede arne_v Ekspert
27. februar 2005 - 18:12 #14
Det skal sættes inde i JBuilder

(bemærk at de punkter er baseret på JBuilder version 6-9 ikke 4)
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 20:27 #15
hmmm ... jeg har prøvet at lægge dem ind i C:\jBuilder4\lib  og det virker stadig ikke ... nogle forslag?
Avatar billede arne_v Ekspert
27. februar 2005 - 20:29 #16
Det er lige meget om de ligger i JBuilder mappen elelr udenfor.

Prøv og følg min vejledning 17:19:10 (inde i JBuilder)
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 20:52 #17
jamen de du nævner der har jeg ikke. inde i jBuilder4 mappen ligger fgl: bin, defaults, doc, jdk1.3, lib, redist, remote, samples, src, templates, tomcat og et par txt filer
Avatar billede arne_v Ekspert
27. februar 2005 - 20:53 #18
Der er links til hvor de kan hentes i artiklen
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 21:47 #19
jamen jeg har hentet de to jar filer er bare i tvvil om hvor jeg skal lægge dem, det jeg remsede op var de mapper jeg har i jBuilder4 mappen
Avatar billede arne_v Ekspert
27. februar 2005 - 21:48 #20
Det er ligegyldigt hvor de ligger.

Du skal bare inde i JBuilder tilføje dem til dit JBuilder projekt.
Avatar billede mikkel_sommer Nybegynder
27. februar 2005 - 21:56 #21
ja okay det er nu lykkedes ... men når jeg compiler siger den stadig at den ikke kan finde dem?
Avatar billede mikkel_sommer Nybegynder
28. februar 2005 - 21:19 #22
Nå men pyt med det det første virker. smid et svar så du kan få dine point arne
Avatar billede arne_v Ekspert
28. februar 2005 - 21:20 #23
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester