【问题标题】:com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Requiredcom.sun.mail.smtp.SMTPSendFailedException:530-5.5.1 需要身份验证
【发布时间】:2014-01-13 20:28:52
【问题描述】:

我正在尝试从我的 Java 应用程序向任何特定的电子邮件地址发送一封电子邮件。 我正在使用 Java Mail API,但不幸的是我收到了 SMTPSendFailedException 错误。任何人都可以告诉我我在哪里做错了。这是我的代码

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

//import SeconMail.Authenticator;

public class SendMail
{

   public static void main(String [] args)
   {    

      // Recipient's email ID needs to be mentioned.
      String to = "to@gmail.com";

      // Sender's email ID needs to be mentioned
      String from = "from@expertflow.com";

      // Assuming you are sending email from localhost
      String host = "smtp.gmail.com";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server

      properties.setProperty("mail.smtp.host", host);


      properties.put("mail.smtp.starttls.enable", "true");

      properties.put("mail.smtp.auth", "false");
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      session.setDebug(true);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

【问题讨论】:

  • 试试properties.put("mail.smtp.auth", "true");,你可能还需要用户名和密码。
  • 感谢您的回复 Elliott ,如何指定用户名和密码?请你告诉我。
  • 嗨 Malik,你的问题解决了吗?
  • Yes Sanjay 我的问题解决了。 :)

标签: java exception jakarta-mail smtp-auth


【解决方案1】:

在创建会话时覆盖方法 PasswordAuthentication 并在其中提供用户名和密码。

    Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() 
    {
        protected PasswordAuthentication getPasswordAuthentication() 
        {
            return new PasswordAuthentication("pqr@gmail.com","xyz@123");
        }
   });

【讨论】:

    【解决方案2】:

    试试这些

    String login = "myemailhere";
    String pass = "mypasshere";
    properties.setProperty("mail.smtp.user", login);
    properties.setProperty("mail.smtp.password", pass);
    properties.setProperty("mail.smtp.auth", "true");      
    
    Transport transport = session.getTransport("smtp");
    transport.connect(null, login, pass);
    

    【讨论】:

      【解决方案3】:
      properties.setProperty("mail.smtp.user", "abc");
      properties.setProperty("mail.smtp.password", "xyz");
      properties.setProperty("mail.smtp.auth", "true"); 
      

      请尝试使用这个

      【讨论】:

        【解决方案4】:

        如果它仍然不适合你试试这个:

        properties.setProperty("mail.smtps.ssl.enable", "true");
        properties.setProperty("mail.smtps.auth", "true"); 
        

        【讨论】:

          【解决方案5】:

          也试试

          Transport.send(message, user, pass);
          

          我在运输类文档中找到了这个

          使用指定的用户名和密码对邮件进行身份验证 服务器。

          public static void send(Message msg, String user, String password) throws MessagingException {
          
              msg.saveChanges();
              send0(msg, msg.getAllRecipients(), user, password);
          }
          

          我正在使用 JavaMail v 1.6.1 和 MailTrap SMTP Server

          【讨论】:

            【解决方案6】:

            我最近遇到了同样的问题。我尝试使用 API 密钥 + 密码验证通过 Gmail 服务器发送电子邮件。 Transport.send(message) 对我不起作用,我对其进行了调试,发现它忽略了附加到 message 的会话设置。

            现在我通过 SMTP Gmail 服务器使用身份验证和 TLS 发送电子邮件。我用com.sun.mail:javax.mail-1.6.1

                String host = "your-email-server-host"; // define your server host here
                int port = 587; // standard port for TLS connection
            
                // config session properties, here the SMTP protocol is used
                Properties properties = new Properties();
                properties.setProperty("mail.smtp.host", host);
                properties.setProperty("mail.smtp.port", String.valueOf(port));
                properties.setProperty("mail.smtp.auth", "true"); // enable auth
                properties.setProperty("mail.smtp.starttls.enable", "true"); // enable TLS
            
                // get session instace baed on the settings defined above
                Session session = Session.getInstance(properties);
            
                // `prepareMessage` implementation is omitted, construct your own message here
                MimeMessage mimeMessage = prepareMessage(email, session);
            
                // your credentials       
                String username = "your-username@gmail.com"; // or API key, I used API key
                String password = "your-password";
            
                // get the transport instance from the freshly created session
                // pass the valid protocol name, here the SMTP is used
                Transport transport = session.getTransport("stmp");
            
                // connect to the transport instance with your credentials
                transport.connect(host, port, username,password);
            
                // send the message
                transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
            

            【讨论】:

              【解决方案7】:

              这对我有用:

              final Properties properties = System.getProperties();
              
              // Setting up mail server
              properties.setProperty("mail.smtp.host", EMAIL_SMTP_HOST);
              properties.put("mail.smtp.starttls.enable", "true");
              properties.put("mail.smtp.auth", "true");
              
              Session session = Session.getInstance(properties, new Authenticator() {
                  @Override
                  protected PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication(EMAIL_USERNAME,
                              EMAIL_PASSWORD);
                  }
              });
              session.setDebug(true);
              

              【讨论】:

                【解决方案8】:
                properties.setProperty("mail.smtp.user", "abc");
                properties.setProperty("mail.smtp.password", "xyz");
                properties.setProperty("mail.smtp.auth", "true");
                

                成功了,解决我的问题

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-07-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-12-05
                  • 1970-01-01
                  相关资源
                  最近更新 更多