0

我正在使用这个类发送邮件它可以工作但现在我想添加附件如何添加它请帮助如果你能

public static void sendMail(String subject, String body, String toEmail, String ccEmail, String fromMail)
                throws IOException {
            Random generator = new Random();
            int r = Math.abs(generator.nextInt());

            body = body.replaceAll("(\\r|\\n)", "");
            body = body.replaceAll("\"", "\\\\\"");
            body = body.replaceAll("&", "\\\\&");
            body = body.replaceAll("©", "\\\\©");
            //body = body.replaceAll("> <", ">\\\n<");

            if(CommonUtils.emptyString(fromMail))
                fromMail = "No Reply <iotasol@pcc.com>";
            else
                fromMail = "No Reply <"+fromMail+">";

            ProcessBuilder processBuilder = new ProcessBuilder(
                    ApplicationProperties.MAIL_SENDER_SH_PATH, CommonUtils.getEmptyStringForNull(subject), CommonUtils.getEmptyStringForNull(body),
                    toEmail, ccEmail, String.valueOf(r), fromMail);
            processBuilder.start();
        }
4

3 回答 3

0

从您的代码示例中,我可以看出您正在使用外部邮件程序发送电子邮件。您创建一个ProcessBuilder并调用一个操作系统工具来发送电子邮件。

我不会使用这个解决方案。首先,它取决于操作系统(在 Windows 上,您没有 mail 命令)。其次,这样做效率不高;因为您为此创建了外部流程(想象一下发送许多电子邮件)。

相反,请尝试在 java 中使用现有的邮件解决方案(您将需要:mail.jar 和 activation.jar)。有了它,您可以直接从您的应用程序发送电子邮件,而不依赖于外部工具。

虽然使用mail Java 库,您可以做任何您想做的事情,您也可以查看Jodd Email。这是一个小型但方便的 java 邮件库包装器,可以帮助您发送电子邮件和附件。正如您在“使用 fluent API的电子邮件”部分中看到的,您可以执行以下操作:

Email email = Email.create()
    .from("from@foo.org")
    .to("to@bar.com")
    .subject("test")
    .addText("Hello!")
    .addHtml(
        "<html><body><h1>Hey!</h1>" +
        "<img src='cid:c.png'><h2>Hay!</h2></body></html>")
    .embed(attachment().bytes(new File("d:\\c.png")))
    .attach(attachment().file("d:\\b.jpg"));

在此示例中,您可以看到附加文件的两种方式:嵌入它们以便它们出现在 HTML 内容中,或者常见的附加. 当然,您不必使用流畅的界面,它只是这个库的一个选项。

于 2013-03-01T08:13:43.067 回答
0
       MimeBodyPart messageBodyPart = new MimeBodyPart();
       File file = new File("somefile.txt");
       if (file.exists()) {
           DataSource source = new FileDataSource("somefile.txt");
           messageBodyPart.setDataHandler(new DataHandler(source));
           messageBodyPart.setFileName(file.getName());
           multipart.addBodyPart(messageBodyPart);
       }
于 2013-03-01T07:42:31.760 回答
0

如果您需要发送图像,作为一个想法:使其与 base64 内联。

附件取决于使用的库、使用的邮件服务器等。

于 2013-03-01T07:38:05.657 回答