E-Mail: Authenticator.getPasswordAuthentication() wird nicht gerufen

California

Aktives Mitglied
Hallo miteinander,

ich versuche gerade Mails zu versenden. Habe ich auch schon gemacht, aber bisher habe ich noch nie Authentication gebraucht.
Also: Habe alles so gelassen, wie es ohne Authentication lief, und habe nur im Aufruf von sendMail einen new MyAuthenticator mitgegeben.
Die Methode MyAuthenticator.getPasswordAuthentication wird nicht aufgerufen (habe einen Breakpoint drauf). Was mache ich falsch?

Java:
	public boolean sendMail( String mailServer, String subject, String body, String sender, List<String> recipients, Authenticator authenticator ) {

		try {
			if (0 == recipients.size()) {
				return false;
			}
			Properties properties = new Properties();
			properties.setProperty( "mail.host", mailServer );
			properties.setProperty( "mail.transport.protocol", "smtp" );

			Session mailSession = Session.getDefaultInstance( properties, authenticator );

			MimeMessage message = new MimeMessage( mailSession );
			message.setSubject( subject );
			message.setFrom( new InternetAddress( sender ) );
			for (String recipient : recipients) {
				message.addRecipient( Message.RecipientType.TO, new InternetAddress( recipient ) );
			}
			MimeMultipart multipart = new MimeMultipart( "related" );
			BodyPart messageBodyPart = new MimeBodyPart();
			messageBodyPart.setContent( body, "text/html" );
			multipart.addBodyPart( messageBodyPart );
			message.setContent( multipart );

			Transport.send( message );

		} catch (NoSuchProviderException e) {
			e.printStackTrace();
			return false;
		} catch (MessagingException e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

public class MyAuthenticator extends Authenticator {

// da stehen natürlich die richtigen Daten
	private static final String SENDER = "wüsstetIhrWohlGern";
	private static final String PASSWORD = "dito";

	@Override
	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication( SENDER, PASSWORD );
	}
}

sendMail( "smtp.1und1.de", "Test", "Test", "sender@xyz.de",(Liste die enthält) "empfaenger@xyz.de", new MyAuthenticator() );

ich vergaß:
bewirft mich bei Aufruf von Transport.send( message ) mit:
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 550 must be authenticated
 
Zuletzt bearbeitet:
@nillehammer: Danke, Habe vergessen mitzuteilen, dass es ein javax.mail.Authenticator ist, der hat keine setDefault() Methode.
Google hat geholfen- jGuru: Fundamentals of the JavaMail API
Ich verwende jetzt ein explizit erzeugtes Transport- Objekt (statt
Code:
Transport.send( message );
), mit dem ich mich anmelde:

Java:
Transport transport = session.getTransport( "smtp" );
transport.connect( host, username, password );
transport.sendMessage( message, message.getAllRecipients() );
transport.close();

So gehts. Den Mechanichtsnutz hinter dem javax.mail.Authenticator hab ich jetzt allerdings nicht verstanden.
 

Zurück
Oben