# JavaMail: Versenden von mails funktioniert nicht



## Louis2 (7. Jun 2005)

Hallo,

bin grade dabei mich mit JavaMail zu beschäftigen. Habe JavaMail&Framework runtergeladen und auch korrekt installiert, bzw. die Libraries (mail.jar, smtp.jar, pop3.jar, mailapi.jar und activation.jar) im CLASSPATH und auch als Archive Files unter NetBeans angegeben.

Wenn ich das msgsend.java Teil (mitgeliefert in JavaMail, zum Versenden) ausführe (unter MSDOS oder NetBeans) kommen erst die Meldungen:

To:
Subject:

Soweit i.O, aber nach dem Return nach Subject, kommt nichts mehr, sozusagen abgestürzt ist das Programm.
Eigentlich sollte mal die Meldung "Mail was sent successfully" erscheinen. Weiss jemand woran es liegt, bzw. hatte jemand schonmal das Problem?

Gruss[/img]


----------



## Bleiglanz (7. Jun 2005)

sollst du da nicht vielleicht den Text der Nachricht eingeben?


----------



## Louis2 (7. Jun 2005)

Nein, da passiert nichts, man kann 100mal was eingeben oder 100mal return drücken, nichts  :?


----------



## Bleiglanz (7. Jun 2005)

dann schau halt mal in die msgsend.java rein, was man machen soll nachdem man das subject eingegeben hat? CTRL-D oder was?


----------



## Louis2 (7. Jun 2005)

So sieht der Code aus:


```
public class msgsend {

    public static void main(String[] argv) {
	String  to, subject = null, from = null, 
		cc = null, bcc = null, url = null;
	String mailhost = null;
	String mailer = "msgsend";
	String protocol = null, host = null, user = null, password = null;
	String record = null;	// name of folder in which to record mail
	boolean debug = false;
	BufferedReader in =
			new BufferedReader(new InputStreamReader(System.in));
	int optind;

	for (optind = 0; optind < argv.length; optind++) {
	    if (argv[optind].equals("-T")) {
		protocol = argv[++optind];
	    } else if (argv[optind].equals("-H")) {
		host = argv[++optind];
	    } else if (argv[optind].equals("-U")) {
		user = argv[++optind];
	    } else if (argv[optind].equals("-P")) {
		password = argv[++optind];
	    } else if (argv[optind].equals("-M")) {
		mailhost = argv[++optind];
	    } else if (argv[optind].equals("-f")) {
		record = argv[++optind];
	    } else if (argv[optind].equals("-s")) {
		subject = argv[++optind];
	    } else if (argv[optind].equals("-o")) { // originator
		from = argv[++optind];
	    } else if (argv[optind].equals("-c")) {
		cc = argv[++optind];
	    } else if (argv[optind].equals("-b")) {
		bcc = argv[++optind];
	    } else if (argv[optind].equals("-L")) {
		url = argv[++optind];
	    } else if (argv[optind].equals("-d")) {
		debug = true;
	    } else if (argv[optind].equals("--")) {
		optind++;
		break;
	    } else if (argv[optind].startsWith("-")) {
		System.out.println(
"Usage: msgsend [[-L store-url] | [-T prot] [-H host] [-U user] [-P passwd]]");
		System.out.println(
"\t[-s subject] [-o from-address] [-c cc-addresses] [-b bcc-addresses]");
		System.out.println(
"\t[-f record-mailbox] [-M transport-host] [-d] [address]");
		System.exit(1);
	    } else {
		break;
	    }
	}

	[b]try {
	    if (optind < argv.length) {
		// XXX - concatenate all remaining arguments
		to = argv[optind];
		System.out.println("To: " + to);
	    } else {
		System.out.print("To: ");
		System.out.flush();
		to = in.readLine();
	    }
	    if (subject == null) {
		System.out.print("Subject: ");
		System.out.flush();
		subject = in.readLine();
	    } else {
		System.out.println("Subject: " + subject);
	    }

	    Properties props = System.getProperties();
	    // XXX - could use Session.getTransport() and Transport.connect()
	    // XXX - assume we're using SMTP
	    if (mailhost != null)
		props.put("mail.smtp.host", mailhost);

	    // Get a Session object
	    Session session = Session.getInstance(props, null);
	    if (debug)
		session.setDebug(true);

	    // construct the message
	    Message msg = new MimeMessage(session);
	    if (from != null)
		msg.setFrom(new InternetAddress(from));[/b]	    
                    else
		msg.setFrom();

	    msg.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(to, false));
	    if (cc != null)
		msg.setRecipients(Message.RecipientType.CC,
					InternetAddress.parse(cc, false));
	    if (bcc != null)
		msg.setRecipients(Message.RecipientType.BCC,
					InternetAddress.parse(bcc, false));

	    msg.setSubject(subject);

	    collect(in, msg);

	    msg.setHeader("X-Mailer", mailer);
	    msg.setSentDate(new Date());

	    // send the thing off
	    Transport.send(msg);

	    System.out.println("\nMail was sent successfully.");

	    // Keep a copy, if requested.

	    if (record != null) {
		// Get a Store object
		Store store = null;
		if (url != null) {
		    URLName urln = new URLName(url);
		    store = session.getStore(urln);
		    store.connect();
		} else {
		    if (protocol != null)		
			store = session.getStore(protocol);
		    else
			store = session.getStore();

		    // Connect
		    if (host != null || user != null || password != null)
			store.connect(host, user, password);
		    else
			store.connect();
		}

		// Get record Folder.  Create if it does not exist.
		Folder folder = store.getFolder(record);
		if (folder == null) {
		    System.err.println("Can't get record folder.");
		    System.exit(1);
		}
		if (!folder.exists())
		    folder.create(Folder.HOLDS_MESSAGES);

		Message[] msgs = new Message[1];
		msgs[0] = msg;
		folder.appendMessages(msgs);

		System.out.println("Mail was recorded successfully.");
	    }

	} catch (Exception e) {
	    e.printStackTrace();
	}
    }

    public static void collect(BufferedReader in, Message msg)
					throws MessagingException, IOException {
	String line;
	StringBuffer sb = new StringBuffer();
	while ((line = in.readLine()) != null) {
	    sb.append(line);
	    sb.append("\n");
	}

	// If the desired charset is known, you can use
	// setText(text, charset)
	msg.setText(sb.toString());
    }
}
```


----------



## Louis2 (7. Jun 2005)

Ah ok, ich habs STRG+Z (nur unter MSDOS), wieso auch immer...
Aber dann kommt die Meldung: 

javax.mail.MessagingException: Could not connect to SMTP host: mail.gmx.net, por
t: 25;
  nested exception is:
        java.net.ConnectException: Connection refused: connect
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1213)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:31
1)
        at javax.mail.Service.connect(Service.java:233)
        at javax.mail.Service.connect(Service.java:134)
        at javax.mail.Service.connect(Service.java:86)
        at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:144)
        at javax.mail.Transport.send0(Transport.java:150)
        at javax.mail.Transport.send(Transport.java:80)
        at msgsend.main(msgsend.java:165)


----------



## Bleiglanz (7. Jun 2005)

benutzername? passwort? interne firewall für ausgehende verbindungen?

host mail.gmx.net auf port 25 dürfte stimmen?


----------



## WPNCC1701D (26. Aug 2005)

Hallo, 

ich habe jetzt eine ganze weile gesucht, und musste feststellen das mein 
Virenscanner (McAfee) den Port 25 gesperrt hat. 

Vielleicht ist es ja bei dir auch so. 

Gruß 
Wolfgang


----------

