在java / servlet

时间:2017-07-25 11:30:03

标签: java jsp servlets javamail

我正在尝试使用email发送java。但我面临如下错误

  

javax.mail.AuthenticationFailedException:连接失败,未指定密码

为什么在我通过正确的电子邮件ID和密码进行身份验证后会收到此错误?

这是我的代码

import java.io.IOException;
import java.net.PasswordAuthentication;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestMail
 */
@WebServlet("/TestMail")
public class TestMail extends HttpServlet {
    private static final long serialVersionUID = 1L;


    public TestMail() {
        super();

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        todo(request,response);

    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        todo(request,response);

    }

    private void todo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf8");
        response.setCharacterEncoding("utf8");

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.host","smtp.gmail.com");
        props.put("mail.smtp.post","587");



        Session session = Session.getDefaultInstance(props,
                new Authenticator() {
                    protected PasswordAuthentication  getPasswordAuthentication() {
                    return new PasswordAuthentication(
                                "testing@gmail.com", "testing123");
                            }
                });

        Message message=new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress("testing@gmail.com","hello"));

        message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("testing@gmail.com"));
        message.setSubject("Testing Email");
        message.setText("hello this is testing mail \n \n Congrets");
        Transport.send(message);
        System.out.println("Mail Sent Successfully");
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

my error image

2 个答案:

答案 0 :(得分:0)

JavaMail Authenticator位于javax.mail包中,与同名的java.net类不​​同。这两个不共享相同的Authenticator,因为JavaMail API与Jav​​a 1.1一起使用,Java 1.1没有java.net变种。

参考: http://www.rgagnon.com/javadetails/java-0538.html

答案 1 :(得分:0)

1)请为POP3电子邮件使用正确的jar文件:

    import java.util.Properties;
    import javax.activation.*;
    import javax.mail.*;

2)然后建立你的信息:

    Properties props = new Properties();

    props.put("mail.smtp.host",                 <mail_server>);
    props.put("mail.smtp.port",                 <port>);
    props.put("mail.smtp.user",                 <user>);
    props.put("mail.smtp.password",             <pw>);
    props.put("mail.smtp.auth",                 <logon>);
    props.put("mail.from",                      <from>);

    Session session = Session.getInstance(props, null);

    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom();
        msg.setRecipients(Message.RecipientType.TO,  <email_to>);
        msg.setRecipients(Message.RecipientType.CC,  <email_cc>);
        msg.setRecipients(Message.RecipientType.BCC, <email_bcc>);
        msg.setSubject(x_subject, Globals.q_UNICODE_MAIL);
        msg.setSentDate(new Date());
        msg.setHeader("Disposition-Notification-To", x_from);
  //
  //<build your Multipart message>
  //

3)最后,连接并发送:

        Transport transport = session.getTransport("smtp");
        if ( <logon_required> ) {
             transport.connect(<mail_server>, <user>, <pw>);
        }
        transport.sendMessage(msg, msg.getAllRecipients());