Email mit Javamail versenden

nanostruct

Grünschnabel
Hallo,

habe folgendes Problem beim versenden von E-Mails mit der Java API:
Alles funktioniert einwandfrei solange ich aus meier eclipse-Umgebung arbeite. Wenn ich die Anwendung zu einem .jar verpacke, dann sendet sie keine Mails mehr.

Weiß eine/er was los ist?

Zum versenden habe ich die Beispielsimplementierung von diesen Post benutzt.

cu nanostruct
 

insertcoin

Erfahrenes Mitglied
Ich hab das Programm von Zeja auch kopiert und versucht eine Testmail zu senden, aber bei mir kommt eine Exception.

Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
at SendEmailExample.sendMail(SendEmailExample.java:38)
at SendEmailExample.main(SendEmailExample.java:113)

macht für mich gerade nciht viel sinn, kann mir jemand weiterhelfen
 

insertcoin

Erfahrenes Mitglied
super, dank. jetzt versucht er zu senden. werde zwar noch abgewiesen, aber dass liegt daran dass ich es mit smtp.gmx.net versuche, ist also ein anderes problem.

könntest du mir noch erklären, wozu die jar file verwendet wird.

weil die mail.jar und die anderen jar files die zum mailen benötigt werden, hatte ich doch schon eingebunden.
 

zerix

Hausmeister
Moderator
Ich hab leider noch nichts mit EMail versenden gemacht. Von daher kann ich es dir nicht sagen. Ich könnte es nachlesen und dir dann erklären, aber nachlesen kannst du es auch. :)

MFG

zEriX
 

insertcoin

Erfahrenes Mitglied
ja, da hast du alleridngs recht :).

dann kannst du mir wahrscheinlich auch nicht bei meinem fehler helfen.

ich poste ihn trotzdem mal:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmx.net, port: 25;
nested exception is:
java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:297)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at SendEmailExample.sendMail(SendEmailExample.java:54)
at SendEmailExample.main(SendEmailExample.java:113)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 8 more

vielleich hat ja jemand mal das gleiche problem gehabt, weiß grad einfach nicht obs an nem parameter oder einer einstellung liegt.
 

zerix

Hausmeister
Moderator
Also die Fehlermeldung sagt aus, dass sich das Programm nicht mit der angegebenen Adresse verbinden kann. Also mögliche Gründe können sein, Firewall blockt das Programm, die Adresse gibts nicht. Mehr fällt mir gerade nicht ein.

MFG

zEriX
 

zácky

Grünschnabel
Guten Tag,
ich habe ein kleines Problem. Ich kann über mein Java-Programm E-Mails versenden, möchte aber, das ich gesendete E-Mails in einem gesonderten Ordner ablegen kann.

Hier nun der Quelltext vom bestehenden Programm. Über Ratschläge und oder Tipps würde ich mich sehr freuen.

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* Versenden einer einfachen Nachricht mit JavaMail
*/
public class Mail1 {
public static void main(String args[]) throws Exception {
System.out.println("[Senden]main()");
String setup[] = { "mail-Server", "From", "To" };
/*
* String host = args[0];String from = args[1]; String to = args[2];
*/
String host = setup[0]; //Mail-Server
String from = setup[1]; //From
String to = setup[2]; //To
// 1) System Properties lesen
Properties props = System.getProperties();
// 2) Definition des Mail Server
props.put("mail.smtp.host", host);
// 3) Kreieren einer Session
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
// 4) festlegen der Message
MimeMessage message = new MimeMessage(session);
// 4.a) from Adresse
message.setFrom(new InternetAddress(from));
// 4.b) to Adresse
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 4.c) Subject
message.setSubject("Sry");
// 4.d) Inhalt / Content
message.setText("Hallo ... wie geht es ... Ihnen.");
// 5) Senden der Message
Transport.send(message);
System.out.println("[Senden.main()]Ende");
}
}
 

loli89

Grünschnabel
Hey mit dem Code von zeja kann ich wunderbar Mails verschicken, leider nur mit Web.de.
Ich hab das ganze für GMX getestet, da läuft die Authorisierung aber jedesmal schief. Ich denke ich habe alles richtig eingegeben, wie gleich der Auszug zeigen wird.
Frage: Falls es mit Gmx echt nicht geht, weiß jemand, ob man die Pop vor Smtp authorisierung bei web.de ausschalten kann und wenn ja wie? ich möchte nämlich nicht immer erst manuell einloggen bevor ich etwas verschicken kann. Hier nochmal der Code um evtl die Lauffähigkeit mit GMX zu prüfen

import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;



/**
15.
* @author zeja
16.
*/

public class SendMailExample extends Thread
{

String zSMTPHost, zUser, zPW, zSenderAdress, zRecpAdress, zSubject, zText;
Session session;
Properties properties;
MailAuthenticator auth;

public SendMailExample()
{
zSMTPHost = "";
zUser = "";
zPW = "";
zSenderAdress = "";
zRecpAdress = "";
zSubject = "";
zText = "";

auth = new MailAuthenticator("", "");
properties = new Properties();
}

public void run()
{
try {

// Eine neue Message erzeugen

Message msg = new MimeMessage(session);



// Hier werden die Absender- und Empfängeradressen gesetzt
msg.setFrom(new InternetAddress(zSenderAdress));

msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(zRecpAdress, false));



// Der Betreff und Body der Message werden gesetzt

msg.setSubject(zSubject);

msg.setText(zText);



// Hier lassen sich HEADER-Informationen hinzufügen

msg.setHeader("Test", "Test");

msg.setSentDate(new Date( ));



// Zum Schluss wird die Mail natürlich noch verschickt

Transport.send(msg);



}

catch (Exception e) {

e.printStackTrace( );

}
}

public void daten(String pSMTPHost,String pUser,String pPW,String pSenderAdress,String pRecpAdress,String Subject,String pText)
{
zSMTPHost = pSMTPHost;
zUser=pUser;
zPW = pPW;
zSenderAdress = pSenderAdress;
zRecpAdress = pRecpAdress;
zText = pText;

// Den Properties wird die ServerAdresse hinzugefügt

properties.put("mail.smtp.host", zSMTPHost);


// !!Wichtig!! Falls der SMTP-Server eine Authentifizierung

// verlangt

// muss an dieser Stelle die Property auf "true" gesetzt

// werden

properties.put("mail.smtp.auth", "false");


// Hier wird mit den Properties und dem implements Contructor

// erzeugten

// MailAuthenticator eine Session erzeugt

session = Session.getDefaultInstance(properties, auth);
}
}
class MailAuthenticator extends Authenticator
{



/**

* Ein String, der den Usernamen nach der Erzeugung eines

* Objektes<br>

* dieser Klasse enthalten wird.

*/

private final String user;



/**

* Ein String, der das Passwort nach der Erzeugung eines

* Objektes<br>

* dieser Klasse enthalten wird.

*/

private final String password;



/**

* Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>

* aus den beiden Parametern user und passwort.

*

* @param user

* String, der Username fuer den Mailaccount.

* @param password

* String, das Passwort fuer den Mailaccount.

*/

public MailAuthenticator(String user, String password) {

this.user = user;

this.password = password;

}
// String user, String password


/**

* Diese Methode gibt ein neues PasswortAuthentication

* Objekt zurueck.

*

* @see javax.mail.Authenticator#getPasswordAuthentication()
99.
*/

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(this.user, this.password);

}

}


die methode zum senden steht in ner anderen Datei:

meinSendMail.daten("smtp.web.de","username(web.de)","userpw","sender(webde)","empfänger(web.de)","login",
meinSendMail.start();

Anmerkung: wenn ich bei der authorisierung auf "true" stelle, bekomme ich bei web.de eine fehlermeldung und ich muss auf "false" ausweichen, da habe ich aber dann leider pop vor smtp,was ich ja nicht möchte

ich hoffe ihr wisst wie man das Problem mit gmx oder web.de hinbekommen kann, mfg loli