2013-06-17 21 views
6

Próbuję wysłać wiadomość e-mail z załącznikiem w Javie.Wysyłanie wiadomości e-mail z załącznikiem za pomocą interfejsu API javamail

Kiedy wysyłam wiadomość e-mail bez załącznika, otrzymuję wiadomość e-mail, ale po dodaniu załącznika nic nie otrzymuję i nie otrzymuję komunikatów o błędach.

Jest to kod używam:

public void send() throws AddressException, MessagingException{ 
    //system properties 

Properties props = new Properties(); 
props.put("mail.smtp.localhost", "localhost"); 
props.put("mail.smtp.host",Configurations.getInstance().email_serverIp); 


/* 
* create some properties and get the default Session 
*/ 
session = Session.getDefaultInstance(props, null); 

//session 
Session session = Session.getInstance(props, null); 

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(); 
    generateCsvFile("/tmp/test.csv"); 
messageBodyPart = new MimeBodyPart(); 
String file = "/tmp/test.csv"; 
String fileName = "test.csv"; 
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"); 

} 

private static void generateCsvFile(String sFileName) 
{ 
    try 
    { 

    FileWriter writer = new FileWriter(sFileName); 

    writer.append("DisplayName"); 
    writer.append(','); 
    writer.append("Age"); 
    writer.append(','); 
    writer.append("YOUR NAME"); 
    writer.append(','); 

    writer.append('\n'); 
    writer.append("Zou"); 
    writer.append(','); 
    writer.append("26"); 
    writer.append(','); 
    writer.append("zouhaier"); 


    //generate whatever data you want 

    writer.flush(); 
    writer.close(); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

Jak mogę rozwiązać ten problem?

Odpowiedz

12
  1. wyłączyć Anti Virus

bo masz jakieś ostrzeżenie jak ten

warning message form antivirus

Spróbuj tego kodu ... to pomóc ....

public class SendMail { 
    public SendMail() throws MessagingException { 
     String host = "smtp.gmail.com"; 
     String Password = "............"; 
     String from = "[email protected]"; 
     String toAddress = "[email protected]"; 
     String filename = "C:/SendAttachment.java"; 
     // Get system properties 
     Properties props = System.getProperties(); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtps.auth", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     Session session = Session.getInstance(props, null); 

     MimeMessage message = new MimeMessage(session); 

     message.setFrom(new InternetAddress(from)); 

     message.setRecipients(Message.RecipientType.TO, toAddress); 

     message.setSubject("JavaMail Attachment"); 

     BodyPart messageBodyPart = new MimeBodyPart(); 

     messageBodyPart.setText("Here's the file"); 

     Multipart multipart = new MimeMultipart(); 

     multipart.addBodyPart(messageBodyPart); 

     messageBodyPart = new MimeBodyPart(); 

     DataSource source = new FileDataSource(filename); 

     messageBodyPart.setDataHandler(new DataHandler(source)); 

     messageBodyPart.setFileName(filename); 

     multipart.addBodyPart(messageBodyPart); 

     message.setContent(multipart); 

     try { 
      Transport tr = session.getTransport("smtps"); 
      tr.connect(host, from, Password); 
      tr.sendMessage(message, message.getAllRecipients()); 
      System.out.println("Mail Sent Successfully"); 
      tr.close(); 

     } catch (SendFailedException sfe) { 

      System.out.println(sfe); 
     } 
    } 
    public static void main(String args[]){ 
     try { 
      SendMail sm = new SendMail(); 
     } catch (MessagingException ex) { 
      Logger.getLogger(SendMail.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
1

Zobacz FAQ JavaMail dla debugging tips. W szczególności śledzenie protokołu powie Ci więcej o tym, co się dzieje w każdym przypadku. Znajdziesz tam również porady dotyczące korzystania z Gmaila.

Jeśli jedyną różnicą jest po prostu dodanie załącznika, wydaje się mało prawdopodobne, że jest to problem z uwierzytelnieniem. Może pojawić się wyjątek, którego nie dostrzegasz, ponieważ twoja metoda wysyłania deklaruje odrzucenie MessagingException.

1

Możesz uzyskać dostęp do Gmaila przy użyciu nazwy użytkownika i hasła. Ale dostęp będzie odmawiany przez konto Gmail.

Musisz zmienić poziom zabezpieczeń, przechodząc do ustawień konta, sekcji hasła i usunąć ustawienia zabezpieczeń kodu weryfikacyjnego lub obniżyć poziom zabezpieczeń w zależności od starej lub najnowszej aplikacji Gmaila.

Jeśli chcesz wysłać załącznik za pośrednictwem Gmaila, uzyskując dostęp do katalogu lokalnego, musisz użyć obiektu File, aby ustawić klasę konstruktora DataSource zgodnie z poniższym programem. Pozwoli to uniknąć wyjątku "Odmowa dostępu".

import java.io.File;  
import java.io.IOException;  
import java.util.Properties; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class EmailApp { 
    public static void main(String[] args)throws IOException { 
     final String username = "[email protected]"; 
     final String password = "mypassword"; 

     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("Dear Mail Crawler," + "\n\n No spam to my email, please!"); 
      message.setSubject("Testing Subject"); 
      message.setText("PFA"); 

      MimeBodyPart messageBodyPart = new MimeBodyPart(); 
      Multipart multipart = new MimeMultipart(); 
      messageBodyPart = new MimeBodyPart(); 

      String attachmentPath = "C:/TLS/logs/26-Mar-2015"; 
      String attachmentName = "LogResults.txt"; 

      File att = new File(new File(attachmentPath), attachmentName); 
      messageBodyPart.attachFile(att); 

      DataSource source = new FileDataSource(att); 
      messageBodyPart.setDataHandler(new DataHandler(source)); 
      messageBodyPart.setFileName(attachmentName); 
      multipart.addBodyPart(messageBodyPart); 
      message.setContent(multipart); 

      System.out.println("Sending"); 
      Transport.send(message); 
      Transport.send(message); 
      System.out.println("Done"); 
     } catch (MessagingException e) { 
      throw new RuntimeException(e); 
     } 
    } 
}