首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javax.mail.AuthenticationFailedException: 535身份验证失败(#5.7.1)

javax.mail.AuthenticationFailedException: 535身份验证失败(#5.7.1)
EN

Stack Overflow用户
提问于 2013-07-31 20:24:17
回答 3查看 33.3K关注 0票数 4

我正在制作一个自动发送电子邮件java项目使用javamail api。当我使用smtp.gmail.com主机发送此邮件时,它可以正常工作。但是当我使用我自己的主机服务器时,mail.sitename.com...it显示exception..my用户名和密码是正确的。请任何人帮我解决这个问题……例外情况是:-

代码语言:javascript
运行
复制
    javax.mail.AuthenticationFailedException: 535 authentication failed (#5.7.1)

    at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
    at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
    at javax.mail.Service.connect(Service.java:317)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at com.zenga.servlet.MailNotification.sendMail(MailNotification.java:130)
    at com.zenga.servlet.MailNotification.doPost(MailNotification.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

代码:

a)我正在使用DAO模式来获取数据,用于(电子邮件id )目的b)一个jsp文件开始并限制获取连接到我要发送电子邮件的那些人。c) Servlet文件如下所示...

代码语言:javascript
运行
复制
package com.zenga.servlet;

import java.io.*;
import java.security.GeneralSecurityException;
import java.util.*;
import com.sun.mail.util.MailSSLSocketFactory;
import com.zenga.dao.DaoFactory;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.mail.*;
import javax.mail.internet.*;

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

    @SuppressWarnings("unchecked")
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        HashMap<String, String>list =   new HashMap<String, String>();
        Set<?> set      =   null;
        Iterator<?> itr =   null;
        int start   =   0;
        int limit   =   0;
        Map.Entry<String, String> me = null;
        try {
            DaoFactory dao  =   DaoFactory.getDao();
            start   =   Integer.parseInt(request.getParameter("start"));
            limit   =   Integer.parseInt(request.getParameter("end"));
            list    =   dao.insertLimit(start,limit);
            set     =   list.entrySet();
            itr     =   set.iterator();

            while(itr.hasNext()) {
                me  =   (Map.Entry<String, String>)itr.next();
                sendMail(me.getKey(),me.getValue(),request,response);
            }
        } catch (Exception e) {

        }

    }

    private void sendMail(String toUsername, String to,HttpServletRequest request,HttpServletResponse response) throws IOException, GeneralSecurityException {

       final String from        =   "xyz@sitename.com";
       final String subject     =   "a subject";
       final String password    =   "password";
       final String host        =   "mail.sitename.com";
         String msg         =    getMessage(toUsername);

            //Set the host SMTP address

                  /*MailSSLSocketFactory socketFactory= new MailSSLSocketFactory();
            socketFactory.setTrustAllHosts(true);

            Properties properties=System.getProperties();
            properties.put("mail.smtp.host", host);
            properties.put("mail.smtp.user", from);
            properties.put("mail.smtp.password", password);
            //properties.put("mail.smtp.starttls.enable","true");
            properties.put("mail.smtp.ssl.socketFactory", socketFactory);
             properties.put("mail.smtp.EnableSSL.enable","true");


        //  properties.put("mail.smtp.ssl.enable","false");
            properties.put("mail.smtp.ssl.trust",host);
            properties.put("mail.protocol.ssl.trust", host);
            properties.put("mail.smtp.socketFactory.port", "587");
                    properties.put("mail.smtp.socketFactory.class",
                    "javax.net.ssl.SSLSocketFactory");
            properties.put("mail.smtp.port", "587");
            properties.put("mail.smtp.auth", "true");
            */ 

            Properties properties=System.getProperties();
            properties.put("mail.smtp.host",host);
            properties.put("mail.smtp.user",from);
            properties.put("mail.smtp.password",password);
            properties.put("mail.smtp.port","587");
            properties.put("mail.smtp.auth","true");
        //  properties.put("mail.smtp.starttls.enable","true");
                properties.put("mail.smtp.ssl.enable","false");
                properties.put("mail.smtp.starttls.enable","false");

            Authenticator auth = new Authenticator(){
                public PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(from,password);
                }
            };
            Session session=Session.getDefaultInstance(properties,auth);
            response.setContentType("text/html");
            try{
                // create a message

                MimeMessage message=new MimeMessage(session);

                // set the from and to address
              //  InternetAddress addressFrom = new InternetAddress(from);
                message.setFrom(new InternetAddress(from));
                //InternetAddress addressTo   = new InternetAddress(to);
                message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

                // Setting the Subject and Content Type
                message.setSubject(subject);

                // create and fill the first message part
                MimeBodyPart msgBodypart = new MimeBodyPart();

                msgBodypart.setText(msg,"ascii","hmtl");


                // create the Multipart and add its parts to it
                Multipart multipart=new MimeMultipart();
                multipart.addBodyPart(msgBodypart);
                // add the Multipart to the message
                message.setContent(multipart);
                // set the Date: header
                message.setSentDate(new Date());

                        Transport.send(message);
                        success++;


            }
            catch(MessagingException me)
            { 
                failed++;
                me.printStackTrace();
            }
     }



    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
}

我也尝试了评论中的所有方法,但都不起作用。我读了很多堆栈溢出的例子,但是没有人能正确地解决它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-29 21:14:40

找到解决方案了..。有时javax.mail.AuthenticationFailedException: 535身份验证失败(#5.7.1)发生在主机没有使用code...as验证用户的限制时,我调用主机在一个程序中向大约500个用户发送邮件,running.So sendMail()调用了500次,并使服务器挂起。因此,它阻止了我的身份验证编码网站,但可以使用浏览器访问。当我创建一个新帐户,然后在编码中创建了一个线程时,我找到了解决方案,通过这个线程,sendMail()将以10秒的间隔被调用,然后在go中发送给100个用户。主机来自网络解决方案电子邮件登录。希望我能给别人解决这类问题的方法。:)

票数 5
EN

Stack Overflow用户

发布于 2014-01-07 03:42:11

在一个项目中,我需要发送一封带有附件的电子邮件,其中包含可以在不同客户端计算机上生成的测试结果,我使用了以下属性和代码(这些属性被转换为以下代码中提到的Settings对象中的字段)

代码语言:javascript
运行
复制
==================== Properties Section ====================
! Default Properties for the Email section of the project - others omitted

! The email provider may or may not require authentication - make sure to make the appropriate choices on the client
EmailSender = aUser@gmail.com
EmailPassword = unEncriptedPassword
EmailRecipients = me@gmail.com,she@gmail.com,you@yahoo.com,andAnyBodyElse@aol.com
EmailHost = smtp.gmail.com
EmailPort = 587
EmailAuthenticationRequired = true

==================== Code Section ====================
public class Email {

   public static void sendMail(String subject, String messageBody, String fileName) throws MessagingException {

      DDTSettings settings = DDTSettings.Settings();
      final String sender = settings.emailSender();
      final String password = settings.emailPassword();
      String[] recipients = settings.emailRecipients().split(",");
      String host = settings.emailHost();
      String port = settings.emailPort();
      boolean emailAuthenticationRequired = settings.emailAuthenticationRequired();
      String trueOrFalse = emailAuthenticationRequired ? "true" : "false";
      Properties properties = System.getProperties();
      Session session;

      // Use system properties and add some related to email protocol
      Properties props = System.getProperties();

      // Setup mail server
      props.setProperty("mail.smtp.host", host);
      props.setProperty("mail.smtp.port", port);
      props.setProperty("mail.smtp.ssl.enable", "false");
      props.setProperty("java.net.preferIPv4Stack","true");
      props.setProperty("mail.smtp.starttls.enable", trueOrFalse);
      props.setProperty("mail.smtp.auth", trueOrFalse);

      // Create a session with or without authentication object as indicated in the settings.
       if (emailAuthenticationRequired) {
           Authenticator auth = new Authenticator() {
               protected PasswordAuthentication  getPasswordAuthentication() {
                   return new PasswordAuthentication(sender, password);
               }
           };
           session = Session.getDefaultInstance(props, auth);
       }
       else {
           props.setProperty("mail.smtp.user", sender); // Needed if not authenticating
           props.setProperty("mail.smtp.password", password); // Needed if not authenticatin 
           session = Session.getDefaultInstance(props);
       }

       // Setup the message in two parts, body and attachment then send it
      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(sender));
         //message.setReplyTo({new InternetAddress(sender)});

         // Set recipients
         for (int i = 0; i<recipients.length; i++) {
            message.addRecipient(Message.RecipientType.TO,
                  new InternetAddress(recipients[i]));
         }

         // Set Subject: header field
         message.setSubject(subject);

         // Create the message part
         BodyPart messageBodyPart = new MimeBodyPart();

         // Set the body of the message as html content
         messageBodyPart.setContent(messageBody, "text/html");

         // Create a multipart message
         Multipart multipart = new MimeMultipart();

         // Set text message part
         multipart.addBodyPart(messageBodyPart);

         // Part two is attachment
         messageBodyPart = new MimeBodyPart();
         DataSource source = new FileDataSource(fileName);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(source.getName());  
         multipart.addBodyPart(messageBodyPart);

         // Place the entire kit & caboodle in the message
         message.setContent(multipart );

         // Send message
         Transport.send(message);
      }
      catch (MessagingException e) {
         e.printStackTrace();
      }

   }
}
票数 0
EN

Stack Overflow用户

发布于 2019-08-08 14:38:29

如果你正在使用电子邮件的gmail帐户(SMTP),那么确保你在application.properties文件中有正确的电子邮件密码,并启用这个设置,允许你的gmail帐户使用不太安全的应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17970343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档