【问题标题】:Getting java.lang.StringIndexOutOfBoundsException while sending mail发送邮件时获取 java.lang.StringIndexOutOfBoundsException
【发布时间】:2018-02-14 12:46:40
【问题描述】:

我在尝试使用 JavaMail 1.6.0 版通过 gmail 发送电子邮件时收到 stringOutofBoundexception

调试详情如下:

DEBUG: setDebug: JavaMail version 1.6.0
DEBUG: getProvider() returning 
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]

错误详情:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常: 字符串索引超出范围:-1 在 java.lang.String.substring(未知 来源)在 com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:289) 在 com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238) 在 com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2160) 在 com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:726) 在 javax.mail.Service.connect(Service.java:366) 在 sendEmail.main(sendEmail.java:50)

这是我的代码:

import java.util.Properties;

import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
public class sendEmail  extends Authenticator  
{  
    public static void main(String[] args) throws MessagingException{ 



String  d_email = "oracle.ossa.qa@gmail.com",
        d_uname = "oracle.ossa.qa@gmail.com",
        d_password = "mypass",
        d_host = "smtp.gmail.com",
        d_port  = "465", //465,587
        m_to = "oracle.ossa.qa@gmail.com",
        m_subject = "OPEN BUGS";
  String m_text = "text";

Properties props = new Properties();
props.put("mail.smtp.user", d_email);
props.put("mail.smtp.host", d_host);
props.put("mail.smtp.port", d_port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true");
//props.put("mail.verbose",true);

props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.proxy.host","http://www-proxy-hqdc.us.oracle.com");
props.put("mail.smtp.proxy.port","80");

//Authenticator auth = new Authenticator();
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication  getPasswordAuthentication() {
        return new PasswordAuthentication(d_email, "oracle@ossa");
    }
  });
session.setDebug(true);

MimeMessage msg = new MimeMessage(session);

try {
    msg.setSubject(m_subject);
    msg.setFrom(new InternetAddress(d_email));
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));

Transport transport = session.getTransport("smtp");
        transport.connect(d_host, Integer.valueOf(d_port), d_uname, d_password);
        transport.send(msg, msg.getAllRecipients());
        transport.close();

    } catch (AddressException e) {
        e.printStackTrace();
        //return false;
    } catch (MessagingException e) {
        e.printStackTrace();
       // return false;
    }
 }
}

【问题讨论】:

  • 请检查您的mail.smtp.proxy.host 属性。由于这是一个 smtp 代理,它可能不应该通过 http 进行路由。但我也检查了SocketFetcher 的源代码,每当: 位于代理主机内部时似乎就会出现问题。

标签: java jakarta-mail


【解决方案1】:

根据https://javaee.github.io/javamail/docs/api/com/sun/mail/smtp/package-summary.htmlmail.smtp.proxy.host 只是一个主机名,不需要指定协议(例如http://)。

【讨论】:

  • 我尝试不提供 http://,但是我遇到了以下错误 javax.mail.MessagingException: 无法连接到 SMTP 主机:smtp.gmail.com,端口:80,响应:-1
  • 等一下,您是否尝试为 SMTP 使用 WEB 代理?
  • 我使用了 587 端口它的 wrking
猜你喜欢
  • 1970-01-01
  • 2017-06-11
  • 2016-06-05
  • 2018-06-07
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
相关资源
最近更新 更多