如何使用JavaMail将多个文件附加到电子邮件?

lak*_*hmi 33 java jakarta-mail

以下Java代码用于将文件附加到电子邮件.我想通过电子邮件发送多个文件附件.任何建议,将不胜感激.

public class SendMail {

    public SendMail() throws MessagingException {
        String host = "smtp.gmail.com";
        String Password = "mnmnn";
        String from = "xyz@gmail.com";
        String toAddress = "abc@gmail.com";
        String filename = "C:/Users/hp/Desktop/Write.txt";
        // 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's 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);
        }
    }
}` 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 50

好吧,自从我完成JavaMail工作以来已经有一段时间了,但看起来您可以多次重复此代码:

DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
Run Code Online (Sandbox Code Playgroud)

例如,您可以编写一个方法来执行此操作:

private static void addAttachment(Multipart multipart, String filename)
{
    DataSource source = new FileDataSource(filename);
    BodyPart messageBodyPart = new MimeBodyPart();        
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);
    multipart.addBodyPart(messageBodyPart);
}
Run Code Online (Sandbox Code Playgroud)

然后从您的主代码,只需调用:

addAttachment(multipart, "file1.txt");
addAttachment(multipart, "file2.txt");
Run Code Online (Sandbox Code Playgroud)

等等

  • 这似乎不起作用。它仅添加附加的最后一个文件(在这种情况下,电子邮件仅具有file2.txt) (3认同)

小智 6

    Multipart mp = new MimeMultipart();

        MimeBodyPart mbp1 = new MimeBodyPart();
        mbp1.setContent(body,"text/html");
        mp.addBodyPart(mbp1);

        if(filename!=null)
        {
            MimeBodyPart mbp2 = null;
            FileDataSource fds =null;
            for(int counter=0;counter<filename.length;counter++)
            {
                mbp2 = null;
                fds =null;
                mbp2=new MimeBodyPart();
                fds = new FileDataSource(filename[counter]);
                mbp2.setDataHandler(new DataHandler(fds));
                mbp2.setFileName(fds.getName());
                mp.addBodyPart(mbp2);
            }
        }
        msg.setContent(mp);
        msg.setSentDate(new Date());
        Transport.send(msg);
Run Code Online (Sandbox Code Playgroud)


小智 5

现在(使用JavaMail 1.4),事情更简单:

messageBodyPart.attachFile(File file)
Run Code Online (Sandbox Code Playgroud)

要么:

messageBodyPart.attachFile(String filePath)