Java com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 需要身份验证

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20780495/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 04:16:50  来源:igfitidea点击:

com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required

javaexceptionjavamailsmtp-auth

提问by Malik

I am trying to send an Email from my Java Application to any particular email address. I am using Java Mail API but Unfortunately i am getting SMTPSendFailedException error. Can any body tell me where i am doing a mistake. Here is my code

我正在尝试从我的 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 = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

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

回答by eatSleepCode

While creating session override a method PasswordAuthenticationand in that give username and password.

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

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

回答by Elliott Frisch

Try these

试试这些

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

回答by Sanjay Nagare

properties.setProperty("mail.smtp.user", "abc");
properties.setProperty("mail.smtp.password", "xyz");
properties.setProperty("mail.smtp.auth", "true"); 

please try using this

请尝试使用这个

回答by Denis Sheremetov

If it still doesn't work for you try this:

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

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

回答by Dias

Try also

也试试

Transport.send(message, user, pass);

I have found this in Transport class documentation

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

Use the specified user name and password to authenticate to the mail server.

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

public static void send(Message msg, String user, String password) throws MessagingException {

    msg.saveChanges();
    send0(msg, msg.getAllRecipients(), user, password);
}

I am Using JavaMail v 1.6.1 and MailTrap SMTP Server

我正在使用 JavaMail v 1.6.1 和MailTrap SMTP 服务器

回答by Vladimir Vagaytsev

I faced the same issue recently. I tried to send an email over Gmail server with API key + password auth. Transport.send(message)didn't work for me, I debugged it and found out that it ignored session settings attached to the message.

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

This is now I did the email sending over SMTP Gmail server with auth and TLS. I used com.sun.mail:javax.mail-1.6.1

现在我使用身份验证和 TLS 通过 SMTP Gmail 服务器发送电子邮件。我用了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 = "[email protected]"; // 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());

回答by Rishi Singhal

This works for me:

这对我有用:

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