# Java Mail  problem



## elle23 (13. Jul 2007)

hallo,
ich habe nen problem mit java mail, habe den code im netz gefunden. soweit ich weiss passt das auch alles.
aber ers funktioniert nicht. ich bekomme keine fehlermeldung gar nichts, beim verschicken sollte eigentlich alles klappen. nur es kommt keinee mail an !?!?
 hier der code:


```
package model;

	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;
	 
	/**
	 * @author zeja
	 */
	public class Mail {
	    
	    public void sendMail(String smtpHost,String username,String password,String senderAddress,String recipientsAddress,String subject,String text ){
	        MailAuthenticator auth = new MailAuthenticator(username, password);
	 
	        Properties properties = new Properties();
	      //  properties.setProperty( "mail.smtp.port", "587");
	 
	        // Den Properties wird die ServerAdresse hinzugefügt
	        properties.put("mail.smtp.host", smtpHost);
	       
	 
	        // !!Wichtig!! Falls der SMTP-Server eine Authentifizierung
	        // verlangt
	        // muss an dieser Stelle die Property auf "true" gesetzt
	        // werden
	        properties.put("mail.smtp.auth", "true");
	 
	        // Hier wird mit den Properties und dem implements Contructor
	        // erzeugten
	        // MailAuthenticator eine Session erzeugt
	        Session session = Session.getDefaultInstance(properties, auth);
	 
	        try {
	            // Eine neue Message erzeugen
	            Message msg = new MimeMessage(session);
	 
	            // Hier werden die Absender- und Empfängeradressen gesetzt
	            msg.setFrom(new InternetAddress(senderAddress));
	            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
	                    recipientsAddress, false));
	 
	            // Der Betreff und Body der Message werden gesetzt
	            msg.setSubject(subject);
	            msg.setText(text);
	 
	            // 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( );

	        }
	    }
	    
	    class MailAuthenticator extends Authenticator {
	 
	        /**
	         * Ein String, der den Usernamen nach der Erzeugung eines
	         * Objektes

	         * dieser Klasse enthalten wird.
	         */
	        private final String user;
	 
	        /**
	         * Ein String, der das Passwort nach der Erzeugung eines
	         * Objektes

	         * dieser Klasse enthalten wird.
	         */
        private final String password;
	 
	        /**
	         * Der Konstruktor erzeugt ein MailAuthenticator Objekt

	         * 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;
	        }
	 
	        /**
	         * Diese Methode gibt ein neues PasswortAuthentication
	         * Objekt zurueck.
	         * 
	         * @see javax.mail.Authenticator#getPasswordAuthentication()
	         */
	        protected PasswordAuthentication getPasswordAuthentication() {
	            return new PasswordAuthentication(this.user, this.password);
	        }
	    }
	    
	    public static void main(String[] args) {
	 
	        String username = "user";
	        String password = "passwd";
	        String senderAddress ="someone@web.de";
	        String recipientsAddress = "somereceiver@web.de"; 
	        String subject = "Test---f----syslog---test";
	        String text = "syslogtexttestbla";
	        String smtpHost = "mail.gmx.net";
	        
	        new Mail().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
	    }
	}
```

hoffe ihr könnt mir helfen.

viele dank
gruß
elle


----------



## madboy (13. Jul 2007)

```
String senderAddress ="someone@web.de"; 
...
String smtpHost = "mail.gmx.net";
```
Bist du dir sicher, dass das so klappen kann?
Wie das aussieht, versuchst du eine andere ("falsche") Sender-Adresse zu verwenden

Vermutung:
Entweder der GMX-Server unterbindet das (Spam)
oder der empfangende Server löscht es, weil er denkt, die Mail sei Spam.


----------



## Zed (13. Jul 2007)

Die großen E-Mail Provider. Akzeptieren keine Mails von Dynamischen IPs. 

Wenn du selber E-Mails an die großen schicken willst. Brauchst du eine Standleitung mit fester IP oder einen SMTP Relay


----------



## DP (16. Jul 2007)

Zed hat gesagt.:
			
		

> Die großen E-Mail Provider. Akzeptieren keine Mails von Dynamischen IPs.
> 
> Wenn du selber E-Mails an die großen schicken willst. Brauchst du eine Standleitung mit fester IP oder einen SMTP Relay



klar kannst du per smtp und dynamischer ip mails verschicken. sonst würde auch kein outlook funktionieren.

@elle:

du machst gar kein transport.connect(host, user, pw)?!


----------



## Zed (16. Jul 2007)

Ja verschicken geht. Aber die werden wenn sie bei z.B. Web.de aufschlagen gedropt und du bekommst einen Fehlerbericht zugeschickt. Selbst getestet mit einem Sendmail zuhause. 

Outlook verschickt keine E-Mails! Verschicken tut sendmail/postfix etc. 

Outlook leitet nur die E-Mails an den E-Mailserver weiter und gibt den Befehl zum versenden.


----------



## robertpic71 (16. Jul 2007)

Zed hat gesagt.:
			
		

> Wenn du selber E-Mails an die großen schicken willst. Brauchst du eine Standleitung mit fester IP oder einen SMTP Relay



Das stimmt so, aber die Ausage:



			
				Zed hat gesagt.:
			
		

> Die großen E-Mail Provider. Akzeptieren keine Mails von Dynamischen IPs.



sollte wohl eher: "Die großen e-Mail-Provider aktzeptieren keine Mails *von SMTP-Servern mit dynamischen IPs'*"

Ich weiß zwar nicht ob das wirklich alle machen, aber es ist auf jeden Fall ein verbreitetes Mittel für die Spambekämpfung.

Das ist aber nicht das Problem von ell23. Er spielt ja nicht selber SMTP-Server, sondern sendet die e-Mail zum SMTP-Server _mail.gmx.net_, welche sicher eine fixe IP Adresse hat.

Das wahrscheinliche Problem hat schon madboy beschrieben: GMX wird keine web.de-Absenderadresse akzeptieren. Diese Einschränkung ist ein *Muss*, wenn man einen Mailserver betreibt (bzw. alternative Einschränkungen).

/Robert


----------

