可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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
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();
}
}
}
回答1:
properties.setProperty("mail.smtp.user", "abc");
properties.setProperty("mail.smtp.password", "xyz");
properties.setProperty("mail.smtp.auth", "true");
please try using this
回答2:
While creating session override a method PasswordAuthentication
and in that give username and password.
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("pqr@gmail.com","xyz@123");
}
});
回答3:
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);
回答4:
If it still doesn't work for you try this:
properties.setProperty("mail.smtps.ssl.enable", "true");
properties.setProperty("mail.smtps.auth", "true");
回答5:
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
回答6:
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
.
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
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:
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);