将图片附加到使用java mail API发送的电子邮件中

时间:2013-12-11 18:51:17

标签: java api email

我有一个方法,我用它来发送使用java的电子邮件。我想知道如何将图片附加到电子邮件的顶部?我尝试使用MimeMessageParts或其他东西,我无法让它工作?我希望能够将BufferedImage作为参数传递给方法,并将其附加到顶部..任何帮助将不胜感激:)

public static void Send(final String username, final String password, 
    String recipientEmail, String ccEmail, String title, String message) 
    throws AddressException, MessagingException 
{

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

// Get a Properties object
Properties props = System.getProperties();
props.setProperty("mail.smtps.host", "smtp.gmail.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.setProperty("mail.smtps.auth", "true");


props.put("mail.smtps.quitwait", "false");

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

// -- Create a new message --
final MimeMessage msg = new MimeMessage(session);

// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress(username + "@gmail.com"));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false));

if (ccEmail.length() > 0) {
    msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false));
}

msg.setSubject(title);
msg.setText(message, "utf-8");
msg.setSentDate(new Date());

SMTPTransport t = (SMTPTransport)session.getTransport("smtps");

t.connect("smtp.gmail.com", username, password);
t.sendMessage(msg, msg.getAllRecipients());      
t.close();

}

1 个答案:

答案 0 :(得分:1)

  1. 对于附件,您需要创建单独的MimeBodyPart,以下是示例代码

    MimeBodyPart attachmentPart = new MimeBodyPart();
    FileDataSource fileDataSource = new FileDataSource(filename) {
      @Override
     public String getContentType() {
          return "application/octet-stream";
            }
    };
    attachmentPart.setDataHandler(new DataHandler(fileDataSource));
    
  2. 对于邮件文本,您需要另一个MimeBodyPart

    MimeBodyPart messagePart = new MimeBodyPart();
    messagePart.setText(bodyText);
    
  3. 将这两个MimeBodyPart合并到Multipart

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messagePart);
    multipart.addBodyPart(attachmentPart);
    
  4. 最后,发送电子邮件

     ...........
     final MimeMessage msg = new MimeMessage(session); 
     msg.setContent(multipart);
     Transport.send(msg);
    
  5. 有关详细信息,请参阅此link