[ http://issues.apache.org/jira/browse/GERONIMO-1797?page=all ]

Rick McGuire updated GERONIMO-1797:
-----------------------------------

    Description: 
Mail sent with attachments are not getting the headers set properly, so the 
attachment is not recognized by mail clients as being attachment data.  The 
following short program illustrates this:

//compiles against geronimo j2ee spec jar

import java.io.PrintWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import java.util.Properties;

public class xx {
  public static void main (String [] args)
    throws IOException, AddressException, NoSuchProviderException, 
MessagingException
  {
      String username = "xxxxxxx";
      String password = "xxxxxx";
      String smtphost = "smtp.gmail.com";

      Properties props = new Properties();
      props.put("mail.smtp.auth", "true");
      props.put("mail.debug", "true");
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.port", "587");
      Session session = Session.getDefaultInstance(props);
      session.setDebug(true);
      Message message = new MimeMessage(session);
      message.setFrom(new InternetAddress("[EMAIL PROTECTED]"));
      message.setRecipients(Message.RecipientType.TO, 
InternetAddress.parse("[EMAIL PROTECTED]"));
      message.setSubject("test subject");
      message.setText("test message");
      BodyPart messageBodyPart1 = new MimeBodyPart();
      messageBodyPart1.setText("part 1");
      BodyPart messageBodyPart2 = new MimeBodyPart();
      DataSource dataSource = new FileDataSource("xx.java");
      messageBodyPart2.setDataHandler(new DataHandler(dataSource));
      messageBodyPart2.setFileName("xx.java");
      Multipart multipart = new MimeMultipart();
      multipart.addBodyPart(messageBodyPart1);
      multipart.addBodyPart(messageBodyPart2);
      message.setContent(multipart);

//choose A or B

//A
//===>>> geronimo fails SILENTLY on following line (no message is received)
//===>>> but sun jars work fine
// Transport.send(message);

//B
//===>>> if the classpath contains the sequence: geronimo-mail-jar, 
activation-jar
//===>>>    then the following lines error out complaining about can't find 
"smtp"
//===>>> if the classpath contains the sequence: geronimo-mail-jar, 
sun-mail-jar, activation-jar
//===>>>    then the following lines work but the parts are all messed up (show 
up as one big chunk)
//===>>> if the classpath contains the sequence: sun-mail-jar, activation-jar
//===>>>    then the following lines work perfectly fine
      Transport transport = session.getTransport("smtp");
      transport.connect(smtphost, 587, username, password);
      System.out.println("Sending message");
      transport.sendMessage(message, InternetAddress.parse("[EMAIL 
PROTECTED]"));
      transport.close();
  }
}


There are multiple problems with the written out headers:

1)  No MIME-Version header is getting set.
2)  The Content-Type for the type level message is not getting set.  Since this 
contains the mime boundary string, it results in the message getting corrupted.
3) Message header names are getting written as all lower case.

  was:
Mail sent with attachments are not getting the headers set properly, so the 
attachment is not recognized by mail clients as being attachment data.  The 
following short program illustrates this:

//compiles against geronimo j2ee spec jar

import java.io.PrintWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import java.util.Properties;

public class xx {
  public static void main (String [] args)
    throws IOException, AddressException, NoSuchProviderException, 
MessagingException
  {
      String username = "rickmcg";
      String password = "stenos";
      String smtphost = "smtp.gmail.com";

      Properties props = new Properties();
      props.put("mail.smtp.auth", "true");
      props.put("mail.debug", "true");
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.port", "587");
      Session session = Session.getDefaultInstance(props);
      session.setDebug(true);
      Message message = new MimeMessage(session);
      message.setFrom(new InternetAddress("[EMAIL PROTECTED]"));
      message.setRecipients(Message.RecipientType.TO, 
InternetAddress.parse("[EMAIL PROTECTED]"));
      message.setSubject("test subject");
      message.setText("test message");
      BodyPart messageBodyPart1 = new MimeBodyPart();
      messageBodyPart1.setText("part 1");
      BodyPart messageBodyPart2 = new MimeBodyPart();
      DataSource dataSource = new FileDataSource("xx.java");
      messageBodyPart2.setDataHandler(new DataHandler(dataSource));
      messageBodyPart2.setFileName("xx.java");
      Multipart multipart = new MimeMultipart();
      multipart.addBodyPart(messageBodyPart1);
      multipart.addBodyPart(messageBodyPart2);
      message.setContent(multipart);

//choose A or B

//A
//===>>> geronimo fails SILENTLY on following line (no message is received)
//===>>> but sun jars work fine
// Transport.send(message);

//B
//===>>> if the classpath contains the sequence: geronimo-mail-jar, 
activation-jar
//===>>>    then the following lines error out complaining about can't find 
"smtp"
//===>>> if the classpath contains the sequence: geronimo-mail-jar, 
sun-mail-jar, activation-jar
//===>>>    then the following lines work but the parts are all messed up (show 
up as one big chunk)
//===>>> if the classpath contains the sequence: sun-mail-jar, activation-jar
//===>>>    then the following lines work perfectly fine
      Transport transport = session.getTransport("smtp");
      transport.connect(smtphost, 587, username, password);
      System.out.println("Sending message");
      transport.sendMessage(message, InternetAddress.parse("[EMAIL 
PROTECTED]"));
      transport.close();
  }
}


There are multiple problems with the written out headers:

1)  No MIME-Version header is getting set.
2)  The Content-Type for the type level message is not getting set.  Since this 
contains the mime boundary string, it results in the message getting corrupted.
3) Message header names are getting written as all lower case.


> Mail attachments are not getting recognized as MIME parts
> ---------------------------------------------------------
>
>          Key: GERONIMO-1797
>          URL: http://issues.apache.org/jira/browse/GERONIMO-1797
>      Project: Geronimo
>         Type: Bug
>     Security: public(Regular issues) 
>   Components: mail
>     Reporter: Rick McGuire
>     Assignee: Jacek Laskowski
>      Fix For: 1.2
>  Attachments: GERONIMO-1797.patch
>
> Mail sent with attachments are not getting the headers set properly, so the 
> attachment is not recognized by mail clients as being attachment data.  The 
> following short program illustrates this:
> //compiles against geronimo j2ee spec jar
> import java.io.PrintWriter;
> import java.io.FileReader;
> import java.io.FileWriter;
> import java.io.IOException;
> import javax.mail.*;
> import javax.mail.internet.*;
> import javax.activation.DataHandler;
> import javax.activation.DataSource;
> import javax.activation.FileDataSource;
> import java.util.Properties;
> public class xx {
>   public static void main (String [] args)
>     throws IOException, AddressException, NoSuchProviderException, 
> MessagingException
>   {
>       String username = "xxxxxxx";
>       String password = "xxxxxx";
>       String smtphost = "smtp.gmail.com";
>       Properties props = new Properties();
>       props.put("mail.smtp.auth", "true");
>       props.put("mail.debug", "true");
>       props.put("mail.smtp.starttls.enable", "true");
>       props.put("mail.smtp.port", "587");
>       Session session = Session.getDefaultInstance(props);
>       session.setDebug(true);
>       Message message = new MimeMessage(session);
>       message.setFrom(new InternetAddress("[EMAIL PROTECTED]"));
>       message.setRecipients(Message.RecipientType.TO, 
> InternetAddress.parse("[EMAIL PROTECTED]"));
>       message.setSubject("test subject");
>       message.setText("test message");
>       BodyPart messageBodyPart1 = new MimeBodyPart();
>       messageBodyPart1.setText("part 1");
>       BodyPart messageBodyPart2 = new MimeBodyPart();
>       DataSource dataSource = new FileDataSource("xx.java");
>       messageBodyPart2.setDataHandler(new DataHandler(dataSource));
>       messageBodyPart2.setFileName("xx.java");
>       Multipart multipart = new MimeMultipart();
>       multipart.addBodyPart(messageBodyPart1);
>       multipart.addBodyPart(messageBodyPart2);
>       message.setContent(multipart);
> //choose A or B
> //A
> //===>>> geronimo fails SILENTLY on following line (no message is received)
> //===>>> but sun jars work fine
> // Transport.send(message);
> //B
> //===>>> if the classpath contains the sequence: geronimo-mail-jar, 
> activation-jar
> //===>>>    then the following lines error out complaining about can't find 
> "smtp"
> //===>>> if the classpath contains the sequence: geronimo-mail-jar, 
> sun-mail-jar, activation-jar
> //===>>>    then the following lines work but the parts are all messed up 
> (show up as one big chunk)
> //===>>> if the classpath contains the sequence: sun-mail-jar, activation-jar
> //===>>>    then the following lines work perfectly fine
>       Transport transport = session.getTransport("smtp");
>       transport.connect(smtphost, 587, username, password);
>       System.out.println("Sending message");
>       transport.sendMessage(message, InternetAddress.parse("[EMAIL 
> PROTECTED]"));
>       transport.close();
>   }
> }
> There are multiple problems with the written out headers:
> 1)  No MIME-Version header is getting set.
> 2)  The Content-Type for the type level message is not getting set.  Since 
> this contains the mime boundary string, it results in the message getting 
> corrupted.
> 3) Message header names are getting written as all lower case.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to