【问题标题】:attaching pictures to an email being sent using java mail API将图片附加到使用 java 邮件 API 发送的电子邮件
【发布时间】:2013-12-29 22:07:37
【问题描述】:

我有一种方法可以使用 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();

}

【问题讨论】:

    标签: java api email


    【解决方案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);
      

    详情请见link

    【讨论】:

    • 你先生太棒了 :) 感谢您的帮助和有用的链接!
    猜你喜欢
    • 2016-11-30
    • 2023-03-22
    • 1970-01-01
    • 2016-09-20
    • 2016-07-30
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多