Hallo,
ich muss morgen ein Programm fertig haben, wobei ich nicht weiterkomme. ICh habe ein Mailprogramm geschrieben und eine gui dazu. Leider bin ich nicht sehr gut in der Programmierung und benötige daher Hilfe.
1) Die GUI funktioniert nicht richtig - implementierung vom senden bzw. empfangen von mails klappt nicht
2) Adressen von Absendern abspeichern können, bzw. verwenden können - kann mir jemand helfen?
ICh würde mich freuen, wenn ihr einem hilfslosen Programmierer helfen könntet - ich komme hier einfach nicht weiter.
Vielen lieben Dank für die Hilfe!
ich muss morgen ein Programm fertig haben, wobei ich nicht weiterkomme. ICh habe ein Mailprogramm geschrieben und eine gui dazu. Leider bin ich nicht sehr gut in der Programmierung und benötige daher Hilfe.
1) Die GUI funktioniert nicht richtig - implementierung vom senden bzw. empfangen von mails klappt nicht
2) Adressen von Absendern abspeichern können, bzw. verwenden können - kann mir jemand helfen?
ICh würde mich freuen, wenn ihr einem hilfslosen Programmierer helfen könntet - ich komme hier einfach nicht weiter.
Code:
import java.net.*;
import java.io.*;
import java.util.Date;
import java.util.*;
import java.text.*;
public class MailSenden
{
private DataOutputStream zOutput = null;
private BufferedReader zInput = null;
private String zText = "";
int lPort = 110;//Standard-Port fuer die POP3-Kommunikation
String lHost = "pop.gmx.de";//Mailserver-Name
String lUser = "infolk@gmx.de"; // aW5mb2xrQGdteC5kZQ==
String lPass = "hammersen";//persoenliches Kennwort beim Provider // aGFtbWVyc2Vu
private final void writeRead( boolean pAnwort,String pAnfangNachricht,String pText ) // private Status!
throws IOException, Exception
{
if( null != pText && 0 < pText.length() )
{
zText += ("> " + pText);
zOutput.writeBytes( pText );
}
if( pAnwort )
{
String read = zInput.readLine() + "\n";
zText += ("<" + read);
if( null != pAnfangNachricht && 0 < pAnfangNachricht.length() && !read.startsWith( pAnfangNachricht ) )
throw new Exception( zText );
}
}
//
/// Public Methode und darf nur von einem Thread zur Zeit ausgeführt werden kann
public synchronized final String sendEmail(String sSmtpServer,
String sFromAdr, String sFromRealName,
String sToAdr, String sToRealName,
String sSubject, String sText )
throws IOException, Exception
{
zText = "";
if( null == sSmtpServer || 0 >= sSmtpServer.length() ||
null == sFromAdr || 0 >= sFromAdr.length() ||
null == sToAdr || 0 >= sToAdr.length() ||
( (null == sSubject || 0 >= sSubject.length())
&& (null == sText || 0 >= sText.length()) ) )
throw new Exception( "Invalid Parameters" );
if( null == sFromRealName || 0 >= sFromRealName.length() ) sFromRealName = sFromAdr;
if( null == sToRealName || 0 >= sToRealName.length() ) sToRealName = sToAdr;
Socket lSocket = new Socket( sSmtpServer, 25 );
zOutput = new DataOutputStream( lSocket.getOutputStream() );
zInput = new BufferedReader(new InputStreamReader( lSocket.getInputStream() ) );
lSocket.setSoTimeout( 10000 );
// DATUM
Date dt = new Date();
// Festlegung des Formats:
SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd" );
df.setTimeZone( TimeZone.getDefault() ); // nicht mehr unbedingt notwendig seit JDK 1.2
// Formatierung zu String:
System.out.println( "Date = " + df.format( dt ) ); // z.B. '2001-01-26 19:03:56.731'
// // Ausgabe für andere Zeitzone:
// df.setTimeZone( TimeZone.getTimeZone( "Africa/Casablanca" ) );
// System.out.println( "Casablanca = " + df.format( dt ) ); // z.B. '2001-01-26 18:03:56.731'
// // Einlesen vom String:
// dt = df.parse( "2001-02-03 04:05:06.7" );
// System.out.println( "parse = " + df.format( dt ) ); // z.B. '2001-02-03 04:05:06.7'
writeRead( true, "220", null);
writeRead( true, "250", "HELO " + sSmtpServer + "\n" );
writeRead( true, "250", "RSET\n" );
// Authorisierung,
writeRead( true, "334", "AUTH LOGIN\n" );
writeRead( true, "334", "aW5mb2xrQGdteC5kZQ==\n" ); //-- base-64-encoding fuer [email]infolk@gmx.de[/email]
writeRead( true, "235", "aGFtbWVyc2Vu\n" ); //-- base-64-encoding fuer aGFtbWVyc2Vu
writeRead( true, "250", "MAIL FROM:<" + sFromAdr + ">\n" );
writeRead( true, "250", "RCPT TO:<" + sToAdr + ">\n" );
writeRead( true, "354", "DATA\n" );
writeRead( false, null, "To: " + sToRealName + " <" + sToAdr + ">\n" );
writeRead( false, null, "From: " + sFromRealName + " <" + sFromAdr + ">\n" );
writeRead( false, null, "Subject: " + sSubject + "\n" );
// writeRead( false, null, "Date: " + lDate + "\n" );
writeRead( false, null, "Mime-Version: 1.0\n" );
writeRead( false, null, "Content-Type: text/plain; charset=\"iso-8859-1\"\n" );
writeRead( false, null, "Content-Transfer-Encoding: quoted-printable\n\n" );
writeRead( false, null, sText + "\n" );
// .\n schließt authorierung.. ab
writeRead( true, "250", ".\n" );
writeRead( true, "221", "QUIT\n" );
zInput.close();
zOutput.close();
lSocket.close();
zInput = null;
zOutput = null;
return zText;
}
// HINWEIS für mich selbst! -----------------------------------------------------------------
//throws IOException, Exception ist nicht besonders sinnvoll, throws Exception hätte auch gereicht,
//da IOExcepion von Exception abgeleitet ist.
//Wenn man an einer Methode so einen "throws-clause" angbibt, dann muss man die entsprechenden Exceptions
//in der Methode nicht selbst abfangen; dafür muss das da passieren, wo diese Methode aufgerufen wird.
public static void main( String[] args )
{
System.out.println("\nSmtpSimple.java. Send simple email.\nUsage:\n" +
" java SmtpSimple SmtpServer FromAdr FromRealName ToAdr ToRealName Subject Text\n" +
"Example:\n" +
" java SmtpSimple mail.gmx.net [email]Torsten.Horn@gmx.de[/email] \"Torsten Horn\" x@y.z xyz S T\n" );
if( null == args || 6 > args.length )
{
System.out.println( "Error: parameters missing!" );
System.exit( 1 );
}
try
{
MailSenden smtp = new MailSenden();
System.out.println( smtp.sendEmail( args[0], args[1], args[2], args[3], args[4], args[5],
( 6 < args.length ) ? args[6] : null ) );
}
catch( Exception ex )
{
System.out.println( "\n***\nError:\n" + ex + "\n***\n");
System.exit( 2 );
}
System.exit( 0 );
}
}
Code:
import java.net.*;
import java.io.*;
public class Pop3Client//holt Mails vom Mail-Server ab
{
public String holeMails()
{
int lPort = 110;//Standard-Port fuer die POP3-Kommunikation
String lHost = "pop.gmx.de";//Mailserver-Name
String lUser = "infolk@gmx.de";
String lPass = "hammersen";//persoenliches Kennwort beim Provider
String lAntwortzeile;
String Mail="";
try
{
Socket lMailSocket = new Socket(lHost, lPort);
DataOutputStream lOutput = new DataOutputStream(lMailSocket.getOutputStream());
BufferedReader lInput = new BufferedReader(new InputStreamReader(lMailSocket.getInputStream()));
lOutput.writeBytes("user " + lUser + "\n");
lOutput.writeBytes("pass " + lPass + "\n");
lOutput.writeBytes("stat\n");//liefert die Mailanzahl
for(int i=1;i<=3;i++)
{String zahl =("" + i);
lOutput.writeBytes("retr"+2+"\n"); //die Zahl nach retr gibt die Nummer der gewünschten Mail an
//lOutput.writeBytes("retr 2\n");//auch mehrere Aufrufe hintereinander moeglich
//lOutput.writeBytes("list\n");//gibt eine Mailliste zurueck, es kann auch eine Zahl angegeben werden, wenn lediglich die Info zur n-ten Mail von Interesse ist
//lOutput.writeBytes("dele x\n");//loescht die x-te Mail im Postfach
}
lOutput.writeBytes( "QUIT\n" );//beendet die Verbindung zum Mailserver
while ((lAntwortzeile = lInput.readLine()) != null)//Server-Antworten zeilenweise lesen ...
{
Mail=(Mail + lAntwortzeile + "\n");
}
lOutput.close();
lMailSocket.close();
}
catch( Exception e ) { System.err.println( e ); }
return Mail;
}
}
Code:
import java.io.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.ListModel;
import javax.swing.border.BevelBorder;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Mailer {
private MailSenden smtp;
private Pop3Client pop3;
class Mail {
private String from;
private String to;
private String subject;
private String text;
public Mail( String from, String to, String subject, String text) {
this.from = from;
this.to = to;
this.subject = subject;
this.text = text;
}
}
class MainWnd extends JFrame implements ActionListener, ListSelectionListener {
Mailer mailer;
JButton btnSend;
JButton btnReceive;
JList lstIn;
JList lstOut;
JLabel laStatus;
JLabel laFrom;
JLabel laTo;
JLabel laSubj;
JTextArea laText;
public MainWnd( Mailer mailer) {
super( "Mailer");
this.mailer = mailer;
JPanel p0 = new JPanel();
p0.setLayout( new BorderLayout());
JPanel p1 = new JPanel();
p1.setLayout( new GridLayout( 1, 2));
JPanel p2 = new JPanel();
p2.setLayout( new BorderLayout());
JPanel p21 = new JPanel();
p21.setBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED));
p21.setLayout( new GridLayout( 2, 1));
JPanel p211 = new JPanel();
p211.setLayout( new BorderLayout());
lstIn = new JList( createListModel( inbox));
lstIn.setBorder( BorderFactory.createBevelBorder( BevelBorder.LOWERED));
lstIn.addListSelectionListener( this);
p211.add( new JLabel( "Inbox"), BorderLayout.NORTH);
p211.add( lstIn, BorderLayout.CENTER);
p21.add( p211);
JPanel p221 = new JPanel();
p221.setLayout( new BorderLayout());
lstOut = new JList( createListModel( outbox));
lstOut.setBorder( BorderFactory.createBevelBorder( BevelBorder.LOWERED));
lstOut.addListSelectionListener( this);
p221.add( new JLabel( "Outbox"), BorderLayout.NORTH);
p221.add( lstOut);
p21.add( p221);
p2.add( p21, BorderLayout.CENTER);
JPanel p22 = new JPanel();
p22.setLayout( new FlowLayout());
btnSend = new JButton( "Send Mail");
btnSend.addActionListener( this);
p22.add( btnSend);
btnReceive = new JButton( "Receive Mails");
btnReceive.addActionListener( this);
p22.add( btnReceive);
p2.add( p22, BorderLayout.SOUTH);
p1.add( p2);
JPanel p3 = new JPanel();
p3.setBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED));
p3.setLayout(new BorderLayout());
JPanel p31 = new JPanel();
p31.setLayout( new BorderLayout());
JPanel p311 = new JPanel();
p311.setLayout( new GridLayout( 3, 1));
p311.add( new JLabel( "From:"));
p311.add( new JLabel( "To:"));
p311.add( new JLabel( "Subj:"));
p31.add( p311, BorderLayout.NORTH);
p31.add( new JLabel( "Text"), BorderLayout.CENTER);
JPanel p32 = new JPanel();
p32.setLayout( new BorderLayout());
JPanel p321 = new JPanel();
p321.setLayout(new GridLayout( 3, 1));
laFrom = new JLabel( "<From>");
p321.add( laFrom);
laTo = new JLabel( "<To");
p321.add( laTo);
laSubj = new JLabel( "<Subj>");
p321.add( laSubj);
p32.add( p321, BorderLayout.NORTH);
laText = new JTextArea( "<Text>");
laText.setEditable( false);
laText.setBackground( getBackground());
laText.setLineWrap( true);
laText.setWrapStyleWord( true);
p32.add( laText, BorderLayout.CENTER);
p3.add( p31, BorderLayout.WEST);
p3.add( p32, BorderLayout.CENTER);
p1.add( p3);
p0.add( p1, BorderLayout.CENTER);
laStatus = new JLabel( "<status>");
laStatus.setBorder( BorderFactory.createBevelBorder( BevelBorder.RAISED));
p0.add( laStatus, BorderLayout.SOUTH);
add( p0);
setSize( 600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void valueChanged( ListSelectionEvent e) {
if ( e.getSource() == lstIn) {
int idx = lstIn.getSelectedIndex();
if ( idx >= 0) {
select( inbox.get( idx));
lstOut.clearSelection();
}
} else if ( e.getSource() == lstOut) {
int idx = lstOut.getSelectedIndex();
if ( idx >= 0) {
select( outbox.get( idx));
lstIn.clearSelection();
}
}
}
private void select( Mail m) {
laFrom.setText( m.from);
laTo.setText( m.to);
laSubj.setText( m.subject);
laText.setText( m.text);
}
public void setStatus( String txt) {
laStatus.setText( txt);
}
public void actionPerformed( ActionEvent e) {
if ( e.getSource() == btnSend) {
String from = "infolk@web.de";
String to = JOptionPane.showInputDialog( this, "To:", "Empfänger-Adresse", 3);
if ( to == null) return; //--- abbruch
String subject = JOptionPane.showInputDialog( this, "Subject:", "Betreff eingeben", 3);
if ( subject == null) return; //--- abbruch
String text = JOptionPane.showInputDialog( this, "Text:", "Geben Sie Ihren Text ein", 3);
if ( text == null) return; //--- abbruch
Mail m = new Mail( from, to, subject, text);
smtp = new MailSenden();
try {
smtp.sendEmail("mail.gmx.de", m.from, "Sebastian Hanusch",m.to,"Herr Mustermann",m.subject, m.text);
} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e2) {
e2.printStackTrace();}
addOut( m);
} else if ( e.getSource() == btnReceive) {
List<Mail> newMails = null;
pop3 = new Pop3Client();
String Mails = pop3.holeMails();
while (Mails != null)
{
}
//nochn testdummy - klappt also noch nicht gaaanz!
newMails = new ArrayList();
newMails.add( new Mail( "Abesender@mail.com", "Sebastian Hanusch", "Text", "Teeeext"));
for ( int i=0; i<newMails.size(); i++) {
addIn( newMails.get( i));
}
}
}
public void addIn( Mail m) {
inbox.add( m);
lstIn.setModel( createListModel( inbox));
lstIn.setSelectedIndex( inbox.size()-1);
}
public void addOut( Mail m) {
outbox.add( m);
lstOut.setModel( createListModel( outbox));
lstOut.setSelectedIndex( outbox.size()-1);
}
}
private MainWnd mainWnd;
private List<Mail> inbox = new ArrayList<Mail>();
private List<Mail> outbox = new ArrayList<Mail>();
public Mailer() {
mainWnd = new MainWnd( this);
//--- dummies Hier wird dann alles der GUI hinzugefügt!
inbox.add( new Mail( "sender1@somewhere.de", "me@somewhere.de", "xyz", "Das ist das Haus vom Nikolaus"));
inbox.add( new Mail( "sender2@somewhere.de", "me@somewhere.de", "abc", "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores"));
inbox.add( new Mail( "sender3@somewhere.de", "me@somewhere.de", "RE: abc", "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi."));
inbox.add( new Mail( "sender4@somewhere.de", "me@somewhere.de", "AW: RE: abc", "Das ist das Haus vom Nikolaus"));
outbox.add( new Mail( "me@somewhere.de", "receiver1@somewhere.de", "Oxyz", "Das ist das Haus vom Nikolaus"));
outbox.add( new Mail( "me@somewhere.de", "receiver2@somewhere.de", "abc", "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores"));
outbox.add( new Mail( "me@somewhere.de", "receiver3@somewhere.de", "RE: abc", "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi."));
outbox.add( new Mail( "me@somewhere.de", "receiver4@somewhere.de", "AW: RE: abc", "Das ist das Haus vom Nikolaus"));
mainWnd.setStatus( "");
}
public static void main(String[] args) {
new Mailer();
}
private static ListModel createListModel( final List<Mail> lst) {
return new ListModel() {
public int getSize() {
return lst.size();
}
public Object getElementAt(int index) {
if (index < 0) return null;
return ((Mail)(lst.get( index))).subject;
}
public void addListDataListener(ListDataListener l) {
}
public void removeListDataListener(ListDataListener l) {
}
};
}
}
Vielen lieben Dank für die Hilfe!