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].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.


Reply via email to