2013-06-17 37 views
6

Tôi đang cố gắng gửi email có tệp đính kèm trong Java.Gửi email có tệp đính kèm bằng cách sử dụng javamail API

Khi tôi gửi email mà không có tệp đính kèm, tôi nhận được email, nhưng khi tôi thêm tệp đính kèm, tôi không nhận được bất kỳ thứ gì và tôi không nhận được bất kỳ thông báo lỗi nào.

này được mã Tôi đang sử dụng:

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(); 
    } 
} 

Làm thế nào tôi có thể sửa chữa điều này?

Trả lời

12
  1. Disable Anti Virus của bạn

vì bạn có một số cảnh báo như

này

warning message form antivirus

Hãy thử mã này ... Nó giúp bạn ....

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

Xem Câu hỏi thường gặp về JavaMail cho debugging tips. Đặc biệt, theo dõi giao thức sẽ cho bạn biết thêm về những gì đang diễn ra trong mỗi trường hợp. Trong khi bạn ở đó, bạn sẽ tìm thấy các mẹo để sử dụng Gmail.

Nếu khác biệt duy nhất thực sự chỉ là việc bổ sung phần đính kèm, có vẻ như đó không phải là vấn đề xác thực. Bạn có thể nhận được một ngoại lệ mà bạn không nhận thấy vì phương thức gửi của bạn được khai báo để ném MessageException.

1

Bạn có thể truy cập vào gmail bằng cách sử dụng tên đăng nhập và mật khẩu. Nhưng quyền truy cập sẽ bị từ chối bởi tài khoản gmail. Vì vậy, bạn phải thay đổi mức độ bảo mật bằng cách chuyển đến cài đặt tài khoản, phần mật khẩu và hủy cài đặt bảo mật mã xác minh hoặc giảm mức độ bảo mật của bạn tùy thuộc vào ứng dụng gmail cũ hoặc mới nhất.

Nếu bạn muốn gửi tệp đính kèm qua gmail bằng cách truy cập thư mục cục bộ, thì bạn cần sử dụng đối tượng Tệp được đặt thành lớp trình tạo DataSource như được hướng dẫn trong chương trình bên dưới. Điều này sẽ tránh ngoại lệ "Truy cập bị từ chối".

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]m"; 
     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); 
     } 
    } 
} 
Các vấn đề liên quan