项目需要完成一个通过电子邮件找回密码的服务,小弟在网上找了篇代码但是却出现异常如下:望大家帮助javax.mail.SendFailedException: Sending failed;
  nested exception is:
class javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. n6sm2296378wag.39 at javax.mail.Transport.send0(Transport.java:218)
at javax.mail.Transport.send(Transport.java:80)
at com.cdjj.y2t034.mavk.email.FindPwdEmail.SendMail(FindPwdEmail.java:58)
at com.cdjj.y2t034.mavk.email.FindPwdEmail.main(FindPwdEmail.java:87)
package com.cdjj.y2t034.mavk.email;import java.util.Calendar;
import java.util.Date;
import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
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;/**
 * 发送电子邮件的类 
 * 功能:提供用户通过电子邮件找回密码 
 * 时间:2009年5月27日 
 * 地点:望平街(home) 
 * 作者:mavk
 * @author mavk
 * 
 */
public class FindPwdEmail {
private String E_from = "[email protected]";// 发件人地址
private String E_smtp = "smtp.gmail.com";// 邮件发送服务器(smtp)
private String E_user = "liu3232wei"; // 登录用户名
private String E_password = "********";// 登录密码
public FindPwdEmail() {
}

public boolean SendMail(String E_to, String E_title, String E_content) {
try {
Transport transport;
Properties props = new Properties();
props.put("mail.smtp.host", E_smtp);// 设置smtp主机
props.put("mail.smtp.auth", "true");// 使用smtp身份验证
props.put("mail.smtp.prot", "465");
Authenticator pauth = new passauth(E_user, E_password);
Session mySession = Session.getInstance(props, pauth);
Message mimeMsg = new MimeMessage(mySession);// 创建MIME邮件对象
mimeMsg.setFrom(new InternetAddress(E_from));// 设置发件人地址
mimeMsg.setRecipient(Message.RecipientType.TO, new InternetAddress(E_to));//设置收件人地址
mimeMsg.setSubject(E_title);// 设置邮件主题
mimeMsg.setSentDate(new Date());// 设置发送日期
MimeBodyPart part = new MimeBodyPart();// mail内容部分
part.setText(E_content);
part.setContent(E_content.toString(), "text/html;charset=gb2312");// 设置邮件格式为html
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(part);// 在 Multipart 中增加mail内容部分
mimeMsg.setContent(multipart);// 增加 Multipart 到信息体
// mimeMsg.setText(E_content);
transport = mySession.getTransport("smtp");
Transport.send(mimeMsg);// 发送邮件 transport.send(mimeMsg);/
System.out.println("发送成功");
return true;
} catch (MessagingException e) {
e.printStackTrace();
return false;
}
} private class passauth extends Authenticator {
private String authUser = ""; private String authPwd = ""; public passauth(String username, String password) {
authUser = username;
authPwd = password;
} public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.authUser, this.authPwd);
}
} // 主函数,调试用的,
public static void main(String[] args) {
Calendar rightNow = Calendar.getInstance();
System.out.println("开始的时候" + rightNow.getTime());
FindPwdEmail mail = new FindPwdEmail();
mail.SendMail("[email protected]", "javamail发的信",
"用javamail发的信。现在测试。请配合,哈哈");
Calendar rightNow1 = Calendar.getInstance();
System.out.println("结束的时候" + rightNow1.getTime()); }
}

解决方案 »

  1.   

    应该是jar没有导入吧。你用的是什么包?JavaMail要导包。
      

  2.   


    import java.util.Date; 
    import java.util.Properties; 
    import javax.servlet.*; //此句报错误的话请注释 
    import javax.mail.Session; 
    import javax.mail.Authenticator; 
    import javax.mail.PasswordAuthentication; 
    import javax.mail.Message; 
    import javax.mail.internet.MimeMessage; 
    import javax.mail.internet.InternetAddress; 
    import javax.mail.Transport; 
    public class javaMail { 
          private Properties properties; 
          private Session mailSession; 
          private MimeMessage mailMessage; 
          private Transport trans; 
          public javaMail() { 
          } 
          public void sendMail() { 
              try { 
                  properties = new Properties(); 
                  //设置邮件服务器 
                  properties.put("mail.smtp.host", "smtp.sina.com"); 
                  //验证 
                  properties.put("mail.smtp.auth", "true"); 
                  //根据属性新建一个邮件会话 
                  mailSession = Session.getInstance(properties, 
                                                    new Authenticator() { 
                      public PasswordAuthentication getPasswordAuthentication() { 
                          return new PasswordAuthentication("[email protected]", 
                              "*******"); 
                      } 
                  }); 
                  mailSession.setDebug(true); 
                  //建立消息对象 
                  mailMessage = new MimeMessage(mailSession); 
                  //发件人 
                  mailMessage.setFrom(new InternetAddress("[email protected]")); 
                  //收件人 
                  mailMessage.setRecipient(MimeMessage.RecipientType.TO, 
                                      new InternetAddress("[email protected]")); 
                  //主题 
                  mailMessage.setSubject("测试"); 
                  //内容 
                  mailMessage.setText("test"); 
                  //发信时间 
                  mailMessage.setSentDate(new Date()); 
                  //存储信息 
                  mailMessage.saveChanges(); 
                  // 
                  trans = mailSession.getTransport("smtp"); 
                  //发送 
                  trans.send(mailMessage); 
              } catch (Exception e) { 
                  e.printStackTrace(); 
              } finally { 
              } 
          } 
    /** 
      * @param args 
      */ 
    public static void main(String[] args) { 
      // TODO Auto-generated method stub 
      javaMail javaMail=new javaMail(); 
      javaMail.sendMail(); 

    }测试通过
      

  3.   

    使用了xnjnmn的代码还是会出现以下异常:
    DEBUG: setDebug: JavaMail version 1.3.1
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25220 irxd5-202.sinamail.sina.com.cn ESMTP
    DEBUG SMTP: connected to host "smtp.sina.com", port: 25EHLO Mavk_WindowsXP
    250-irxd5-202.sinamail.sina.com.cn
    250-8BITMIME
    250-SIZE 31457280
    250-AUTH PLAIN LOGIN
    250 AUTH=PLAIN LOGIN
    DEBUG SMTP: Found extension "8BITMIME", arg ""
    DEBUG SMTP: Found extension "SIZE", arg "31457280"
    DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
    DEBUG SMTP: Found extension "AUTH=PLAIN", arg "LOGIN"
    DEBUG SMTP: Attempt to authenticate
    AUTH LOGIN
    334 VXNlcm5hbWU6
    bGl1MzIzMndlaUBzaW5hLmNvbQ==
    334 UGFzc3dvcmQ6
    emp3aWxvdmU0
    535 #5.7.0 Authentication failed
    javax.mail.SendFailedException: Sending failed;
      nested exception is:
    class javax.mail.AuthenticationFailedException
    at javax.mail.Transport.send0(Transport.java:218)
    at javax.mail.Transport.send(Transport.java:80)
    at com.cdjj.y2t034.mavk.email.JavaMail.sendMail(JavaMail.java:54)
    at com.cdjj.y2t034.mavk.email.JavaMail.main(JavaMail.java:66)是不是我本身的环境有问题呢
      

  4.   

    535 #5.7.0 Authentication failed 登录异常?