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.
