Enviando e-mail com anexo

JavaMail API fornece classes para enviar o e-mail junto com o anexo respeitando as políticas de envio de e-mail, seus protocolos e o formato da mensagem.

O Exemplo abaixo mostra como enviar um e-mail com um arquivo em anexo.

import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class sendfile 
{

    public static void main(String[] args) 
    {
  if (args.length != 5
  {
      System.out.println("usage: java sendfile <to> <from> <smtp> <file>");
      System.exit(1);
  }

  String to = args[0];
  String from = args[1];
  String host = args[2];
  String filename = args[3];
  String msgText1 = "Enviando arquivo.\n";
  String subject = "Enviando arquivo";
  
  // cria algumas propriedades e obtem uma sessao padrao
  Properties props = System.getProperties();
  props.put("mail.smtp.host", host);
  
  Session session = Session.getInstance(props, null);

  try 
  {
      // cria a mensagem
      MimeMessage msg = new MimeMessage(session);
      msg.setFrom(new InternetAddress(from));
      InternetAddress[] address = {new InternetAddress(to)};
      msg.setRecipients(Message.RecipientType.TO, address);
      msg.setSubject(subject);

      // cria a primeira parte da mensagem
      MimeBodyPart mbp1 = new MimeBodyPart();
      mbp1.setText(msgText1);

      // cria a segunda parte da mensage
      MimeBodyPart mbp2 = new MimeBodyPart();

            // anexa o arquivo na mensagem
         FileDataSource fds = new FileDataSource(filename);
      mbp2.setDataHandler(new DataHandler(fds));
      mbp2.setFileName(fds.getName());

      // cria a Multipart
      Multipart mp = new MimeMultipart();
      mp.addBodyPart(mbp1);
      mp.addBodyPart(mbp2);

      // adiciona a Multipart na mensagem
      msg.setContent(mp);

      // configura a data: cabecalho
      msg.setSentDate(new Date());
      
      // envia a mensagem
      Transport.send(msg);
      
  
  catch (MessagingException mex) 
  {
      mex.printStackTrace();
      Exception ex = null;
      if ((ex = mex.getNextException()) != null) {
    ex.printStackTrace();
      }
  }
    }