# Cannot find symbol: receive(), send()



## donnar (8. Nov 2008)

Hallo ihr lieben,

zur Zeit versuche ich eine einfache Methode zum versenden von Emails zu erstellen:

```
import java.net.*;
...
private void sendMail(String from,  String messageText) throws UnknownHostException, IOException{
     String to = "test@email.de";
     String subject = "Nachricht vom Website";
     StringBuffer sb = new StringBuffer();
     try{
         Socket s = new Socket("smtp.server",25);
         String hostName = InetAddress.getLocalHost().getHostName();

         //Fehlermeldungen beginnen hier
         receive();
         send("Hallo " + hostName);
         receive();
         send("MAIL FROM: <" + from + ">");
         receive();
         send("RCPT TO: <" + to + ">");
         receive();
         send("DATA");
         receive();
         send(messageText);
         send(".");
         reveice();
         s.close();
         //Fehlermeldungen enden hier

     }catch(IOException e){
         sb.append("Fehler: " + e);
     } 
 }
...
```

Das Problem hierbei ist, dass meine IDE (NetBeans IDE 6) Fehler in den Zeilen anzeigt, die jeweils mit receive oder send beginnen. Die Fehlermeldung ist: "Cannot find symbol". 

Hab ich vergessen etwas zu importieren? Wo liegt der Fehler?


----------



## Gelöschtes Mitglied 5909 (8. Nov 2008)

du hast anscheinend keine methoden receive() und send() in deiner klasse


----------



## donnar (8. Nov 2008)

Hallo,

so wie ich das verstanden habe, sollte java.net.* die Methoden zur Verfügung stellen!?


----------



## Gelöschtes Mitglied 5909 (8. Nov 2008)

java.net.* ist ein "Paket von Klassen", da sind aber keine Methoden drinnen, sondern Klassen (+ interfaces + enums) die Methoden haben. 

http://java.sun.com/j2se/1.5.0/docs/api/java/net/package-frame.html

Du bentutzt zwar ein Socket, machst aber eigentlich nur ein s.close() damit. Und receive() / send() hat ein Socket auch nicht, das funktioniert anders - über Streams. 

http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html

Woher du die annahme machst das solche methoden funktionieren bzw vorhanden sind wundert mich...


----------



## donnar (8. Nov 2008)

Das Beispiel ist aus dem Buch "Core 2 Java Band 2 (Expertenwissen)". Ich hab angenommen, dass die Zeilen in Ordnung sind. Deinen Link prüfe ich sofort..


----------



## Gelöschtes Mitglied 5909 (8. Nov 2008)

dann poste mal den ganzen code, Möglich dass sie eigene Methoden dafür implementiert haben die das ganze kapseln.


----------



## donnar (8. Nov 2008)

Der Rest hat, soweit ich das verstanden habe, mehr mit swing zu tun. Der für mich wichtige Teil steht in der Methode sendMail.

```
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;
import java.io.*;
import javax.swing.*;

/**
   Dieses Programm zeigt, wie man Sockets verwendet, um reine
   Textnachrichten als Mail zu senden.
*/
public class MailTest
{
   public static void main(String[] args)
   {
      JFrame frame = new MailTestFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

/**
   Der Frame für die Mail-Benutzeroberfläche.
*/
class MailTestFrame extends JFrame
{
   public MailTestFrame()
   {
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      setTitle("MailTest");

      setLayout(new GridBagLayout());

      // verwendet die Komfortklasse GBC aus CoreJava Band 1 Kapitel 9
      add(new JLabel("Von:"), new GBC(0, 0).setFill(GBC.HORIZONTAL));

      from = new JTextField(20);
      add(from, new GBC(1, 0).setFill(GBC.HORIZONTAL).setWeight(100, 0));

      add(new JLabel("An:"), new GBC(0, 1).setFill(GBC.HORIZONTAL));

      to = new JTextField(20);
      add(to, new GBC(1, 1).setFill(GBC.HORIZONTAL).setWeight(100, 0));

      add(new JLabel("SMTP-Server:"), new GBC(0, 2).setFill(GBC.HORIZONTAL));

      smtpServer = new JTextField(20);
      add(smtpServer, new GBC(1, 2).setFill(GBC.HORIZONTAL).setWeight(100, 0));

      message = new JTextArea();
      add(new JScrollPane(message), new GBC(0, 3, 2, 1).setFill(GBC.BOTH).setWeight(100, 100));

      comm = new JTextArea();
      add(new JScrollPane(comm), new GBC(0, 4, 2, 1).setFill(GBC.BOTH).setWeight(100, 100));

      JPanel buttonPanel = new JPanel();
      add(buttonPanel, new GBC(0, 5, 2, 1));

      JButton sendButton = new JButton("Senden");
      buttonPanel.add(sendButton);
      sendButton.addActionListener(new
         ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               new Thread(new
                  Runnable()
                  {
                     public void run()
                     {
                        comm.setText("");
                        sendMail();
                     }
                  }).start();
            }
         });
   }

   /**
      Sendet die in der Benutzeroberfläche erstellte Mail-Nachricht.
   */
   public void sendMail()
   {
      try
      {
         Socket s = new Socket(smtpServer.getText(), 25);

         InputStream inStream = s.getInputStream();
         OutputStream outStream = s.getOutputStream();

         in = new Scanner(inStream);
         out = new PrintWriter(outStream, true /* autoFlush */);

         String hostName = InetAddress.getLocalHost().getHostName();

         receive();
         send("HELO " + hostName);
         receive();
         send("MAIL FROM: <" + from.getText() + ">");
         receive();
         send("RCPT TO: <" + to.getText() + ">");
         receive();
         send("DATA");
         receive();
         send(message.getText());
         send(".");
         receive();
         s.close();
      }
      catch (IOException e)
      {
         comm.append("Fehler: " + e);
      }
   }

   /**
      Sendet einen String an den Socket und gibt ihn
      als Echo im Kommunikations-Textbereich aus.
      @param s der zu sendende String
   */
   public void send(String s) throws IOException
   {
      comm.append(s);
      comm.append("\n");
      out.print(s.replaceAll("\n", "\r\n"));
      out.print("\r\n");
      out.flush();
   }

   /**
      Empfängt einen String vom Socket und zeigt ihn
      im Kommunikations-Textbereich an.
   */
   public void receive() throws IOException
   {
      if (in.hasNextLine());
      {
         String line = in.nextLine();
         comm.append(line);
         comm.append("\n");
      }
   }

   private Scanner in;
   private PrintWriter out;
   private JTextField from;
   private JTextField to;
   private JTextField smtpServer;
   private JTextArea message;
   private JTextArea comm;

   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 300;
}
```


----------



## Gelöschtes Mitglied 5909 (8. Nov 2008)

jo das ist was anderes als das was du gepostet hattest und so funktioniert das auch. Da sind die 2 Methoden auch vorhanden und we wird gestreamt


----------



## donnar (8. Nov 2008)

Jetzt seh ich die auch  :roll:. Muss wohl Blind gewesen sein. Vielen Dank für den Hinweis


----------

