spring JavaMail不向抄送收件人发送邮件[已关闭]

mhd8tkvw  于 2023-02-18  发布在  Spring
关注(0)|答案(2)|浏览(151)

4天前关闭。
截至12小时前,社区正在审查是否重新讨论这个问题。
Improve this question
在这里,我发现了一个疯狂的要求:不发送邮件给抄送收件人。收件人必须知道谁在抄送列表中,但抄送的收件人不应收到邮件。
我正在按照这个解决方案向每个人发送一封摘要通知邮件。抄送列表中的收件人可能是另一封通知邮件的收件人,以避免我按照这个解决方案发送垃圾邮件。
此处正在使用JavaMail。

JavaMailSender sender = javaMailSender();           
MimeMessagePreparator messagePreparator = mimeMessage -> {
    MimeMessageHelper mailMessage = new MimeMessageHelper(mimeMessage);
    mailMessage.setTo(recipients);
    if(ccRecipients.length > 0){
        mailMessage.setCc(ccRecipients);
    }
    if(bccRecipients.length > 0){
        mailMessage.setBcc(bccRecipients);
    }
    mailMessage.setReplyTo(from);
    mailMessage.setFrom(from);
    mailMessage.setText(body, isHtml);
    mailMessage.setSubject(subject);
};

sender.send(messagePreparator);
knpiaxh1

knpiaxh11#

使用getRecipients查找收件人类型,然后忽略CC。

njthzxwz

njthzxwz2#

答:Java邮件(javax或jakarta)不支持它。API隐藏了邮件头的格式。你告诉API谁是To:CC:BCC:收件人,并负责创建和处理电子邮件信封。
问:理论上可行吗?
A:也许吧......
如果我们看看管理互联网电子邮件的标准,我们会发现有一个标准(RFC 821)处理SMTP电子邮件传输,第二个标准(RFC 822)处理电子邮件的结构。在传输层,发件人发出一个带有单个发件人地址的“MAIL FROM”命令,并为每个收件人发出一个“RCPT TO”命令。
就RFC 821而言,电子邮件的标题是不透明的,因此,理论上,您可以使用SMTP将电子邮件发送到一组收件人,这些收件人与电子邮件的From:Sender:To:CC:BCC:等所暗示的收件人不同。
然而,一旦电子邮件到达邮件服务器,你就得听从服务器的摆布,把邮件送到用户的邮箱。它可以只根据RCPT命令来发送邮件,也可以解析电子邮件的标题来决定把邮件发送给谁。我怀疑后者 * 不符合规范 *,但这并不意味着它不会发生。如果它符合规范,远程电子邮件服务器将尊重您的意愿的可能性为零。
无论如何...这是由发送电子邮件的客户端来计算哪些地址包括为RCPT。您 * 可以 * 编写自己的客户端代码,将满足您的(broken 2)要求,但AFAIK的标准Java / Jakarta邮件提供商不会这样做。
1 -在您的情况下,如果您打算向抄送方发送不同的电子邮件,这可能会导致抄送方获得两个版本的电子邮件副本。
2 -正如我上面评论的,To:收件人会阅读CC:列表,并假设电子邮件已经发送给他们。如果你实际上没有发送CC,他们有权投诉。

相关问题