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
com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required
提问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 PasswordAuthentication
and 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);