首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java发送注意-邮件不能正常工作

用Java发送注意-邮件不能正常工作
EN

Stack Overflow用户
提问于 2016-07-07 08:47:56
回答 1查看 1.2K关注 0票数 0

我试着发送一封带有注意力的电子邮件。邮件的正文是正确的,但注意是空的。攻击的规模正在显现。那怎么了?

代码语言:javascript
复制
    // Create the message part
    BodyPart messageBodyPart = new MimeBodyPart();

    // Now set the actual message
    messageBodyPart.setText(
            "Prozess vom " + new SimpleDateFormat("dd.MM.yyyy").format(new Date()) + " erfolgreich beendet");

    // Create a multipar message
    Multipart multipart = new MimeMultipart();


    // Part two is attachment
    BodyPart attachement = new MimeBodyPart();
    File fi = new File("C:" + File.separator + "Logdatei_Auto" + File.separator + "logdatei.txt");
    String filename = fi.getAbsolutePath();
    String name = fi.getName();
    javax.activation.DataSource source = new FileDataSource(filename);
    attachement.setDataHandler(new DataHandler(source));
    attachement.setFileName(name);
    multipart.addBodyPart(messageBodyPart);
    multipart.addBodyPart(attachement);

    // Send the complete message parts
    message.setContent(multipart);


    // Send message
    Transport.send(message);

更新

最后,它与以下代码一起工作:

代码语言:javascript
复制
File filename = new File("logdatei.pdf");


    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.host", SMTP_HOST_NAME);
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");

    Authenticator auth = new SMTPAuthenticator();
    Session mailSession = Session.getDefaultInstance(props, auth);
    // Create a default MimeMessage object.
    // Create a default MimeMessage object.
     try {
            MimeMessage message = new MimeMessage(mailSession);
            message.setFrom(new InternetAddress("*******"));
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("*******"));
            message.setSubject("Test");
            message.setSentDate(new Date());

            //
            // Set the email message text.
            //
            MimeBodyPart messagePart = new MimeBodyPart();
            messagePart.setText("Blah...");

            //
            // Set the email attachment file
            //
            MimeBodyPart attachmentPart = new MimeBodyPart();
            FileDataSource fileDataSource = new FileDataSource(filename) {
                @Override
                public String getContentType() {
                    return "application/octet-stream";
                }
            };
            attachmentPart.setDataHandler(new DataHandler(fileDataSource));
            attachmentPart.setFileName(filename.getName());

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messagePart);
            multipart.addBodyPart(attachmentPart);

            message.setContent(multipart);

            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

谢谢@所有

EN

回答 1

Stack Overflow用户

发布于 2016-07-07 09:04:40

试试下面的代码

代码语言:javascript
复制
MimeMultipart multipart = new MimeMultipart("mixed");
MimeBodyPart attachment = new MimeBodyPart();
attachment.setDisposition(Part.ATTACHMENT);
attachment.setDataHandler(new DataHandler(new FileDataSource(file)));
attachment.setFileName(file.getName());
multipart .addBodyPart(attachment);
message.setContent(multipart);

我觉得你失踪了

代码语言:javascript
复制
attachment.setDisposition(Part.ATTACHMENT);

因此,基本上,添加一个Disposition作为Part.ATTACHMENT表示这个部分应该作为一个附件来表示。

更新

以下代码以附件形式发送电子邮件:

代码语言:javascript
复制
        try
        {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("fromEmailAddress"));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("toEmailAddress"));
            message.setSubject("message with attachment");
            message.setContent("Hi", "text/plain; charset=UTF-8");


            File file = File.createTempFile("test", ".csv");
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8").newEncoder());
            PrintWriter writer = new PrintWriter(outputStreamWriter);
            writer.println("\u20ac;");
            writer.println("€");
            writer.flush();

            MimeMultipart rootMultipart = new MimeMultipart("mixed");
            MimeBodyPart bodyPart = new MimeBodyPart();
            bodyPart.setDisposition(Part.ATTACHMENT);
            bodyPart.setDataHandler(new DataHandler(new FileDataSource(file)));
            bodyPart.setFileName(file.getName());
            rootMultipart.addBodyPart(bodyPart);
            message.setContent(rootMultipart);

            Transport.send(message);

            writer.close();
            file.delete();
            System.out.println("Message sent successfully!");

        }
        catch (MessagingException e)
        {
            throw new RuntimeException(e);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38241133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档