2013-04-20 39 views
28

Próbuję wysyłać wiadomości e-mail przy użyciu java i g mail. Przechowuję pliki w chmurze i przechowywane pliki, które chcę wysłać jako załącznik do mojej poczty.Wysyłanie załącznika wiadomości e-mail przy użyciu języka Java

Powinno to dodać pliki do tej wiadomości, a nie do linków do tych plików.

Jak mogę wysyłać takie załączniki?

+0

Musisz być w stanie wyciągnąć pliki w dół z chmury w kodzie. Następnie wystarczy podłączyć je –

+0

Próbka http://www.tutorialspoint.com/javamail_api/javamail_api_send_email_with_attachment.htm –

+0

pomocą tego API: https://sourceforge.net/projects/easymail4j/ –

Odpowiedz

43

kod działa, użyłem Poczta Java 1.4.7 jar

import java.util.Properties; 
import javax.activation.*; 
import javax.mail.*; 

public class MailProjectClass { 

public static void main(String[] args) { 

    final String username = "[email protected]"; 
    final String password = "your.password"; 

    Properties props = new Properties(); 
    props.put("mail.smtp.auth", true); 
    props.put("mail.smtp.starttls.enable", true); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.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("[email protected]")); 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("[email protected]")); 
     message.setSubject("Testing Subject"); 
     message.setText("PFA"); 

     MimeBodyPart messageBodyPart = new MimeBodyPart(); 

     Multipart multipart = new MimeMultipart(); 

     messageBodyPart = new MimeBodyPart(); 
     String file = "path of file to be attached"; 
     String fileName = "attachmentName"; 
     DataSource source = new FileDataSource(file); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     messageBodyPart.setFileName(fileName); 
     multipart.addBodyPart(messageBodyPart); 

     message.setContent(multipart); 

     System.out.println("Sending"); 

     Transport.send(message); 

     System.out.println("Done"); 

    } catch (MessagingException e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

Podniesie Connection Timeout wyjątek –

+0

mam użył twojej klasy, ale daje błąd w następujący sposób: "530 5.7.0 Najpierw musisz wydać polecenie STARTTLS pa5sm839428pdb.28 - gsmtp" @NINCOMPOOP –

+0

Spróbuj dodać: 'props.put (" mail.smtp.EnableSSL.enable " , "true"); ' – NINCOMPOOP

0

Korzystanie Spring Framework, można dodać wiele załączników:

package com.mkyong.common; 


import javax.mail.MessagingException; 
import javax.mail.internet.MimeMessage; 

import org.springframework.core.io.FileSystemResource; 
import org.springframework.mail.MailParseException; 
import org.springframework.mail.SimpleMailMessage; 
import org.springframework.mail.javamail.JavaMailSender; 
import org.springframework.mail.javamail.MimeMessageHelper; 

public class MailMail 
{ 
    private JavaMailSender mailSender; 
    private SimpleMailMessage simpleMailMessage; 

    public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) { 
     this.simpleMailMessage = simpleMailMessage; 
    } 

    public void setMailSender(JavaMailSender mailSender) { 
     this.mailSender = mailSender; 
    } 

    public void sendMail(String dear, String content) { 

     MimeMessage message = mailSender.createMimeMessage(); 

     try{ 
     MimeMessageHelper helper = new MimeMessageHelper(message, true); 

     helper.setFrom(simpleMailMessage.getFrom()); 
     helper.setTo(simpleMailMessage.getTo()); 
     helper.setSubject(simpleMailMessage.getSubject()); 
     helper.setText(String.format(
      simpleMailMessage.getText(), dear, content)); 

     FileSystemResource file = new FileSystemResource("/home/abdennour/Documents/cv.pdf"); 
     helper.addAttachment(file.getFilename(), file); 

     }catch (MessagingException e) { 
     throw new MailParseException(e); 
     } 
     mailSender.send(message); 
     } 
} 

Aby dowiedzieć się, jak skonfigurować swój projekt do czynienia z ten kod, kompletny odczyt this tutorial.

11

Dla U nwnow powód, zaakceptowana odpowiedź działa częściowo, gdy wysyłam wiadomość e-mail na mój adres gmail. Mam załącznik, ale nie tekst wiadomości e-mail.

Jeśli chcesz zarówno przywiązanie i tekst spróbować tego na podstawie zaakceptowanej odpowiedzi:

Properties props = new java.util.Properties(); 
    props.put("mail.smtp.host", "yourHost"); 
    props.put("mail.smtp.port", "yourHostPort"); 
    props.put("mail.smtp.auth", "true");    
    props.put("mail.smtp.starttls.enable", "true"); 


    // Session session = Session.getDefaultInstance(props, null); 
    Session session = Session.getInstance(props, 
       new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication("user", "password"); 
       } 
       }); 


    Message msg = new MimeMessage(session); 
    try { 
     msg.setFrom(new InternetAddress(mailFrom)); 
     msg.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo)); 
     msg.setSubject("your subject"); 

     Multipart multipart = new MimeMultipart(); 

     MimeBodyPart textBodyPart = new MimeBodyPart(); 
     textBodyPart.setText("your text"); 

     MimeBodyPart attachmentBodyPart= new MimeBodyPart(); 
     DataSource source = new FileDataSource(attachementPath); // ex : "C:\\test.pdf" 
     attachmentBodyPart.setDataHandler(new DataHandler(source)); 
     attachmentBodyPart.setFileName(fileName); // ex : "test.pdf" 

     multipart.addBodyPart(textBodyPart); // add the text part 
     multipart.addBodyPart(attachmentBodyPart); // add the attachement part 

     msg.setContent(multipart); 


     Transport.send(msg); 
    } catch (MessagingException e) { 
     LOGGER.log(Level.SEVERE,"Error while sending email",e); 
    } 
+1

Ta modyfikacja zadziałała dla mnie. Poprawnie otrzymałem załącznik, ale nie otrzymałem żadnego tekstu wiadomości e-mail. Z kodem dokładnie takim, jak @amdev, otrzymałem e-mail z tekstem głównym i załącznikiem. Dzięki! – snowmanjack

+0

zgadzam się z powyższym komentarzem, to powinna być zaakceptowana odpowiedź! – roz