java - 从java应用程序发送电子邮件时出现问题

标签 java netbeans gmail

我们在尝试从 Java 应用程序发送电子邮件时遇到问题。 我们在 Netbeans Wiki 上找到了一些实现邮件发送器的代码,

我们在尝试连接到源邮件 (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 =  "Java.Mail.MyEmail@gmail.com";           // specify your email id here (sender's email id)
            String password = "Mypassword";                                      // specify your password here
            return new PasswordAuthentication(username, password);
        }
  }

}

最佳答案

缺少各种属性(看看你没有什么):

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,你必须为它们各自的邮件协议(protocol)设置SocketFactory

不要忘记 GMail 在安全层上进行身份验证(因此 mail.smtp.socketFactory.fallback 设置为 false)。

请参阅 JavaWorld 上的安全 JavaMail 示例。 .

关于java - 从java应用程序发送电子邮件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4089016/

相关文章:

java - 如何在 Scala 或 Java 中读取具有混合编码的文本文件?

java - 如何按字母顺序对字符串数组进行排序(不使用compareTo或Arrays.sort)

ubuntu - 在 ubuntu 14 启动画面后 Netbeans 无法启动

email - 使用 TLS 和普通身份验证将电子邮件发送到 Gmail 的 SMTP 服务器

Java发送电子邮件: smtp. gmail.com错误

Java无法发送带有图像的html电子邮件

java - org.h2.jdbc.JdbcSQLException : General error: "java.lang.StackOverflowError" [50000-176]

Java 简单日期格式 - dd/MM/yy v/s dd/MM/yyyy

Java - 使用从 WSDL 类生成的 SOAP

java - EJB 项目中的 Jeddict