【问题标题】:Java Mail sent repeated email when the email in To and Cc List收件人和抄送列表中的电子邮件时,Java Mail 重复发送电子邮件
【发布时间】:2015-12-24 02:23:38
【问题描述】:

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

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

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

【问题讨论】:

  • 您告诉它要发送给:和抄送:同一个人,所以它这样做了。您还发送了两次而不是一次,因此任何人“优化”它的机会都消失了。只需使用一次send(Message)。但是你问的没有意义。这也不是由于 JavaMail 而是由于邮件服务器。
  • 应用程序会向我发送两次电子邮件,但这正是您所说的。我的问题是这有什么问题?为什么要避免这种情况?

标签: java email jakarta-mail


【解决方案1】:

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

或者在这里只使用一次sendMessageSend Mail to multiple Recipients in java我不确定它是否会去重复,如果不是,那么在添加之前将字符串地址存储在Set(去重复)中。

【讨论】:

    【解决方案2】:

    收件人是否在收件人或抄送部分重复并不重要。邮件服务器应该注意过滤而不是发送重复的消息。为了实现这一点,请在代码中标记 2 点。

    1. 唯一的消息 ID
    2. 日期标题

    这些将帮助您避免重复。

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

    【讨论】:

      【解决方案3】:

      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));
      

      【讨论】:

      • 假设他已经到了这一步,否则他的消息不会有任何TO或CC收件人,
      【解决方案4】:

      对不起,我解决了这个问题:

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

      我不知道有一个函数:message.getAllrecipients(),因为我试图使用其他的编码。我想问题已经解决了。

      【讨论】:

      • 所以你在文档之前咨询了 StackOverflow?
      猜你喜欢
      • 2011-07-24
      • 1970-01-01
      • 2014-12-15
      • 2019-01-01
      • 2015-05-03
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多