Interesting, so this did not work? attachment.setDataHandler(new DataHandler(mimePartDataSource)); attachment.setFileName("ticker.png");
I'll need to do some research into the Java mail spec to see if we are matching it. Could be a bug if we aren't. On Thu, Nov 26, 2009 at 12:48 PM, Don <lydonchan...@gmail.com> wrote: > Thanks Ikai. > > It did NOT work before because I set the dataHandler before I set the > FileName. > > Just have to set the FileName and then set the DataHandler. > attachment.setFileName("ticker.png"); > attachment.setDataHandler(new DataHandler(mimePartDataSource)); > > Is this behaviour intentional? > > Many thanks > Don > > > On Nov 24, 10:15 am, "Ikai L (Google)" <ika...@google.com> wrote: > > Don, > > > > First, a word of caution: you'll probably want to contact the creators of > > the site you are trying to fetch the image from if you haven't done so > > already. Their terms of service prohibit the use of automatic downloading > of > > images:http://support.stockcharts.com/forums/31090/entries/20485 > > > > To fetch an image from a URL and send it via the Mail Service, this what > you > > need to do: > > > > 1. Fetch your URL > > 2. Find the content type > > 3. Read the stream into a byte[] > > 4. Create a message and a data handler > > 5. Pass the byte[] into the data source, then into the data handler > > > > Example code:http://pastie.org/712159 > > > > import javax.servlet.http.HttpServlet; > > import javax.servlet.http.HttpServletRequest; > > import javax.servlet.http.HttpServletResponse; > > import javax.servlet.ServletException; > > import javax.mail.*; > > import javax.mail.util.ByteArrayDataSource; > > import javax.mail.internet.MimeMultipart; > > import javax.mail.internet.MimeBodyPart; > > import javax.mail.internet.MimeMessage; > > import javax.mail.internet.InternetAddress; > > import javax.activation.DataHandler; > > import java.io.IOException; > > import java.io.InputStream; > > import java.io.ByteArrayOutputStream; > > import java.net.URL; > > import java.util.Properties; > > > > public class GetStockServlet extends HttpServlet { > > private static final String SENDER = "your.sen...@domain.com"; > > private static final String RECIPIENT = "your.recipi...@domain.com"; > > > > protected void doGet(HttpServletRequest request, HttpServletResponse > > response) throws ServletException, IOException { > > > > URL url = new URL("http://yoururl.com/image.png"); > > InputStream in = url.openStream(); > > > > byte[] rawData; > > int len; > > byte[] buffer = new byte[8192]; > > ByteArrayOutputStream output = new ByteArrayOutputStream(); > > > > try { > > while ((len = in.read(buffer, 0, buffer.length)) != -1) > > output.write(buffer, 0, len); > > rawData = output.toByteArray(); > > } finally { > > output.close(); > > } > > > > response.setContentType("image/png"); > > response.getOutputStream().write(rawData); > > response.getOutputStream().flush(); > > > > String htmlBody = "Here is the quote you wanted"; > > > > Properties props = new Properties(); > > Session session = Session.getDefaultInstance(props, null); > > > > Message message = new MimeMessage(session); > > > > Multipart mp = new MimeMultipart(); > > > > MimeBodyPart htmlPart = new MimeBodyPart(); > > > > try { > > message.setFrom(new InternetAddress(SENDER, "Stock > Service")); > > message.addRecipient(Message.RecipientType.TO, new > > InternetAddress(RECIPIENT)); > > message.setSubject("Stock Quote: " + symbol); > > > > htmlPart.setContent(htmlBody, "text/html"); > > mp.addBodyPart(htmlPart); > > > > ByteArrayDataSource dataSource = new > > ByteArrayDataSource(rawData, "image/png"); > > > > MimeBodyPart attachment = new MimeBodyPart(); > > attachment.setFileName(symbol + ".png"); > > attachment.setDataHandler(new > > DataHandler(dataSource)); > > mp.addBodyPart(attachment); > > > > message.setContent(mp); > > Transport.send(message); > > } catch (MessagingException e) { > > throw new IOException(e); > > } > > > > } > > > > } > > On Sun, Nov 22, 2009 at 9:04 AM, Don <lydonchan...@gmail.com> wrote: > > > Hi Ikai, > > > > > I tried your example code, but I cannot attach an image on the email > > > that I send. > > > There is no conversion error either. > > > > > Here is snippets of the code, please help.. > > > > > //Retrieving image: > > > URL url = new URL("http://stockcharts.com/c-sc/sc?s=" + ticker + > > > "&p=DAILY&b=5&g=0&i=0&r=3528"); > > > //Sending mail > > > SendMail sendmail = new SendMail(customerEmail, url.openStream()); > > > > > // send mail function > > > public SendMail(String recipient, InputStream imagestream) { > > > msg.setFrom( new InternetAddress("lydonchan...@gmail.com", "dons > > > service")); > > > msg.addRecipient(Message.RecipientType.TO, new > > > InternetAddress > > > (recipient)); > > > msg.setSubject("dons service daily charts"); > > > > > Multipart multipart = new MimeMultipart(); > > > > > MimeBodyPart htmlPart = new MimeBodyPart(); > > > htmlPart.setContent(" url2: " , "text/html"); > > > multipart.addBodyPart(htmlPart); > > > > > // append png image? > > > ByteArrayDataSource mimePartDataSource = new > > > ByteArrayDataSource > > > (imagestream, "image/png"); > > > > > MimeBodyPart attachment = new MimeBodyPart(); > > > attachment.setDataHandler(new > > > DataHandler(mimePartDataSource)); > > > attachment.setFileName("ticker.png"); > > > multipart.addBodyPart(attachment); > > > msg.setContent(multipart); > > > > > Transport.send(msg); > > > } > > > > > On Nov 17, 5:35 am, "Ikai L (Google)" <ika...@google.com> wrote: > > > > I couldn't reproduce your exact error, but I was able to put together > a > > > > working example of an inbound email handler to relay messages. I'm > going > > > to > > > > expand the documentation about processing inbound emails. Here's some > > > > working code:http://pastie.org/701517 > > > > > > Does this example help any? Code is also pasted below, but it'll be > > > easier > > > > for you to look at the Pastie. > > > > > > import javax.servlet.http.HttpServlet; > > > > import javax.servlet.http.HttpServletRequest; > > > > import javax.servlet.http.HttpServletResponse; > > > > import javax.servlet.ServletException; > > > > import javax.mail.*; > > > > import javax.mail.util.ByteArrayDataSource; > > > > import javax.mail.internet.MimeMessage; > > > > import javax.mail.internet.MimeMultipart; > > > > import javax.mail.internet.MimeBodyPart; > > > > import javax.mail.internet.InternetAddress; > > > > import javax.activation.DataHandler; > > > > import java.io.IOException; > > > > import java.io.InputStream; > > > > import java.util.logging.Logger; > > > > import java.util.Properties; > > > > > > public class MailHandlerServlet extends HttpServlet { > > > > private static final Logger log = > > > > Logger.getLogger(MailHandlerServlet.class.getName()); > > > > private static final String RECIPIENT = "recipi...@gmail.com"; > > > > private static final String SENDER = "sen...@google.com"; > > > > > > protected void doPost(HttpServletRequest request, > HttpServletResponse > > > > response) throws ServletException, IOException { > > > > Properties props = new Properties(); > > > > Session session = Session.getDefaultInstance(props, null); > > > > try { > > > > MimeMessage message = new MimeMessage(session, > > > > request.getInputStream()); > > > > > > Object content = message.getContent(); // You could also > > > > probably just use message.getInputStream() here > > > > // and avoid the > > > > conditional type check > > > > > > if (content instanceof String) { > > > > log.info("Received a string"); > > > > } else if (content instanceof InputStream) { > > > > // My somewhat limited testing indicates that this is > > > always > > > > getting returned as an > > > > // InputStream > > > > > > InputStream inputStream = (InputStream) content; > > > > ByteArrayDataSource inboundDataSource = new > > > > ByteArrayDataSource(inputStream, message.getContentType()); > > > > Multipart inboundMultipart = new > > > > MimeMultipart(inboundDataSource); > > > > > > // Set the body with whatever text you want > > > > Multipart outboundMultipart = new MimeMultipart(); > > > > MimeBodyPart messageBodyPart = new MimeBodyPart(); > > > > messageBodyPart.setText("Set your body here"); > > > > outboundMultipart.addBodyPart(messageBodyPart); > > > > > > // Loop over the multipart message coming in and > > > > // append them to the outbound Multipart object > > > > for (int i = 0; i < inboundMultipart.getCount(); i++) > { > > > > BodyPart part = inboundMultipart.getBodyPart(i); > > > > /* > > > > The content-disposition header is optional: > > > > http://www.ietf.org/rfc/rfc1806.txt > > > > > > This header specifies the filename and type > of > > > > a MIME part. > > > > */ > > > > if(part.getDisposition() == null) { > > > > // This is just a plain text email > > > > } else { > > > > // We have something interesting. Let's parse > it. > > > > > > // Create a new ByteArrayDataSource with this > > > part > > > > MimeBodyPart inboundMimeBodyPart = > (MimeBodyPart) > > > > part; > > > > InputStream is = part.getInputStream(); > > > > ByteArrayDataSource mimePartDataSource = new > > > > ByteArrayDataSource(is, inboundMimeBodyPart.getContentType()); > > > > > > // Create a new outbound MimeBodyPart and set > > > this > > > > as the handler > > > > MimeBodyPart outboundMimeBodyPart = new > > > > MimeBodyPart(); > > > > outboundMimeBodyPart.setDataHandler(new > > > > DataHandler(mimePartDataSource)); > > > > > > outboundMimeBodyPart.setFileName(inboundMimeBodyPart.getFileName()); > > > > > outboundMultipart.addBodyPart(outboundMimeBodyPart); > > > > > > } > > > > > > } > > > > message.setContent(outboundMultipart); > > > > > > } > > > > message.setFrom(new InternetAddress(SENDER, "Relay > > > account")); > > > > ... > > > > 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 > google-appengine-j...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > > -- Ikai Lan Developer Programs Engineer, Google App Engine -- 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 google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.