我正在尝试从我的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();
}
}
}
答案 0 :(得分:6)
properties.setProperty("mail.smtp.user", "abc");
properties.setProperty("mail.smtp.password", "xyz");
properties.setProperty("mail.smtp.auth", "true");
请尝试使用此
答案 1 :(得分:2)
创建会话时会覆盖方法PasswordAuthentication
,并提供用户名和密码。
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("pqr@gmail.com","xyz@123");
}
});
答案 2 :(得分: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 :(得分:1)
如果它仍然无效,请尝试:
properties.setProperty("mail.smtps.ssl.enable", "true");
properties.setProperty("mail.smtps.auth", "true");
答案 4 :(得分:0)
尝试
Transport.send(message, user, pass);
我在Transport类文档中找到了这个
使用指定的用户名和密码对邮件进行身份验证 服务器
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
答案 5 :(得分:0)
我最近遇到了同样的问题。我尝试使用API密钥+密码身份验证通过Gmail服务器发送电子邮件。 Transport.send(message)
对我不起作用,我对其进行了调试,发现它忽略了附加到message
的会话设置。
现在,我通过身份验证和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());
答案 6 :(得分:0)
这对我有用:
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);
答案 7 :(得分:0)
properties.setProperty("mail.smtp.user", "abc");
properties.setProperty("mail.smtp.password", "xyz");
properties.setProperty("mail.smtp.auth", "true");
成功了,解决了我的问题