2013-09-30 3 views
1

Из моего приложения я отправляю письма с прикрепленными файлами. полный код здесьНастройка Multipart для электронной почты с прикрепленным файлом

public int sendMail(MailDraft mailDraftInstance, mailInstance, path){        //Send the mail 
    String mailSubject = mailDraftInstance.subject 
    String toAddress = mailDraftInstance.toAddress 
    String ccAddress = mailDraftInstance.ccAddress 
    String bccAddress = mailDraftInstance.bccAddress 
    String fromAddress = mailDraftInstance.fromAddress 
    String body   = mailDraftInstance.body 

    String smtpUsername = 'myusername' 
    String smtpPassword = 'mypwd' 

    /*** set the SMTP properties and Authenticate*****/ 
    Properties smtpMailProperties 
    Session mailSession 
    smtpMailProperties = mailInstance.getSmtpConnectionProperties() 
    mailSession = mailInstance.getMailSession(smtpMailProperties, smtpUsername, smtpPassword) 

    try { 

     /**** Set the Header *************/ 
     User loggedInUser = User.get(SecurityContextHolder.context.authentication.principal.id) 
     Address address = new InternetAddress(mailDraftInstance.fromAddress); 
     Address replyAddress = new InternetAddress(mailDraftInstance.fromAddress); 
     Message message = new MimeMessage(mailSession); 
     message.setFrom(address); 
     //message.addFrom(address); //Set the from address with the logged in user email 
     message.setReplyTo(replyAddress) 

     /*** set Recipients*********/ 
     String recipientType = 'TO' 
     setMailRecipients(message, toAddress, recipientType, toAddressError) 
     recipientType = 'CC' 
     setMailRecipients(message, ccAddress, recipientType, ccAddressError) 
     recipientType = 'BCC' 
     setMailRecipients(message, bccAddress, recipientType, bccAddressError) 

     message.setSubject(mailSubject);  

     Multipart multiPart = new MimeMultipart("alternative"); // Create an "Alternative" Multipart message 
     // Multipart multiPart = new MimeMultipart("mixed"); 


     MimeBodyPart text = new MimeBodyPart(); 
     MimeBodyPart html = new MimeBodyPart(); 

     text.setText(body.replaceAll("\\<[^>]*>","").replaceAll("&nbsp;"," ").replaceAll("&amp;","&")); //set the text/plain version 
     html.setContent(Jsoup.parse(body).html(), "text/html");  //set the text/html version 

     multiPart.addBodyPart(text); 
     multiPart.addBodyPart(html); 


     /* // Set the Body 
     Multipart multiPart = new MimeMultipart(); 
     MimeBodyPart messageHtml = new MimeBodyPart(); //Create a mime body 
     messageHtml.setContent(body, "text/html");  //set the content type as HTML 
     multiPart.addBodyPart(messageHtml);*/ 

     // Add the Attachments 
     if(!mailDraftInstance.attachments.isEmpty()){ 
      Mail.attachFiles(mailDraftInstance.attachments, multiPart, path) 
     } 
     int i=0; 
     mailDraftInstance.attachments.each{ 
      i++ 
     } 
     message.setContent(multiPart);  //set the content 
     Transport.send(message);   //send the mail 
    }catch (Exception e) { 
     if(e instanceof AddressException){ 
      println "Email Recipient Address error"        //Error with the TO Or CC Or BCC Adresss 
      return addressErrorType 
     }else{ 
      println e               //Other errors, may be with the SMTP server 
      println "Cannot send email as an error occurred" 
      return addressErrorType 
     } 
    } 
    return mailSentSuccessfully //mail sent successfully 
} 



    public static attachFiles(def attachments, Multipart multiPart, String path){      //Attach files 
    attachments.each { 

     def attachmentId = it.id 
     String newFile= TrainingService.createFile(attachmentId, path) 

     MimeBodyPart fileAttachmentPart = new MimeBodyPart(); 
     FileDataSource attachmentfile = new FileDataSource(newFile); 
     fileAttachmentPart.setDataHandler(new DataHandler(attachmentfile)); 
     println "newFile============="+attachmentfile.getName() 
     fileAttachmentPart.setFileName(attachmentfile.getName()); 
     multiPart.addBodyPart(fileAttachmentPart); 

    } 

} 

если я установить

Multipart multiPart = new MimeMultipart("alternative"); 

некоторые из клиентов (Yahoomail) не получают вложения ..

так должна быть Мультисекционной установка для получения электронной почты, который имеет получили как текст, html и вложения?

ответ

1

Попробуйте это:

 public int sendMailWithSingleAttachment(String to, String subject, String body, String fileName, String sendFileName) { 
    final String username = "Your Username"; 
    final String password = "Your Password"; 
    Properties props = new Properties(); 
    props.put("mail.smtp.user", username); 
    props.put("mail.smtp.host", "smtp.live.com"); 
    props.put("mail.smtp.port", "25"); 
    props.put("mail.debug", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.EnableSSL.enable", "true"); 
    props.setProperty("mail.smtp.port", "587"); 
    props.setProperty("mail.smtp.socketFactory.port", "587"); 
    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(username, password); 
     } 
    }); 
    try { 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(username)); 
     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
     message.setSubject(subject); 
     message.setText(body); 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     Multipart multipart = new MimeMultipart(); 
     BodyPart htmlPart = new MimeBodyPart(); 
     htmlPart.setContent("<html>hello</html>", "text/html"); 
     DataSource source = new FileDataSource(fileName); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     messageBodyPart.setFileName(sendFileName); 
     multipart.addBodyPart(messageBodyPart); 
     multipart.addBodyPart(htmlPart); 
     message.setContent(multipart); 
     Transport.send(message); 

     return 1; 
    } catch (Exception e) { 


     return 0; 
    } 
} 

Пожалуйста, используйте порт в соответствии с вашим провайдером услуг, я использую внешний вид. Используемая библиотека - java mail.

+0

Неправильный код. –

+0

@BillShannon Как это неправильно ??? – Jhanvi

+0

См. Мой ответ выше, плюс этот список [распространенных ошибок] (http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes). –

1

Если вы хотите, чтобы сообщение содержало как альтернативные части, так и вложения, вам нужно два многочастных, один вложенный в другой. Внешний мультипартик должен быть многокомпонентным/смешанным. Первая часть тела этого мультипартианта должна быть многочастной/альтернативной частью. Вторая часть тела внешнего мультиплекса должна быть прикреплением. Внутренний multipart содержит части текста и html тела.

Смежные вопросы