com.sun.mail.smtp.SMTPSendFailedException:530-5.5.1需要validation

我正在尝试从我的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.setProperty("mail.smtp.user", "abc"); properties.setProperty("mail.smtp.password", "xyz"); properties.setProperty("mail.smtp.auth", "true"); 

请尝试使用此function

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

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

试试这些

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

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

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

也试试

 Transport.send(message, user, pass); 

我在Transport类文档中找到了这个

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

 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服务器

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

现在,我通过身份validation和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 = "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());