Search code examples
javaiphoneemailsmtpemail-attachments

Email attachment sent via smtp to iphone are not visible in iphone native email app


I have a web service that sends an email with attachments.

the code snippet that sends email is

                MimeMultipart content = new MimeMultipart("related");
                msg.setContent(content);
                MimeBodyPart attachment = new MimeBodyPart();
                File file = new File("filename.txt");
                String fileName = "";
                DataSource fds;
                String fullPathFile = mail.getAttachment().get(i);
                String pathArray[] = fullPathFile.split("/");
                fds = new FileDataSource(file);
                attachment.setDataHandler(new DataHandler(fds));
                attachment.setHeader("Content-ID", "<" + id + ">");
                attachment.setFileName(fds.getName());
                content.addBodyPart(attachment);

This works fine for every email app. But in the native iPhone email app, I am unable to view the attachment.

As you can see in the image, we can see the attachment symbol. But when I open this email, I fail to find the attachmet

In the image, we can see the attachment icon but when I open the email, I find no attachments I also referred the link: https://discussions.apple.com/thread/7491137?start=30&tstart=0

Is there a programing solution for this?


Solution

  • The way you attache the MimeBodyPart is causing this issue. I had the same problem. Your fix would look like:

    attachments = new MimeBodyPart(); 
    DataSource source = new FileDataSource(dest); 
    attachments.setDataHandler(new DataHandler(source)); 
    attachments.setFileName(source.getName());
    mp.addBodyPart(attachments); 
    Multipart htmlAndTextMultipart = new MimeMultipart("alternative"); 
    MimeBodyPart htmlBodyPart = new MimeBodyPart();
    htmlBodyPart.setContent(body, "text/html; charset=utf-8");
    htmlAndTextMultipart.addBodyPart(htmlBodyPart); 
    MimeBodyPart htmlAndTextBodyPart = new MimeBodyPart(); 
    htmlAndTextBodyPart.setContent(htmlAndTextMultipart); 
    mp.addBodyPart(htmlAndTextBodyPart);