Sending email using attachment using javamail API

I am trying to send an email with an attachment file in Java.

When I send an email without an attachment, I receive an email, but when I add an attachment, I receive nothing and I do not receive any error messages.

This is the code I'm using:

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(" zouhaier.mhamdi@gmail.com ")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(" zouhaier.mhamdi@gmail.com ")); 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(); } } 

How can i fix this?

+6
source share
4 answers
  • Disable antivirus

because you have a warning like this

warning message form antivirus

Try this code ... It will help you ....

 public class SendMail { public SendMail() throws MessagingException { String host = "smtp.gmail.com"; String Password = "............"; String from = " XXXXXXXXXX@gmail.com "; String toAddress = " YYYYYYYYYYYYY@gmail.com "; 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 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); } } } 
+12
source

See the JavaMail FAQ for debugging tips . In particular, protocol tracing will tell you more about what happens in each case. While you are there, you will find tips on using GMail.

If the only difference is just adding an attachment, it seems unlikely that this is an authentication problem. You may get an exception that you do not notice, because your dispatch method is declared in order to throw a MessagingException.

+1
source

You can try something like:

 File f = new File(file); MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile(f); multipart.addBodyPart(attachmentPart); 

Read more about: Send email via SMTP using attachments, plain / text and text / hml

+1
source

You can access gmail using your username and password. But gmail access will be denied.

Thus, you need to change the security level by going to the account settings, the password section and unzip the security settings of the verification code or lower the security level, depending on the old or latest gmail application.

If you want to send the attachment via gmail, referring to the local directory, you need to use the File object, which must be installed in the DataSource constructor class, as indicated in the program below. This will eliminate the "Access Denied" exception.

 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 = " mygmail@gmail.com "; 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(" dharmendrasundar@gmail.com ")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(" dharmendrasundar@gmail.com ")); 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); } } } 
+1
source

Source: https://habr.com/ru/post/947502/