android-使用 javamail 连接 SMTP 时的错误

问题描述

使用 javamail 连接 SMTP 时的错误

这是我发送一个邮件使用的代码:

public String get_subject() {
        return _subject;
    }
    public void set_subject(String _subject) {
        this._subject = _subject;
    }
    public Mail() {
        _host = "mail.messagingengine.com";
    _port = "587";
        _sport = "587";
        _user = ""; // username
        _pass = ""; // password
        _from = ""; // email sent from
        _subject = ""; // email subject
        _body = ""; // email body
        _debuggable = false; // debug mode on or off - default off
        _auth = true; // smtp authentication - default on
        _multipart = new MimeMultipart();
        // There is something wrong with MailCap, javamail can not find a
        // handler for the multipart/mixed part, so this bit needs to be added.
        MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
        CommandMap.setDefaultCommandMap(mc);
    }
    public Mail(String user, String pass) {
        this();
        _user = user;
        _pass = pass;
    }
    public boolean send() throws Exception {
        Properties props = _setProperties();
        if (!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("")
                && !_body.equals("")) {
            Session session = Session.getInstance(props, this);
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(_from));
            InternetAddress[] addressTo = new InternetAddress[_to.length];
            for (int i = 0; i < _to.length; i++) {
                addressTo[i] = new InternetAddress(_to[i]);
            }
            msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
            msg.setSubject(_subject);
            msg.setSentDate(new Date());
            // setup message body
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(_body);
            _multipart.addBodyPart(messageBodyPart);
            // Put parts in message
            msg.setContent(_multipart);
            Transport.send(msg);
            return true;
        } else {
            return false;
        }
    }
    public void addAttachment(String filename) throws Exception {
        BodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(filename);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(filename);

        _multipart.addBodyPart(messageBodyPart);
    }
    @Override
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(_user, _pass);
    }
    private Properties _setProperties() {
        Properties props = new Properties();

        props.put("mail.messagingengine.com", _host);
        // mail.messagingengine.com

        if (_debuggable) {
            props.put("mail.debug", "true");
        }
        if (_auth) {
            props.put("mail.smtp.auth", "true");
        }
        props.put("mail.smtp.port", _port);
        props.put("mail.smtp.socketFactory.port", _sport);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        return props;
    }
    // the getters and setters
    public String getBody() {
        return _body;
    }
    public void setBody(String _body) {
        this._body = _body;
    }
    // more of the getters and setters …..
}

在命令 transport.send(msg);后出现的错误:

javax.mail.MessagingException: Could not connect to SMTP host: mail.messagingengine.com, port: 587;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x1f81518: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4025bc93:0x00000000)

解决方案

下面的代码希望能给你帮助:

public class Mail extends javax.mail.Authenticator {
  private String _user;
  private String _pass;
  private String[] _to;
  public String[] get_to() {
    return _to;
}
public void set_to(String[] _to) {
    this._to = _to;
}
public String get_from() {
    return _from;
}
public void set_from(String _from) {
    this._from = _from;
}
public String get_subject() {
    return _subject;
}
public void set_subject(String _subject) {
    this._subject = _subject;
}
private String _from;
  private String _port;
  private String _sport;
  private String _host;
  private String _subject;
  private String _body;
  private boolean _auth;
  private boolean _debuggable;
  private Multipart _multipart;
  public Mail() {
    _host = "mail.messagingengine.com"; // default smtp server
    _port = "465"; // default smtp port
    _sport = "465"; // default socketfactory port
    _user = ""; // username
    _pass = ""; // password
    _from = ""; // email sent from
    _subject = ""; // email subject
    _body = ""; // email body
    _debuggable = false; // debug mode on or off - default off
    _auth = true; // smtp authentication - default on
    _multipart = new MimeMultipart();
    // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
    CommandMap.setDefaultCommandMap(mc);
  }
  public Mail(String user, String pass) {
    this();
    _user = user;
    _pass = pass;
  }
  public boolean send() throws Exception {
    Properties props = _setProperties(); 

    if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {
      Session session = Session.getInstance(props, this);
      MimeMessage msg = new MimeMessage(session);
      msg.setFrom(new InternetAddress(_from));
      InternetAddress[] addressTo = new InternetAddress[_to.length];
      for (int i = 0; i < _to.length; i++) {
        addressTo[i] = new InternetAddress(_to[i]);
      }
      msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
      msg.setSubject(_subject);
      msg.setSentDate(new Date());
       // setup message body
      BodyPart messageBodyPart = new MimeBodyPart();
      messageBodyPart.setText(_body);
      _multipart.addBodyPart(messageBodyPart);
       // Put parts in message
      msg.setContent(_multipart);
      // send email
      Transport.send(msg);
       return true;
    } else {
      return false;
    }
  }
  public void addAttachment(String filename) throws Exception {
    BodyPart messageBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(filename);
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);
    _multipart.addBodyPart(messageBodyPart);
  }
  @Override
  public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(_user, _pass);
  }
  private Properties _setProperties() {
    Properties props = new Properties();
    props.put("mail.smtp.host", _host);
    if(_debuggable) {
      props.put("mail.debug", "true");
    }
    if(_auth) {
      props.put("mail.smtp.auth", "true");
    }
    props.put("mail.smtp.port", _port);
    props.put("mail.smtp.socketFactory.port", _sport);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");
    return props;
  }
  // the getters and setters
  public String getBody() {
    return _body;
  }
   public void setBody(String _body) {
    this._body = _body;
  }
  // more of the getters and setters …..
}

我想错误是在:

_port = "465"; // default smtp port
_sport = "465"; // default socketfactory port

和这一行:

props.put("mail.messagingengine.com", _host);
时间: 2024-12-30 20:30:45

android-使用 javamail 连接 SMTP 时的错误的相关文章

win8系统连接宽带时提示错误813的怎么解决

win8系统连接宽带时提示错误813的怎么解决   故障提示: 错误813:建立了前一个宽带连接的情况下,你在使用相同的设备或端口尝试建立另一个宽带连接.请断开前一个连接,然后重新建立连接. 故障原因: 其他宽带连接已连接上("图1");系统原因等. [解决方法]: 1.重新启动电脑(一般能解决); 2. 重建宽带连接; 3. 重装操作系统. 错误813的流程图:

win8系统连接宽带时提示错误813的故障原因及解决方法

  win8系统连接宽带时提示"错误813:建立了前一个宽带连接的情况下,你在使用相同的设备或端口尝试建立另一个宽带连接.请断开前一个连接,然后重新建立连接.",具体问题现象如下图所示: 故障原因: 其他宽带连接已连接上或系统原因等. 解决方法: 1.重新启动电脑(一般能解决); 2. 重建宽带连接; 3. 重装操作系统. 错误813的流程图: 上述就是对win8系统连接宽带时提示错误813的故障原因及解决方法的介绍,连接宽带过程中需要注意提示的错误代码,然后根据此代码提示解决问题.

win7连接VPN时提示800错误怎么办 连接VPN时提示错误800解决方法

win7连接VPN时提示错误800解决方法 1.重启电脑并关闭网络连接,然后将软件和硬件的防火墙关闭掉,电脑杀毒软件自带的防火墙和路由器等设备的防火墙. 2.将VPN设备端口1723上的TCP协议中的窗口大小修改为0. 3.重新配置VPN主机的网络设置. 4.如果无法解决,建议联系设备制造商进行解决. 以上就是关于win7系统设置vpn虚拟连接教程介绍了,通过以上分享后,遇到相同问题的用户,请参照以上方法设置吧.

使用工具连接mysql时的错误提示

今天,同事在使用工具连接mysql时,发现了一个错误提示,如下 有问题,就看错误日志,同样发现了一条错误信息,如下 [ERROR] Incorrect definition of table mysql.proc: expected column 'comment'at position 15to have type text, found type char(64). 说是mysql.proc这个表的comment字段类型应该为text,但是却是char(64). 按照错误信息的提示,只要将c

win8系统连接宽带时提示错误813代码什么意思

故障原因: 其他宽带连接已连接上或系统原因等. 解决方法一: 1.重新启动电脑(一般能解决); 2. 重建宽带连接; 3. 重装操作系统. 错误813的流程图: 方法二 win10宽带连接错误813解决方案是建立一个批命令,关机时双击它,就会先断开宽带连接,然后才关机,具体步骤: 第一步.右击桌面

jdbc连接teradata时的错误信息

今天试着直接用jdbc连一下Teradata,报了下面的错: GSSException: Failure unspecified at GSS-API level (Mechanism level: UserFile parameter null) at com.teradata.tdgss.jtdgss.TdgssParseXml.<init>(DashoA1*..) at com.teradata.tdgss.jtdgss.TdgssConfigApi.<init>(Dasho

JSP连接MySQL时出现--错误:Access denied for user &amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39; (using password: YES)&amp;#39;解决方案

用代码进行用户验证的时候总是出现这个错误,翻译一下,应该是root用户的是权限的问题没有放开. 那就想办法解决一下吧,具体的来说可以有这样的几种方式. 解决方法,首先想到的是先重启一下MySQL服务吧,但是试了一下,发现这并没有什么用. 网上搜索了一下,相关于MySQL的权限的释放和管理问题,找到一个比较好的答案: //首先计入到mysql的客户端命令行. //然后 grant all privileges on *.* to 'root'@'localhost' identified by '

电脑连接VPN时提示错误721怎么办

    1.首先,咱们同时按下win7旗舰版电脑键盘上的win+R快捷键打开电脑的运行窗口,在打开的运行窗口中,咱们输入regedit并单击回车,这样就可以打开win7旗舰版电脑的注册表编辑器窗口了. 2.在打开的注册表编辑器窗口中,咱们依次点击展开左侧菜单中的HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/ 3.在打开窗口的"编辑"菜单上,

win7电脑连接VPN时提示错误721怎么办

    1.首先,咱们同时按下win7旗舰版电脑键盘上的win+R快捷键打开电脑的运行窗口,在打开的运行窗口中,咱们输入regedit并单击回车,这样就可以打开win7旗舰版电脑的注册表编辑器窗口了. 2.在打开的注册表编辑器窗口中,咱们依次点击展开左侧菜单中的HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002bE10318}/ 3.在打开窗口的"编辑"菜单上,