我试图在javamail API的帮助下发送两个附件,但发件人正在接收附件作为转发邮件传递给发件人的邮件。此外,我无法在邮件中看到正文。我正在发送到Outlook电子邮件客户端。它的附件在同一邮件中作为单独的邮件发送,当我点击邮件中的单独邮件时,它会向我显示附件。就像我在同一邮件中打开了另一封邮件。任何人都可以检查我做错了什么
下面是代码
deltaDf.coalesce(1)
.write.mode("overwrite")
.format("com.databricks.spark.csv")
.option("header", "true")
.save("/user/test/test1/Deltafile/")
val deltahdfsname = fs.globStatus(new Path("/user/test/test1/Deltafile/part*"))(0).getPath().getName()
val deltapath = new Path(fs.getName() + "/user/test/test1/Deltafile/" + deltahdfsname)
val deltastream = fs.open(deltapath)
val deltafileName = "delta.csv"
val bodyText = "Hi All, <br> </br> Attached are the Concur Delta File and Exception Report <br> </br> please take the neccassory Action."
val from = "[email protected]"
val smtpHost = "xmail.xxxxx.com"
val properties = System.getProperties
properties.put("mail.smtp.host",smtpHost)
properties.put("mail.from", from)
properties.put("mail.smtp.auth", "false")
properties.put("mail.smtp.port", "25")
properties.put("mail.smtp.starttls.enable", "true")
val deltaBodyPart = new MimeBodyPart()
deltaBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(deltastream, "text/csv")))
deltaBodyPart.setFileName(deltafileName)
val multipart = new MimeMultipart()
multipart.addBodyPart(deltaBodyPart)
//multipart.addBodyPart(ExceptionBodyPart)
val session = Session.getInstance(properties)
var message = new MimeMessage(session)
message.setFrom(new InternetAddress("[email protected]"))
message.setRecipients(Message.RecipientType.TO, "[email protected]")
message.setSubject("test message")
message.setText("bodyText","text/html;charset=utf-8")
message.setContent(multipart,"text/html;charset=utf-8")
Transport.send(message)
我只是希望发件人应该在一个窗口中收到附件。
这么多错了......
调用setText后调用setContent只会覆盖setText所做的事情。 setText方法只是一种内部调用setContent的便捷方法。
使用Multipart对象调用setContent并告诉它使用MIME类型“text / html”意味着它毕竟不是多部分对象。
您需要创建MimeMultipart对象并向其添加两个MimeBodyPart对象,第一个包含主体文本,第二个包含附件。然后将MimeMultipart对象设置为消息的内容。
有关示例,请参阅JavaMail FAQ和JavaMail sample programs。