在java中将文件作为附件发送

我有一个java代码,我必须发送一个附件 ,它可能是.doc,.db或.file 。 因此,我使用以下代码,消息已成功传递,特定附件文件未发送和接收。

我的代码是:

import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class SendEmail { private String from = "example1@gmail.com"; private String to; private String subject; private String text; String filename = "hardWare_Dtls.file"; String host = "smtp.gmail.com"; public SendEmail(String from, String to, String subject, String text,String filename) { // System.out.println("From Adress inside constr"+from); this.from = from; this.to = to; this.subject = subject; this.text = text; this.filename=filename; } public void send() { Properties props = System.getProperties(); System.out.println("Email Options SendEmail"); props.put("mail.smtp.host", host); props.put("mail.smtp.user", from); props.put("mail.smtp.password", "123456"); props.put("mail.smtp.port", "587"); // 587 is the port number of yahoo // mail props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); Session mailSession = Session.getDefaultInstance(props, null); Message simpleMessage = new MimeMessage(mailSession); InternetAddress fromAddress = null; InternetAddress toAddress = null; try { fromAddress = new InternetAddress(from); toAddress = new InternetAddress(to); } catch (AddressException e) { // TODO Auto-generated catch block // e.printStackTrace(); System.out.println("Address Exception" + e.getMessage()); } try { System.out.println("From Address" + fromAddress); simpleMessage.setFrom(fromAddress); simpleMessage.setRecipient(RecipientType.TO, toAddress); System.out.println("To Address" + toAddress); simpleMessage.setSubject(subject); simpleMessage.setText(text); simpleMessage.setSentDate(new Date()); MimeBodyPart attachmentPart = new MimeBodyPart(); FileDataSource fileDataSource = new FileDataSource(filename) { @Override public String getContentType() { return "application/octet-stream"; } }; attachmentPart.setDataHandler(new DataHandler(fileDataSource)); attachmentPart.setFileName(filename); Multipart multipart = new MimeMultipart(); // multipart.addBodyPart(messagePart); multipart.addBodyPart(attachmentPart); // simpleMessage.setText(attachment); Transport transport = mailSession.getTransport("smtps"); transport.connect("smtp.gmail.com", "example1@gmail.com", "123456"); simpleMessage.saveChanges(); transport.sendMessage(simpleMessage, simpleMessage.getAllRecipients()); Transport.send(simpleMessage); transport.close(); // Transport.send(simpleMessage); } catch (MessagingException e) { // TODO Auto-generated catch block // e.printStackTrace(); System.out.println("Messagine Exception" + e.getMessage()); } } } 

在这段代码中我犯了什么错误。 如果使用Javacode发送带附件的邮件的任何其他代码,请发送给我。 提前致谢。

我在我的主类中使用此代码:

  String from = "example@gmail.com"; String to = "example@yahoo.com"; String subject = "Sample Text Message"; String message = "Sample Msg with File attachment"; String filename="hardWare_Dtls.file"; SendEmail sendMail = new SendEmail(from, to, subject, message,filename); sendMail.send(); 

你有几乎所有的部分,但你应该使用MimeMessage (而不仅仅是Message),并将其内容设置为你的Multipart。 我认为你实际上试图这样做,但你的代码不会编译,所以你注释掉了这一行:

  // simpleMessage.setText(attachment); 

而不是这样做:

 ((MimeMessage) simpleMessage).setContent(multipart); 

再次测试。 它应该工作。