i try the tutorial Get Attachment File Name from Java2s.com. What i'm doing is to read email from the Outlook Web Access Light. If i put the url address of the Outlook Web Access Light, i have the error:

Exception in thread "main" javax.mail.NoSuchProviderException: No provider for http
        at javax.mail.Session.getProvider(Session.java:455)
        at javax.mail.Session.getStore(Session.java:530)
        at javax.mail.Session.getFolder(Session.java:602)
        at MainClass.main(MainClass.java:19)
Java Result: 1

I don't understand the line :


here is the code:

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Part;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;

public class MainClass {

  public static void main(String[] args) throws Exception {
    URLName server = new URLName("protocol://username@host/foldername");

    Session session = Session.getDefaultInstance(new Properties(), new MailAuthenticator());

    Folder folder = session.getFolder(server);
    if (folder == null) {
      System.out.println("Folder " + server.getFile() + " not found.");

    Message[] messages = folder.getMessages();
    for (int i = 0; i < messages.length; i++) {
      System.out.println(messages[i].getSize() + " bytes long.");
      System.out.println(messages[i].getLineCount() + " lines.");
      String disposition = messages[i].getDisposition();
      if (disposition == null){
        ; // do nothing
      }else if (disposition.equals(Part.INLINE)) {
        System.out.println("This part should be displayed inline");
      } else if (disposition.equals(Part.ATTACHMENT)) {
        System.out.println("This part is an attachment");
        String fileName = messages[i].getFileName();
        System.out.println("The file name of this attachment is " + fileName);
      String description = messages[i].getDescription();
      if (description != null) {
        System.out.println("The description of this message is " + description);

class MailAuthenticator extends Authenticator {

  public MailAuthenticator() {

  public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("username", "password");

Thank you very much.

I believe that the line: ("protocol://username@host/foldername");
is asking you to enter a protocol such as "http", username would be a real username such as "johndoe", host is where you would put a real host such as "gmail", and foldername is the name of a real folder such "My Documents".
take a look at this API for further info: on how to use URLName:

This article has been dead for over six months. Start a new discussion instead.