I am having problems sending SMTP messages from James3.0 using a simple java
application using javamail.

Here is the example I am using

public class MailClient

  extends Authenticator{

  public static final int SHOW_MESSAGES = 1;

  public static final int CLEAR_MESSAGES = 2;

  public static final int SHOW_AND_CLEAR =

    SHOW_MESSAGES + CLEAR_MESSAGES;

  protected String from;

  protected Session session;

  protected PasswordAuthentication authentication;


public MailClient(String user, String pass, String host)  {

    this(user, pass, host, false);

  }

  public MailClient(String user, String pass, String host, boolean debug){

    from = user + '@' + host;

    authentication = new PasswordAuthentication(user, pass);

    Properties props = new Properties();

    props.put("mail.user", user);

    props.put("mail.host", host);

    props.put("mail.debug", debug ? "true" : "false");

    props.put("mail.store.protocol", "pop3");

    props.put("mail.transport.protocol", "smtp");

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

    session = Session.getInstance(props, this);

  }



  public PasswordAuthentication getPasswordAuthentication(){

    return authentication;

  }



  public void sendMessage(

    String to, String subject, String content)

      throws MessagingException

  {

    System.out.println("SENDING message from " + from + " to " + to);

    System.out.println();

    MimeMessage msg = new MimeMessage(session);

    msg.setFrom(new InternetAddress(from));

    msg.addRecipients(Message.RecipientType.TO, to);

    msg.setSubject(subject);

    msg.setText(content);

    Transport.send(msg);

  }



  public void checkInbox(int mode)

    throws MessagingException, IOException

  {

    if (mode == 0) return;

    boolean show = (mode & SHOW_MESSAGES) > 0;

    boolean clear = (mode & CLEAR_MESSAGES) > 0;

    String action =

      (show ? "Show" : "") +

      (show && clear ? " and " : "") +

      (clear ? "Clear" : "");

    System.out.println(action + " INBOX for " + from);

    Store store = session.getStore();

    store.connect();

    Folder root = store.getDefaultFolder();

    Folder inbox = root.getFolder("inbox");

    inbox.open(Folder.READ_WRITE);

    Message[] msgs = inbox.getMessages();

    if (msgs.length == 0 && show)

    {

      System.out.println("No messages in inbox");

    }

    for (int i = 0; i < msgs.length; i++)

    {

      MimeMessage msg = (MimeMessage)msgs[i];

      if (show)

      {

        System.out.println("    From: " + msg.getFrom()[0]);

        System.out.println(" Subject: " + msg.getSubject());

        System.out.println(" Content: " + msg.getContent());

      }

      if (clear)

      {

        msg.setFlag(Flags.Flag.DELETED, true);

      }

    }

    inbox.close(true);

    store.close();

    System.out.println();

  }

}


public class JamesConfigTest

{

  public static void main(String[] args)

    throws Exception

  {

    // CREATE CLIENT INSTANCES

    MailClient redClient = new MailClient("r...@smo.tld","red",
"192.168.55.119");

    MailClient greenClient = new MailClient("gr...@smo.tld", "green",
"192.168.55.119");

    MailClient blueClient = new MailClient("b...@smo.tld","blue",
"192.168.55.119");



    // CLEAR EVERYBODY'S INBOX

    redClient.checkInbox(MailClient.CLEAR_MESSAGES);

    greenClient.checkInbox(MailClient.CLEAR_MESSAGES);

    blueClient.checkInbox(MailClient.CLEAR_MESSAGES);

    Thread.sleep(500); // Let the server catch up



    // SEND A COUPLE OF MESSAGES TO BLUE (FROM RED AND GREEN)

    //redClient.getPasswordAuthentication();

    redClient.sendMessage(

      "garvi...@h5sw.com",

      "Testing blue from red",

      "This is a test message");

    //greenClient.getPasswordAuthentication();

    greenClient.sendMessage(

      "b...@smo.tld",

      "Testing blue from green",

      "This is a test message");

    Thread.sleep(500); // Let the server catch up



    // LIST MESSAGES FOR BLUE (EXPECT MESSAGES FROM RED AND GREEN)

    blueClient.checkInbox(MailClient.SHOW_AND_CLEAR);

  }

}


Here is the output from the console

 Exception in thread "main" javax.mail.SendFailedException: Invalid
Addresses;

  nested exception is:

com.sun.mail.smtp.SMTPAddressFailedException: 530 5.7.1 Authentication
Required


 at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1835)

at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1098)

at javax.mail.Transport.send0(Transport.java:195)

at javax.mail.Transport.send(Transport.java:124)

at MailClient.sendMessage(MailClient.java:55)

at JamesConfigTest.main(JamesConfigTest.java:20)

Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 530 5.7.1
Authentication Required


 at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1733)

... 5 more

Here is the output in the JamesServer.log:

INFO  13:38:51,436 | james.smtpserver | ID=128768368 Connection established
from Garvice-MacBook.local (192.168.55.116)

INFO  13:38:51,477 | james.smtpserver | ID=128768368
org.apache.james.smtpserver.AuthRequiredToRelayRcptHook: result=2 (DENY)

INFO  13:38:51,479 | james.smtpserver | ID=128768368
org.apache.james.smtpserver.JamesRcptCmdHandler: 530 [5.7.1 Authentication
Required]

INFO  13:38:51,496 | james.smtpserver | ID=128768368 Connection closed for
Garvice-MacBook.local (192.168.55.116)


Here is the SMTP:

INFO  13:38:51,436 | james.smtpserver | ID=128768368 Connection established
from Garvice-MacBook.local (192.168.55.116)

INFO  13:38:51,477 | james.smtpserver | ID=128768368
org.apache.james.smtpserver.AuthRequiredToRelayRcptHook: result=2 (DENY)

INFO  13:38:51,479 | james.smtpserver | ID=128768368
org.apache.james.smtpserver.JamesRcptCmdHandler: 530 [5.7.1 Authentication
Required]

INFO  13:38:51,496 | james.smtpserver | ID=128768368 Connection closed for
Garvice-MacBook.local (192.168.55.116)


If I uncomment the line  //props.put("mail.smtp.auth", "true");

I get this error message:

Exception in thread "main" javax.mail.SendFailedException: Invalid
Addresses;

  nested exception is:

com.sun.mail.smtp.SMTPAddressFailedException: 503 5.7.1 Incorrect
Authentication for Specified Email Address


 at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1835)

at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1098)

at javax.mail.Transport.send0(Transport.java:195)

at javax.mail.Transport.send(Transport.java:124)

at MailClient.sendMessage(MailClient.java:55)

at JamesConfigTest.main(JamesConfigTest.java:20)

Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 503 5.7.1 Incorrect
Authentication for Specified Email Address


 at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1686)

... 5 more


With these Logfiles:

SMTPServer.log

INFO  13:38:37,155 | james.smtpserver | ID=192071567 Connection established
from Garvice-MacBook.local (192.168.55.116)

INFO  13:38:37,221 | james.smtpserver | ID=192071567
org.apache.james.smtpserver.SenderAuthIdentifyVerificationRcptHook: result=2
(DENY)

INFO  13:38:37,223 | james.smtpserver | ID=192071567
org.apache.james.smtpserver.JamesRcptCmdHandler: 503 [5.7.1 Incorrect
Authentication for Specified Email Address]

INFO  13:38:37,248 | james.smtpserver | ID=192071567 Connection closed for
Garvice-MacBook.local (192.168.55.116)

James-Server.log

INFO  13:38:37,155 | james.smtpserver | ID=192071567 Connection established
from Garvice-MacBook.local (192.168.55.116)

INFO  13:38:37,221 | james.smtpserver | ID=192071567
org.apache.james.smtpserver.SenderAuthIdentifyVerificationRcptHook: result=2
(DENY)

INFO  13:38:37,223 | james.smtpserver | ID=192071567
org.apache.james.smtpserver.JamesRcptCmdHandler: 503 [5.7.1 Incorrect
Authentication for Specified Email Address]

INFO  13:38:37,248 | james.smtpserver | ID=192071567 Connection closed for
Garvice-MacBook.local (192.168.55.116)


Any help with this would be great. I'm not really sure what I"m doing wrong.
I don't know if it's a setting in james or a property I need to set in
JavaMail for the Transport.

Also here is the SMTPServer.xml file

<smtpserver enabled="true">

  <bind>0.0.0.0:25</bind>

  <connectionBacklog>200</connectionBacklog>

  <tls socketTLS="false" startTLS="false">

  </tls>

  <connectiontimeout>360</connectiontimeout>

  <connectionLimit> 0 </connectionLimit>

  <connectionLimitPerIP> 0 </connectionLimitPerIP>

  <authorizedAddresses>127.0.0.0/8</authorizedAddresses>

  <authRequired>false</authRequired>

  <verifyIdentity>false</verifyIdentity>

  <maxmessagesize>0</maxmessagesize>

  <addressBracketsEnforcement>true</addressBracketsEnforcement>

  <handlerchain enableJmx="true">

    <handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>

    <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>


  </handlerchain>

</smtpserver>

Reply via email to