Java 当邮件在收件人和抄送列表中时,邮件发送了重复的邮件

Java Mail sent repeated email when the email in To and Cc List

我发现当我的电子邮件地址同时在 TO 列表和 CC 列表中时,我的应用程序会向我发送两次电子邮件。

如何控制邮件只发送一次到同一个邮箱,但地址在TOCC列表中?

transport.connect();
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.CC));
transport.close();

您可以在将邮件发送到 CC 之前编写一行代码来检查 TO 是否不是 CC。

或者只使用 sendMessage 一次,如下所示: Send Mail to multiple Recipients in java 我不确定它是否会删除重复数据,如果不会,则将字符串地址存储在 Set 中(在添加之前删除重复项。

代码在 java 中发送邮件 并从属性文件调用电子邮件。

Properties prop = new Properties(); 
InputStream input   = SentmailAttachFile.class.getResourceAsStream("/Sendmail.properties");
                prop.load(input);

String receiver  = prop.getProperty("MAILADDRESS");
String mailCC        = prop.getProperty("MAILCC"); 

Properties props = new Properties();
    props.put("mail.smtp.host" , host);
    props.put("mail.smtp.auth" , "true" );
    props.put("mail.transport.protocol", "smtp");
    Session ss     = Session.getInstance(props,null);
    MimeMessage ms = new MimeMessage(ss);
    ms.addRecipient(Message.RecipientType.TO,new InternetAddress(receiver));
    ms.addRecipient(Message.RecipientType.CC, new InternetAddress(mailCC));

抱歉,我通过以下方式解决了这个问题:

    transport.connect();
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();

我不知道有一个功能:message.getAllrecipients() 因为我试图使用其他人的编码。我觉得问题已经解决了。

如果您的收件人在 TO 或 CC 部分重复,应该无关紧要。邮件服务器应注意过滤而不发送重复邮件。为了实现这一点,请在您的代码中标记 2 点。

  1. 独一无二message-ID
  2. 日期Header

这些将帮助您避免重复。

mimeMessage.setSentDate(new Date()); // Date header
mimeMessage.saveChanges();           // If no unique message-ID is set, then this will set it for you