Thanks your quick response.
I didn't find that issue.

2009/12/31 minor-undroid <[email protected]>

> Sorry, I made a wrting mistake.
>
> I cannot send the HTML mail with inline image,
> and cannot send the HTML mail with attachement file, too.
> (I could send the plain text mail with an attachment image
>  and HTML mail without attachment file)
>
> I think It's only GAE's problem.
> Do you have any idea?
>
>
> On Dec 31, 11:23 pm, minor-undroid <[email protected]> wrote:
> > Hi there,
> >
> > I reproduced same problem.
> > I cannotsendattachmentfile and inline image with HTMLmail.
> > (Of course, I couldsendplain textmailwithoutattachmentand
> >  HTMLmailwithout inline image)
> > I don't have any idea.  It would be very helpful to tell me anything.
> >
> > I build the mime message in HtmlMimeMessage#createMimeMessage method.
> > My code is as follows,
> > /
> >
> *************************************************************************************/
> > import java.io.ByteArrayOutputStream;
> > import java.io.IOException;
> > import java.io.InputStream;
> > import java.net.MalformedURLException;
> > import java.net.URL;
> > import java.util.ArrayList;
> > import java.util.regex.Matcher;
> > import java.util.regex.Pattern;
> > import java.util.regex.PatternSyntaxException;
> >
> > import javax.activation.DataHandler;
> > import javax.mail.MessagingException;
> > import javax.mail.internet.MimeBodyPart;
> > import javax.mail.internet.MimeMessage;
> > import javax.mail.internet.MimeMultipart;
> > import javax.mail.util.ByteArrayDataSource;
> >
> > import com.mnrngsk.test20091217.mail.CommonData;
> > import com.mnrngsk.test20091217.mail.DbgLog;
> >
> > public class HtmlMimeMessage {
> >
> >         private static final String             CID_DOMAIN              =
> "@xxxxxxx";
> >         private static final String             REGEX_IMGTAG    =
> "<img(\"[^\"]*\"|'[^']*'|
> > [^'\">])*src=(\"[^\"]*\"|'[^']*'|[^'\">])*/?>";
> >
> >         private MimeMessage                     mmHtmlMsg = null;
> >         private MimeMultipart                   mmpHtmlMail = null;
> >         private String                  strHtmlSrc = "";
> >         private boolean                         bAttach = false;
> >         private String                  strAttach = "";
> >
> >         private ArrayList<ReplacedImgTag> replacedImgTagList
> >                                                         = new
> ArrayList<ReplacedImgTag>();
> >
> >         // constructor
> >         public HtmlMimeMessage(MimeMessage msg, boolean bAttach) {
> >                 this.mmHtmlMsg = msg;
> >                 this.bAttach = bAttach;
> >         }
> >
> >         public void setSource(String strSrc) {
> >                 this.strHtmlSrc = strSrc;
> >         }
> >
> >         public void setAttachment(String strAttach) {
> >                 if (this.bAttach) {
> >                         this.strAttach = strAttach;
> >                 }
> >         }
> >
> >         private void addInlineImageTo(MimeMultipart mmp) {
> >                 int iImgSrcCount = this.replacedImgTagList.size();
> >                 for (int i = 0; i < iImgSrcCount; i++) {
> >                         DbgLog.info("HtmlMimeMessage#addInlineImageTo;
> Inline Image #" +
> > Integer.toString(i));
> >
> >                         ImageMessageBodyFactory imageMbpFactory = new
> > ImageMessageBodyFactory(this.replacedImgTagList.get(i));
> >                         MimeBodyPart mbpImg =
> imageMbpFactory.createMessageBody();
> >                         try {
> >                                 mmp.addBodyPart(mbpImg);
> >
> DbgLog.info("HtmlMimeMessage#addInlineImageTo;\n
> > mbpImg#ContentType="
> >                                                 + mbpImg.getContentType()
> + "\n  this.mmpHtmlMail#ContentType="
> >                                                 + mmp.getContentType());
> >                         } catch (MessagingException e) {
> >                                 e.printStackTrace();
> >                         DbgLog.warning("HtmlMimeMessage#addInlineImageTo;
> > MessagingException; " + e.getMessage());
> >                         }
> >                 }
> >         }
> >
> >     public boolean createMimeMessage() {
> >         boolean bRes = false;
> >
> >         try {
> >                 TextByHtmlMessageBodyFactory textMbpFactory = new
> > TextByHtmlMessageBodyFactory(this.strHtmlSrc);
> >                         MimeBodyPart mbpText =
> textMbpFactory.createMessageBody();
> >
> >                         HtmlMessageBodyFactory htmlMbpFactory = new
> HtmlMessageBodyFactory
> > (this.strHtmlSrc, replacedImgTagList);
> >                         MimeBodyPart mbpHtml =
> htmlMbpFactory.createMessageBody();
> >
> >                         MimeMultipart mmpMixed = null;
> >                         MimeBodyPart mbpAttach = null;
> >
> >                         if (this.bAttach) {
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage; wAttachment
> > (mixed);");
> >
> >                                 AttachedMessageBodyFactory
> attachMbpFactory = new
> > AttachedMessageBodyFactory();
> >
> attachMbpFactory.setAttachment(this.strAttach);
> >                                 mbpAttach =
> attachMbpFactory.createMessageBody();
> >
> >                                 mmpMixed =
> attachMbpFactory.getMultipart();
> >                         }
> >
> >                         MimeMultipart mmpAlter = new
> MimeMultipart("alternative");
> >
> >                         if (mbpText != null) {
> >                                 mmpAlter.addBodyPart(mbpText);
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                 + "\n
>  mbpText#ContentType=" + mbpText.getContentType()
> >                                                 + "\n
>  mmpAlter#ContentType=" + mmpAlter.getContentType()
> >                                                 );
> >                         }
> >
> >                         int iImgSrcCount =
> this.replacedImgTagList.size();
> >                         if (iImgSrcCount > 0) {
> >                                 MimeMultipart mmpHtmlAndImg = new
> MimeMultipart("related");
> >
> >                                 if (mbpHtml != null) {
> >
> mmpHtmlAndImg.addBodyPart(mbpHtml);
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                         + "\n
>  mbpHtml#ContentType=" + mbpHtml.getContentType()
> >                                                         + "\n
>  mmpHtmlAndImg#ContentType=" +
> > mmpHtmlAndImg.getContentType()
> >                                                         );
> >                                 }
> >
> >                                 addInlineImageTo(mmpHtmlAndImg);
> >
> >                                 MimeBodyPart mbpHtmlAndImg = new
> MimeBodyPart();
> >                                 mbpHtmlAndImg.setContent(mmpHtmlAndImg);
> >                                 mmpAlter.addBodyPart(mbpHtmlAndImg);
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                 + "\n
>  mbpHtmlAndImg#ContentType=" + mbpHtmlAndImg.getContentType
> > ()
> >                                                 + "\n
>  mmpAlter#ContentType=" + mmpAlter.getContentType()
> >                                                 );
> >                         }
> >                         else {
> >                                 if (mbpHtml != null) {
> >                                         mmpAlter.addBodyPart(mbpHtml);
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                         + "\n
>  mbpHtml#ContentType=" + mbpHtml.getContentType()
> >                                                         + "\n
>  mmpAlter#ContentType=" + mmpAlter.getContentType()
> >                                                         );
> >                                 }
> >                         }
> >
> >                         if (this.bAttach) {
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage; wAttachment
> > (mixed);");
> >
> >                                 MimeBodyPart mbpAlter = new
> MimeBodyPart();
> >                                 mbpAlter.setContent(mmpAlter);
> >
> >                                 mmpMixed.addBodyPart(mbpAlter);
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                 + "\n
>  mbpAlter#ContentType=" + mbpAlter.getContentType()
> >                                                 + "\n
>  mmpMixed#ContentType=" + mmpMixed.getContentType()
> >                                                 );
> >
> >                                 mmpMixed.addBodyPart(mbpAttach);
> >                                 this.mmHtmlMsg.setContent(mmpMixed);
> >                                 this.mmHtmlMsg.saveChanges();
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                 + "\n
> this.mmHtmlMsg#ContentType=" +
> > this.mmHtmlMsg.getContentType()
> >                                                 + "\n===Preamble==>\n" +
> mmpMixed.getPreamble() +
> > "\n<==Preamble===\n"
> >                                                 );
> >                                 this.mmpHtmlMail = mmpMixed;
> >                         }
> >                         else {
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage; w/oAttachment;");
> >
> >                                 this.mmHtmlMsg.setContent(mmpAlter);
> >                                 this.mmHtmlMsg.saveChanges();
> >
> DbgLog.info("HtmlMimeMessage#createMimeMessage;"
> >                                                 + "\n
> this.mmHtmlMsg#ContentType=" +
> > this.mmHtmlMsg.getContentType()
> >                                                 + "\n===Preamble==>\n" +
> mmpAlter.getPreamble() +
> > "\n<==Preamble===\n"
> >                                                 );
> >                                 this.mmpHtmlMail = mmpAlter;
> >                         }
> >
> >                 } catch (MessagingException e) {
> >                         e.printStackTrace();
> >                 DbgLog.warning("HtmlMimeMessage#createHtmlMessage;
> > MessagingException; " + e.getMessage());
> >                 }
> >
> >         return bRes;
> >         }
> >
> >
> //////////////////////////////////////////////////////////////////
> >
> >         class ReplacedImgTag {
> >                 public String           strImgTagOrg = "";
> >                 public String           strImgTagCID = "";
> >                 public String           strImgSrcOrg = "";
> >                 public String           strImgSrcCID = "";
> >                 public String           strImgSrcFilename = "";
> >
> >                 // constructor
> >                 public ReplacedImgTag(String tagOrg, String srcOrg) {
> >                         this.strImgTagOrg = tagOrg;
> >                         this.strImgSrcCID = getImageContentId(srcOrg);
> >                         this.strImgTagCID = "<img src=\"cid:" +
> this.strImgSrcCID + "\" />";
> >
> >                         this.strImgSrcOrg = srcOrg;
> >                         this.strImgSrcFilename =
> getFilename(this.strImgSrcOrg);
> >                 }
> >
> >                 private String getImageContentId(String strFilename) {
> >                         int hashFilename = strFilename.hashCode();
> >                         String strRes = Integer.toHexString(hashFilename)
> + CID_DOMAIN;
> >                         return strRes;
> >                 }
> >
> >                 private String getFilename(String strImgSrcOrg) {
> >                         String strTmp = new String(strImgSrcOrg);
> >                         String strFile[] = strTmp.split("[/|\\\\]");
> >                         String strFilename = strTmp;
> >                         if (strFile.length > 0) {
> >                                 strFilename = strFile[strFile.length -
> 1];
> >                         }
> >                         return strFilename;
> >                 }
> >         }
> >
> >
> //////////////////////////////////////////////////////////////////
> >
> >         class TextByHtmlMessageBodyFactory {
> >
> >                 private String          strHtmlSrc = "";
> >
> >                 // constructor
> >                 public TextByHtmlMessageBodyFactory (String strHtmlSrc) {
> >                         this.strHtmlSrc = strHtmlSrc;
> >                 }
> >
> >                 private String convertHtmlTag(String strMsgbody, String
> regex,
> > String str) {
> >                         String strRes = strMsgbody;
> >                         Pattern p = Pattern.compile(regex);
> >
> >                         Matcher m = p.matcher(strMsgbody);
> >                         while (m.find()) {
> >                         }
> >                         strRes = m.replaceAll(str);
> >
> >                         return strRes;
> >                 }
> >
> >                 private String createPlainText(String strHtmlSrc) {
> >                         String strRes = convertHtmlTag(strHtmlSrc,
> REGEX_IMGTAG, "[img]");
> >                         strRes = convertHtmlTag(strRes, "<br\\s?/?>",
> "\n");
> >                         strRes = convertHtmlTag(strRes,
> "<(\"[^\"]*\"|'[^']*'|[^'\">])*>",
> > "");
> >
> >                         return strRes;
> >                 }
> >
> >                 public MimeBodyPart createMessageBody() {
> >
> >                         MimeBodyPart mbp = null;
> >                         TextMessageBodyFactory txtMbpFactory = new
> TextMessageBodyFactory
> > ();
> >
> txtMbpFactory.setText(createPlainText(this.strHtmlSrc));
> >                         mbp = txtMbpFactory.createMessageBody();
> >
> >                         try {
> >
> DbgLog.info("TextByHtmlMessageBodyFactory#createMessageBody;\n
> > mbp#ContentType="
> >                                                 + mbp.getContentType());
> >                         } catch (MessagingException e) {
> >                                 e.printStackTrace();
> >                         }
> >
> >                         return mbp;
> >                 }
> >         }
> >
> >
> //////////////////////////////////////////////////////////////////
> >
> >         class ImageMessageBodyFactory {
> >
> >                 private static final String             REGEX_HTTP      =
> "^https?://.*";
> >
> >                 private ReplacedImgTag replacedImgTag = null;
> >
> >                 // constructor
> >                 public ImageMessageBodyFactory (ReplacedImgTag
> replacedImgTag) {
> >                         this.replacedImgTag = replacedImgTag;
> >                 }
> >
> >                 private byte[] getImageByteArray() {
> >                         String strImgSrc =
> this.replacedImgTag.strImgSrcOrg;
> >                         byte[] rawData = null;
> >
> >                         if (strImgSrc.matches(REGEX_HTTP)) {
> >                                 URL url = null;
> >                                 ByteArrayOutputStream output = null;
> >                                 try {
> >                                         url = new URL("
> https://www.google.com/accounts/ah/
> > appengine.jpg");
> >                                         InputStream in;
> >                                         in = url.openStream();
> >
> >                                         int len;
> >                                         byte[] buffer = new byte[8192];
> >                                         output = new
> ByteArrayOutputStream();
> >
> >                                         while ((len = in.read(buffer, 0,
> buffer.length)) != -1) {
> >                                         output.write(buffer, 0, len);
> >                                         }
> >                                         rawData = output.toByteArray();
> >
> >                                 } catch (MalformedURLException e) {
> >                                         e.printStackTrace();
> >
> DbgLog.warning("ImageMessageBodyFactory#getImageDataHandler;
> > MalformedURLException; " + e.getMessage());
> >                                 } catch (IOException e) {
> >                                         e.printStackTrace();
> >
> DbgLog.warning("ImageMessageBodyFactory#getImageDataHandler;
> > IOException; " + e.getMessage());
> >                                 }
> >                         }
> >                         else {
> >                         }
> >
> >                         return rawData;
> >                 }
> > ...
> >
> > read more ยป
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine-java%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.


Reply via email to