0

我正在学习一个教程,以便创建一个使用 Hotmail STMP 发送邮件的类。不知何故,我得到了以下错误:

“javax.mail.NoSuchProviderException:没有 smtp 提供程序”

我尝试 ping 和 telnet 到 smtp.live.com,但没有得到回复。我不确定代码是否不正确或者是因为 hotmail 的 SMTP。任何人都可以给我一个建议吗?

谢谢你的帮助。

下面是课程:

import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 


public class Mail extends javax.mail.Authenticator { 
  private String _user; 
  private String _pass; 

  private String[] _to = new String[1]; 
  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 = "smtp.live.com"; // default smtp server
    _port = "587"; // default smtp port 
    _sport = "587"; // default socketfactory port 

    _user = ""; // username 
    _pass = ""; // password 
    _from = "conco@bebe.com"; // email sent from 
    _subject = "conco"; // email subject 
    _body = "bebe"; // email body 
    _to[0] = "conco@bebe.com";
    _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"); 
    props.put("mail.smtp.starttls.enable", "true");

    return props; 
  } 

  // the getters and setters 
  public String getBody() { 
    return _body; 
  } 

  public void setBody(String _body) { 
    this._body = _body; 
  } 

  public String[] getTo() { 
    return _to; 
  } 

  public void setTo(String[] _to) { 
    this._to = _to; 
  } 

  public String getFrom() { 
    return _from; 
  } 

  public void setFrom(String _from) { 
    this._from = _from; 
  }
  public String getSubject() { 
    return _subject; 
  } 

  public void setSubject(String _subject) { 
    this._subject = _subject; 
  }   
  // more of the getters and setters ….. 
} 

在主类中,我只调用一个构造函数和 send()

4

3 回答 3

0

我使用了您的代码,并且能够毫无错误地发送电子邮件。

new Mail("your email here", "your password here").send();

你这里有两个构造函数,一个没有参数的没有电子邮件和密码。

打开调试:_debuggable = true;

我正在使用 JavaMail API:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.5</version>
</dependency>
于 2014-07-04T04:42:21.853 回答
0

你试过25端口吗?我的邮箱设置显示 smtp 端口是 25。

于 2014-07-04T04:05:09.310 回答
0

公共静态无效 sendEmail() 抛出异常 {

    Properties props = null;
    if (props == null) {
        props = new Properties();
        props.put("mail.smtp.host", "smtp.live.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.user", "mahadevmane60@hotmail.com");
        props.put("mail.smtp.pwd", "mypassword");
    }
    Session session = Session.getInstance(props, null);
    session.setDebug(true);
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("mahadevmane60@hotmail.com"));
    msg.setSubject("Auto Generated Mail");
    msg.setText("Testing Mail");
msg.setRecipient(Message.RecipientType.TO, new InternetAddress("mahadevmane60@gmail.com"));
    Transport transport = session.getTransport("smtp");
    transport.connect("smtp.live.com", 587, "mahadevmane60@hotmail.com", "Mypassword");
    transport.sendMessage(msg, msg.getAllRecipients());
    System.out.println("Mail sent successfully at ");
    transport.close();
}
于 2017-04-09T14:15:50.103 回答