我正在尝试借助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 = "tests@test.com"
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("tests@test.com"))
message.setRecipients(Message.RecipientType.TO, "suraj@xxxx.com")
message.setSubject("test message")
message.setText("bodyText","text/html;charset=utf-8")
message.setContent(multipart,"text/html;charset=utf-8")
Transport.send(message)
我只希望发件人在单个窗口中接收附件。
答案 0 :(得分:1)
很多事情错了...
在调用setText之后调用setContent只会覆盖使用setText完成的操作。 setText方法只是内部调用setContent的一种便捷方法。
使用Multipart对象调用setContent并告诉其使用MIME类型“ text / html”意味着它毕竟不是多部分对象。
您需要创建MimeMultipart对象,并向其中添加两个MimeBodyPart对象,第一个包含主体文本,第二个包含附件。然后将MimeMultipart对象设置为消息的内容。
有关示例,请参见JavaMail FAQ和JavaMail sample programs。