2017-11-24 2 views
0

Ich bekomme die 'com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.1 Client wurde nicht authentifiziert' Fehler immer, kann jemand Sag mir was mache ich falsch in meinem Code?com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.1 Client wurde nicht authentifiziert

Properties mailprops = new Properties(); 
mailprops.setProperty("mail.transport.protocol", "smtp"); 
mailprops.setProperty("mail.smtp.host", "MyHost"); 
mailprops.setProperty("mail.smtp.user", "UserName"); 
mailprops.setProperty("mail.smtp.password", "Password"); 

Session mailSession = Session.getDefaultInstance(mailprops, null); 
MimeMessage message = new MimeMessage(mailSession); 
message.setSubject(mySubject); 
message.addRecipient(To); 
message.addFrom(from address); 

try{ 
Transport.send(message); 
}catch (SendFailedException sfe) { 
}catch (MessagingException mex) { 
} 
+0

Nun, 'Client wurde nicht authentifiziert 'bedeutet, dass Ihr Benutzername und/oder Passwort falsch sind. Haben Sie verifiziert, dass sie korrekt sind? Können Sie sie verwenden, um Mail mit einem Mail-Client wie Thunderbird zu senden? Verbindest du dich mit dem richtigen Port, um E-Mails zu senden? –

+0

Meine Referenzen sind eigentlich korrekt. Ja, ich kann E-Mails mit jedem anderen Client senden. –

Antwort

0

versuchen, etwas wie folgt aus:

 Transport trans = sess.getTransport("smtp"); 
     try { 
      String host = sess.getProperty("mail.smtp.host"); 
      String port = sess.getProperty("mail.smtp.port"); 
      String user = sess.getProperty("mail.smtp.user"); 
      String password = sess.getProperty("mail.smtp.password"); 
      int prt = port == null ? -1 : Integer.parseInt(port); 
      trans.connect(host, prt, user, password); 
      trans.sendMessage(message, 
        message.getRecipients(Message.RecipientType.TO)); 
     } finally { 
      trans.close(); 
     } 

UPDATE:

Oder besser gesagt:

int prt = port == null ? 25 : Integer.parseInt(port); 
1

unter Ansatz versuchen, stellen das Authenticator Objekt das session Objekt erstellen

public class MailWithPasswordAuthentication { 
public static void main(String[] args) throws MessagingException { 
new MailWithPasswordAuthentication().run(); 
} 
private void run() throws MessagingException { 
Message message = new MimeMessage(getSession()); 
message.addRecipient(RecipientType.TO, new InternetAddress("[email protected]")); 
message.addFrom(new InternetAddress[] { new InternetAddress("[email protected]") }); 
message.setSubject("the subject"); 
message.setContent("the body", "text/plain"); 
Transport.send(message); 
} 
private Session getSession() { 
Authenticator authenticator = new Authenticator(); 
Properties properties = new Properties(); 
properties.setProperty("mail.smtp.submitter", authenticator.getPasswordAuthentication().getUserName()); 
properties.setProperty("mail.smtp.auth", "true"); 
properties.setProperty("mail.smtp.host", "mail.example.com"); 
properties.setProperty("mail.smtp.port", "25"); 
return Session.getInstance(properties, authenticator); 
} 
private class Authenticator extends javax.mail.Authenticator { 
private PasswordAuthentication authentication; 
public Authenticator() { 
String username = "auth-user"; 
String password = "auth-password"; 
authentication = new PasswordAuthentication(username, password); 
} 
protected PasswordAuthentication getPasswordAuthentication() { 
return authentication; 
} 
} 
} 
0
  1. Authentifizierung aktivieren.
  2. aktivieren Sie STARTTLS.
  3. Create Authenticator-Objekt in Session.getInstance Argument übergeben werden.

Beispielcode:

props.put ("mail.smtp.auth", "true"); props.put ("mail.smtp.startltls.enable", "true");

 Authenticator auth = new Authenticator() { 
      //override the getPasswordAuthentication method 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(fromEmail, password); 
      } 
     }; 
     Session session = Session.getInstance(props, auth); 
0

Sie don't need an Authenticator wie einige Antworten vorschlagen. Es gibt keine mail.smtp.password Eigenschaft. Rufen Sie die Transport.send method that takes a username and password.

+0

Ja, aber meine Session.getDefaultInstance (mailprops, null) richtet die Eigenschaften, die ich übergebe, nicht ein. Es nimmt immer Standardwerte an. Warum? –

+0

Es ist ein [häufiger Fehler] (https://javaee.github.io/javamail/FAQ#commonmistakes). –

+0

Fehler von mir, oder? –

Verwandte Themen