简体   繁体   English

在Java / Servlet中发送邮件时出错

[英]Error in sending mail in java/servlet

I am trying to send email using java . 我正在尝试使用java发送email But I face error like below 但是我遇到如下错误

javax.mail.AuthenticationFailedException: failed to connect, no password specified javax.mail.AuthenticationFailedException:连接失败,未指定密码

Why am I getting this error when I have passed the correct email-id and password for authentication? 通过正确的身份验证电子邮件和密码后,为什么会出现此错误?

This is my code 这是我的代码

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();
        }

    }

}

我的错误图片

The JavaMail Authenticator is found in the javax.mail package and is different from the java.net class of the same name. JavaMail Authenticator可在javax.mail包中找到,并且与同名的java.net类不​​同。 The two don't share the same Authenticator as the JavaMail API works with Java 1.1, which didn't have the java.net variety. 两者不共享相同的Authenticator,因为JavaMail API与Jav​​a 1.1(不具有java.net品种)一起使用。

Refer this : http://www.rgagnon.com/javadetails/java-0538.html 请参阅: http : //www.rgagnon.com/javadetails/java-0538.html

1) Please use proper jar files for POP3 emails: 1)请为POP3电子邮件使用正确的jar文件:

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

2) And then build your message: 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) Finally, connect and send: 3)最后,连接并发送:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM