Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何重用与JavaMail的连接以避免AuthenticationFailedException:登录尝试过多?_Java_Scala_Smtp_Jakarta Mail - Fatal编程技术网

如何重用与JavaMail的连接以避免AuthenticationFailedException:登录尝试过多?

如何重用与JavaMail的连接以避免AuthenticationFailedException:登录尝试过多?,java,scala,smtp,jakarta-mail,Java,Scala,Smtp,Jakarta Mail,在我当前的实现中,sendmail方法在一个循环中被多次调用,以向每个单独的电子邮件地址发送电子邮件。结果,成功发送了大约95封电子邮件,但应用程序失败,出现以下错误: javax.mail.AuthenticationFailedException:登录尝试次数过多, 请稍后再试 我应该如何更改sendmail方法来解决此问题 val EMAIL_FROM = "metricsEmail@gmail.com" def sendEmail(text: String, recipient: St

在我当前的实现中,
sendmail
方法在一个循环中被多次调用,以向每个单独的电子邮件地址发送电子邮件。结果,成功发送了大约95封电子邮件,但应用程序失败,出现以下错误:

javax.mail.AuthenticationFailedException:登录尝试次数过多, 请稍后再试

我应该如何更改
sendmail
方法来解决此问题

val EMAIL_FROM = "metricsEmail@gmail.com"

def sendEmail(text: String, recipient: String): Unit = {
    val properties = createProperties(HOST, PORT)
    val session: Session = Session.getInstance(properties)
    val message = createEmailMessage(EMAIL_FROM, properties, session, recipient, text)

    val transport: Transport = session.getTransport("smtp")
    transport.connect(EMAIL_FROM, PASSWORD)
    transport.sendMessage(message, message.getAllRecipients)
  }
UPD:按照注释中的建议重构代码后,我得到以下异常:

com.sun.mail.smtp.SMTPSendFailedException:421 4.7.0请稍后再试, 正在关闭连接。(邮件)


大概,
transport.connect(EMAIL\u FROM,PASSWORD)
只需执行一次,而不是每次发送电子邮件时。为此,您应该重构以从sendmail方法中删除属性的创建、会话和传输的获取以及传输的连接

大概,
transport.connect(EMAIL\u FROM,PASSWORD)
只需执行一次,而不是每次发送电子邮件。为此,您应该重构以从sendmail方法中删除属性的创建、会话和传输的获取以及传输的连接

我会提取会话和传输。@LuisMiguelMejíaSuárez你能举个例子吗?我会提取会话和传输。@LuisMiguelMejíaSuárez你能举个例子吗?我已经更新了问题。重构代码后,我得到的
SMTPSendFailedException:421 4.7.0请稍后重试,关闭连接。(邮件)
您是否搜索了SMTP错误421?一个可能的原因是超过了帐户限制。由于您之前的测试超过了登录尝试次数,您可能需要管理员重置电子邮件帐户?您可能在太短的时间内发送了太多的邮件,因此服务器认为您发送了垃圾邮件。您可能需要人为地降低发送速度。@BillShannon在Thread.sleep()中使用的合理值(毫秒)是多少?这完全取决于您的服务器。你可能需要进行实验,找出最有效的方法。你可能需要某种指数退避算法。我已经更新了这个问题。重构代码后,我得到的
SMTPSendFailedException:421 4.7.0请稍后重试,关闭连接。(邮件)
您是否搜索了SMTP错误421?一个可能的原因是超过了帐户限制。由于您之前的测试超过了登录尝试次数,您可能需要管理员重置电子邮件帐户?您可能在太短的时间内发送了太多的邮件,因此服务器认为您发送了垃圾邮件。您可能需要人为地降低发送速度。@BillShannon在Thread.sleep()中使用的合理值(毫秒)是多少?这完全取决于您的服务器。你可能需要进行实验,找出最有效的方法。您可能需要某种指数退避算法。
  val properties: Properties = System.getProperties
  properties.setProperty("mail.smtp.host", HOST)
  properties.setProperty("mail.smtp.port", PORT)
  properties.setProperty("mail.smtp.starttls.enable", "true")
  properties.setProperty("mail.smtp.auth", "true")

  val session: Session = Session.getDefaultInstance(properties)
  val transport: Transport = session.getTransport("smtp")
  transport.connect(DEFAULT_EMAIL_FROM, SENDER_PASSWORD)

    def sendEmail(text: String, recipient: String): Unit = {
        val message = createEmailMessage(EMAIL_FROM, properties, session, recipient, text)
        transport.sendMessage(message, message.getAllRecipients)
      }