2010-11-03 58 views
1

我們在嘗試從我們的Java應用程序發送電子郵件時遇到問題。 我們在Netbeans Wiki上發現了一些代碼來實現郵件發送者,從Java應用程序發送電子郵件的問題

當我們試圖連接到我們的源郵件(gmail)時,我們收到錯誤消息。 我們是否需要編輯我們的Gmail帳戶中的任何設置?

感謝, 約翰尼

StackTrace: 
SEVERE: javax.mail.AuthenticationFailedException: 535-5.7.1 Username and Password not accepted. Learn more at     
535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 r21sm5698680bkj.22 
     at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:648) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:583) 
     at javax.mail.Service.connect(Service.java:313) 
     at javax.mail.Service.connect(Service.java:172) 
     at javax.mail.Service.connect(Service.java:121) 
     at javax.mail.Transport.send0(Transport.java:190) 
     at javax.mail.Transport.send(Transport.java:120) 
     at jMail.Mail.sendMail(Mail.java:115) 
     at org.apache.jsp.sendMail_jsp._jspService(sendMail_jsp.java from :82) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) 
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) 
     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) 
     at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) 
     at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) 
     at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 
     at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 
     at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) 
     at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 
     at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
     at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
     at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
     at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
     at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
     at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 
     at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 
     at java.lang.Thread.run(Thread.java:619) 

INFO: Exception javax.mail.AuthenticationFailedException: 535-5.7.1 Username and Password not accepted. Learn more at     
535 5.7.1 r21sm5698680bkj.22 

代碼:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

package jMail; 
import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*; 


/** 
* 
* @author yaldaag 
*/ 
public class Mail { 
    private String to; 
    private String from; 
    private String message; 
    private String subject; 
    private String smtpServ; 

    /** 
    * @return the to 
    */ 
    public String getTo() { 
     return to; 
    } 

    /** 
    * @param to the to to set 
    */ 
    public void setTo(String to) { 
     this.to = to; 
    } 

    /** 
    * @return the from 
    */ 
    public String getFrom() { 
     return from; 
    } 

    /** 
    * @param from the from to set 
    */ 
    public void setFrom(String from) { 
     this.from = from; 
    } 

    /** 
    * @return the message 
    */ 
    public String getMessage() { 
     return message; 
    } 

    /** 
    * @param message the message to set 
    */ 
    public void setMessage(String message) { 
     this.message = message; 
    } 

    /** 
    * @return the subject 
    */ 
    public String getSubject() { 
     return subject; 
    } 

    /** 
    * @param subject the subject to set 
    */ 
    public void setSubject(String subject) { 
     this.subject = subject; 
    } 

    /** 
    * @return the smtpServ 
    */ 
    public String getSmtpServ() { 
     return smtpServ; 
    } 

    /** 
    * @param smtpServ the smtpServ to set 
    */ 
    public void setSmtpServ(String smtpServ) { 
     this.smtpServ = smtpServ; 
    } 

    public int sendMail(){ 
     try 
     { 
      Properties props = System.getProperties(); 
       // -- Attaching to default Session, or we could start a new one -- 
       props.put("mail.transport.protocol", "smtp"); 
       props.put("mail.smtp.starttls.enable","true"); 
       props.put("mail.smtp.host",smtpServ); 
       props.put("mail.smtp.auth", "true"); 
       Authenticator auth = new SMTPAuthenticator(); 
       Session session = Session.getInstance(props, auth); 
       // -- Create a new message -- 
       Message msg = new MimeMessage(session); 
       // -- Set the FROM and TO fields -- 
       msg.setFrom(new InternetAddress(from)); 
       msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); 
       msg.setSubject(subject); 
       msg.setText(message); 
       // -- Set some other header information -- 
       msg.setHeader("MyMail", "Mr. XYZ"); 
       msg.setSentDate(new Date()); 
       // -- Send the message -- 
       Transport.send(msg); 
       System.out.println("Message sent to"+to+" OK."); 
       return 0; 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
      System.out.println("Exception "+ex); 
      return -1; 
     } 
    } 

    private class SMTPAuthenticator extends javax.mail.Authenticator { 
     @Override 
     public PasswordAuthentication getPasswordAuthentication() { 
      String username = "[email protected]";   // specify your email id here (sender's email id) 
      String password = "Mypassword";          // specify your password here 
      return new PasswordAuthentication(username, password); 
     } 
    } 

} 

回答

1

有缺失(看你沒有的東西)的各種屬性:

props.put("mail.transport.protocol", "smtp");  
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "465"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.socketFactory.fallback", "false"); 
props.put("mail.smtp.socketFactory.port", "465"); 

從本質上講,如果你想安全地訪問SMTP,POP3,IMAP,你必須設置他們的Soc用於他們各自的郵件協議的工廠工廠

不要忘了GMail在安全層上進行身份驗證(因此mail.smtp.socketFactory.fallback爲什麼設置爲false)。

查看關於的示例在JavaWorld上的安全JavaMail

0

您是否需要在SMTPAuthenticator中設置登錄名和密碼?

+1

OP已經這樣做了,向下滾動源代碼。 – 2010-11-03 16:21:24

+0

我明白了。謝謝 – Ramp 2010-11-03 16:24:34

相關問題