【问题标题】:How to stop sending multiple mails to single MailId如何停止向单个电子邮件 ID 发送多封邮件
【发布时间】:2026-02-09 13:50:01
【问题描述】:

我正在尝试向用户发送电子邮件。我使用了 javax.mail.* 和 javax.mail.internet.* 包并成功发送了一封电子邮件,但问题是它为一个邮件 ID 发送了多封电子邮件。我怎样才能让它只发送一次?

我的代码:

public void sendEmail(){

     System.out.println("called "+j+" time"); 

     emailIDs.add(emailID);

     to = emailID;

     MimeMessage message = new MimeMessage(session1);

     // Set From: header field of the header.
     try {

         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.

         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field

         message.setSubject(notifyName[j]+" "+"Document Alert Mail!");

         // Send the actual HTML message, as big as you like

         message.setContent("<h1>document created on "+createdOn+" is coming to expire</h1>",
                            "text/html" );

         // Send message
         Transport.send(message);

         System.out.println("Message Sent Successfully....");
     }

     catch(Exception e){

         e.printStackTrace();
     }
 }

【问题讨论】:

  • 问题不太可能出在sendEmail 方法这里。调用它的代码呢?
  • 到第二个@Tetrinity,添加调试日志语句以查看您的方法被调用的频率。

标签: java email jakarta-ee jakarta-mail


【解决方案1】:

你应该在你的函数中提供参数。似乎您添加 emailID 元素的次数与调用 sendEmail() 函数的次数一样多。每次调用该函数时,您应该清理您的emailIDs,或者您只需向最后一个元素发送电子邮件。

这里我只发送一个收件人:

public void sendEmail(String emailID){

 System.out.println("called "+j+" time"); 

 emailIDs.add(emailID);

     to = emailID;

     MimeMessage message = new MimeMessage(session1);

     // Set From: header field of the header.
     try{

     message.setFrom(new InternetAddress(from));

     // Set To: header field of the header.

     message.addRecipient(Message.RecipientType.TO,
                              new InternetAddress(to));

     // Set Subject: header field

     message.setSubject(notifyName[j]+" "+"Document Alert Mail!");

     // Send the actual HTML message, as big as you like

     message.setContent("<h1>document created on "+createdOn+" is coming to expire</h1>",
                        "text/html" );

     // Send message
     Transport.send(message);

     System.out.println("Message Sent Successfully....");
     }

     catch(Exception e){

         e.printStackTrace();
     }
}

【讨论】: